// @(#)root/treeviewer:$Id: c8e226dde2f9b6f39946bfe90cabcb778d63dc4f $
//Author : Andrei Gheata   16/08/00

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//
// TreeViewer is a graphic user interface designed to handle ROOT trees and to
// take advantage of TTree class features.
//
// It uses ROOT native GUI widgets adapted for 'drag and drop' functionality.
// in the same session.
// The following capabilities are making the viewer a helpful tool for analysis:
//  - several trees may be opened in the same session;
//  - branches and leaves can be easily browsed or scanned;
//  - fast drawing of branch expressions by double-clicking;
//  - new variables/selections easy to compose with the built-in editor;
//  - histograms can be composed by dragging leaves or user-defined expressions
//  to X, Y and Z axis items;
//  - the tree entries to be processed can be selected with a double slider;
//  - selections can be defined and activated by dragging them to the 'Cut' item;
//  - all expressions can be aliased and aliases can be used in composing others;
//  - input/output event lists easy to handle;
//  - menu with histogram drawing options;
//  - user commands may be executed within the viewer and the current command
//  can be echoed;
//  - current 'Draw' event loop is reflected by a progress bar and may be
//  interrupted by the user;
//  - all widgets have self-explaining tool tips and/or context menus;
//  - expressions/leaves can be dragged to a 'scan box' and scanned by
//  double-clicking this item. The result can be redirected to an ASCII file;
//
// The layout has the following items:
//
//  - a menu bar with entries : File, Edit, Run, Options and Help;
//  - a toolbar in the upper part where you can issue user commands, change
//  the drawing option and the histogram name, three check buttons Hist, Rec
//  and Scan.HIST toggles histogram drawing mode, REC enables recording of the
//  last command issued and SCAN enables redirecting of TTree::Scan command in
//  an ASCII file (see -Scanning expressions-);
//  - a button bar in the lower part with : buttons DRAW/STOP that issue histogram
//  drawing and stop the current command respectively, two text widgets where
//  input and output event lists can be specified, a message box and a RESET
//  button on the right that clear edited expression content (see Editing...)
//  - a tree-type list on the main left panel where you can select among trees or
//  branches. The tree/branch will be detailed in the right panel.
//  Mapped trees are provided with context menus, activated by right-clicking;
//  - a view-type list on the right panel. The first column contain X, Y and
//  Z expression items, an optional cut and ten optional editable expressions.
//  Expressions and leaf-type items can be dragged or deleted. A right click on
//  the list-box or item activates context menus.
//
// Opening a new tree and saving a session :
//
//   To open a new tree in the viewer use <File/Open tree file> menu
// The content of the file (keys) will be listed. Use <SetTreeName> function
// from the context menu of the right panel, entering a tree name among those
// listed.
//   To save the current session, use <File/Save> menu or the <SaveSource>
// function from the context menu of the right panel (to specify the name of the
// file - name.C)
//   To open a previously saved session for the tree MyTree, first open MyTree
// in the browser, then use <File/Open session> menu.
//
// Dragging items:
//
// Items that can be dragged from the list in the right : expressions and
// leaves. Dragging an item and dropping to another will copy the content of first
// to the last (leaf->expression, expression->expression). Items far to the right
// side of the list can be easily dragged to the left (where expressions are
// placed) by dragging them to the left at least 10 pixels.
//
// Editing expressions
//
//   Any editable expression from the right panel has two components : a
// true name (that will be used when TTree::Draw() commands are issued) and an
// alias. The visible name is the alias. Aliases of user defined expressions have
// a leading ~ and may be used in new expressions. Expressions containing boolean
// operators have a specific icon and may be dragged to the active cut (scissors
// item) position.
//    The expression editor can be activated by double-clicking empty expression,
// using <EditExpression> from the selected expression context menu or using
// <Edit/Expression> menu.
//    The editor will pop-up in the left part, but it can be moved.
// The editor usage is the following :
//   - you can write C expressions made of leaf names by hand or you can insert
//   any item from the right panel by clicking on it (recommandable);
//   - you can click on other expressions/leaves to paste them in the editor;
//   - you should write the item alias by hand since it not only make the expression
//  meaningfull, but it also highly improve the layout for big expressions
//   - you may redefine an old alias - the other expressions depending on it will
//   be modified accordingly. An alias must not be the leading string of other aliases.
//  When Draw commands are issued, the name of the corresponding histogram axes
//  will become the aliases of the expressions.
//
// User commands can be issued directly from the textbox labeled "Command"
// from the upper-left toolbar by typing and pressing Enter at the end.
//   Another way is from the right panel context menu : ExecuteCommand.
// All commands can be interrupted at any time by pressing the STOP button
// from the bottom-left
// You can toggle recording of the current command in the history file by
// checking the Rec button from the top-right
//
// Context menus
//
//   You can activate context menus by right-clicking on items or inside the
// right panel.
// Context menus for mapped items from the left tree-type list :
//   The items from the left that are provided with context menus are tree and
// branch items. You can directly activate the *MENU* marked methods of TTree
// from this menu.
// Context menu for the right panel :
//   A general context menu is acivated if the user right-clicks the right panel.
//   Commands are :
//   - EmptyAll        : clears the content of all expressions;
//   - ExecuteCommand  : execute a ROOT command;
//   - MakeSelector    : equivalent of TTree::MakeSelector();
//   - NewExpression   : add an expression item in the right panel;
//   - Process         : equivalent of TTree::Process();
//   - SaveSource      : save the current session as a C++ macro;
//   - SetScanFileName : define a name for the file where TTree::Scan command
//   is redirected when the <Scan> button is checked;
//   - SetTreeName     : open a new tree whith this name in the viewer;
//   A specific context menu is activated if expressions/leaves are right-clicked.
//   Commands are :
//   - Draw            : draw a histogram for this item;
//   - EditExpression  : pops-up the expression editor;
//   - Empty           : empty the name and alias of this item;
//   - RemoveItem      : removes clicked item from the list;
//   - Scan            : scan this expression;
//   - SetExpression   : edit name and alias for this item by hand;
//
// Starting the viewer
//
//   1) From the TBrowser :
//  Select a tree in the TBrowser, then call the StartViewer() method from its
// context menu (right-click on the tree).
//   2) From the command line :
//  Start a ROOT session in the directory where you have your tree.
// You will need first to load the library for TTreeViewer and optionally other
// libraries for user defined classes (you can do this later in the session) :
//    root [0] gSystem->Load(\"TTreeViewer\");
// Supposing you have the tree MyTree in the file MyFile, you can do :
//    root [1] TFile file(\"Myfile\");
//    root [2] new TTreeViewer(\"Mytree\");
// or :
//    root [2] TreeViewer *tv = new TTreeViewer();
//    root [3] tv->SetTreeName(\"Mytree\");
//
//Begin_Html
/*
<img src="treeview.gif">
*/
//End_Html
//

#include "RConfigure.h"

#include "Riostream.h"
#include "TTreeViewer.h"
#include "HelpText.h"
#include "HelpTextTV.h"
#include "TTVLVContainer.h"
#include "TTVSession.h"

#include "TROOT.h"
#include "TError.h"
#include "TGMsgBox.h"
#include "TTreePlayer.h"
#include "TContextMenu.h"
#include "TInterpreter.h"
#include "TLeaf.h"
#include "TRootHelpDialog.h"
#include "TSystem.h"
#include "TApplication.h"
#include "TVirtualX.h"
#include "TGClient.h"
#include "TKey.h"
#include "TFile.h"
#include "TGMenu.h"
#include "TGFrame.h"
#include "TCanvas.h"
#include "TH1.h"
#include "TTree.h"
#include "TFriendElement.h"
#include "TObjArray.h"
#include "TObjString.h"
#include "TGButton.h"
#include "TGButtonGroup.h"
#include "TGTextEntry.h"
#include "TGComboBox.h"
#include "TGLabel.h"
#include "TGListView.h"
#include "TGListTree.h"
#include "TGMimeTypes.h"
#include "TGSplitter.h"
#include "TGDoubleSlider.h"
#include "TGToolBar.h"
#include "TGStatusBar.h"
#include "Getline.h"
#include "TTimer.h"
#include "TG3DLine.h"
#include "TGFileDialog.h"
#include "TGProgressBar.h"
#include "TClonesArray.h"
#include "TSpider.h"

#ifdef WIN32
#include "TWin32SplashThread.h"
#endif

// drawing options
static const char* gOptgen[16] =
{
   "","AXIS","HIST","SAME","CYL","POL","SPH","PSR","LEGO","LEGO1","LEGO2",
   "SURF","SURF1","SURF2","SURF3","SURF4"
};
static const char* gOpt1D[12] =
{
   "","AH","B","C","E","E1","E2","E3","E4","L","P","*H"
};
static const char* gOpt2D[14] =
{
   "","ARR","BOX","COL","COL2","CONT","CONT0","CONT1","CONT2","CONT3",
   "FB","BB","SCAT","PROF"
};

static const char* gOpenTypes[] = {"Root files",   "*.root",
                                   0,              0       };

static const char* gMacroTypes[] = {"C++ macros",   "*.C",
                                   0,              0       };

// Menu command id's
enum ERootTreeViewerCommands {
   kFileCanvas,
   kFileBrowse,
   kFileLoadLibrary = 3,
   kFileOpenSession,
   kFileSaveMacro,
   kFilePrint,
   kFileClose,
   kFileQuit,

   kEditExpression,
   kEditCut,
   kEditMacro,
   kEditEvent,

   kRunCommand,
   kRunMacro,

   kOptionsReset,
   kOptionsGeneral = 20,
   kOptions1D = 50,
   kOptions2D = 70,

   kHelpAbout = 100,
   kHelpAboutTV,
   kHelpStart,
   kHelpLayout,
   kHelpOpenSave,
   kHelpDragging,
   kHelpEditing,
   kHelpSession,
   kHelpCommands,
   kHelpContext,
   kHelpDrawing,
   kHelpMacros,

   kBarCommand,
   kBarOption,
   kBarCut,
   kAxis
};

// button Id's
enum EButtonIdentifiers {
   kDRAW,
   kRESET,
   kSTOP,
   kCLOSE,
   kSLIDER,
   kBGFirst,
   kBGPrevious,
   kBGRecord,
   kBGNext,
   kBGLast
};

ClassImp(TTreeViewer)

//______________________________________________________________________________
TTreeViewer::TTreeViewer(const char* treeName) : 
   TGMainFrame(0,10,10,kVerticalFrame),
   fDimension(0), fVarDraw(0), fScanMode(0), 
   fTreeIndex(0), fDefaultCursor(0), fWatchCursor(0), 
   fCounting(0), fStopMapping(0), fEnableCut(0),fNexpressions(0)
{
   // TTreeViewer default constructor

   fTree = 0;
   if (!gClient) return;
   char command[128];
   snprintf(command,128, "TTreeViewer *gTV = (TTreeViewer*)0x%lx", (ULong_t)this);
   gROOT->ProcessLine(command);
   gROOT->ProcessLine("TTree *tv__tree = 0;");
   fTreeList = new TList;
   gROOT->ProcessLine("TList *tv__tree_list = new TList;");
   fFilename = "";
   gROOT->ProcessLine("TFile *tv__tree_file = 0;");
   gInterpreter->SaveContext();
   BuildInterface();
   SetTreeName(treeName);
}

//______________________________________________________________________________
TTreeViewer::TTreeViewer(const TTree *tree) : 
   TGMainFrame(0, 10, 10, kVerticalFrame),
   fDimension(0), fVarDraw(0), fScanMode(0), 
   fTreeIndex(0), fDefaultCursor(0), fWatchCursor(0), 
   fCounting(0), fStopMapping(0), fEnableCut(0),fNexpressions(0)

{
   // TTreeViewer constructor with a pointer to a Tree

   fTree = 0;
   char command[128];
   snprintf(command,128, "TTreeViewer *gTV = (TTreeViewer*)0x%lx", (ULong_t)this);
   gROOT->ProcessLine(command);
   if (!tree) return;
   gROOT->ProcessLine("TTree *tv__tree = 0;");
   fTreeList = new TList;
   gROOT->ProcessLine("TList *tv__tree_list = new TList;");
   fFilename = "";
   gROOT->ProcessLine("TFile *tv__tree_file = 0;");
   gInterpreter->SaveContext();
   BuildInterface();
   TDirectory *dirsav = gDirectory;
   TDirectory *cdir = tree->GetDirectory();
   if (cdir) cdir->cd();

   SetTree((TTree *)tree);
   // If the tree is a chain, the tree directory will be changed by SwitchTree
   // (called by SetTreeName)
   cdir = tree->GetDirectory();
   if (cdir) {
      if (cdir->GetFile()) fFilename = cdir->GetFile()->GetName();
   }
   if (dirsav) dirsav->cd();
}
//______________________________________________________________________________
void TTreeViewer::AppendTree(TTree *tree)
{
   // Allow geting the tree from the context menu.

   if (!tree) return;
   TTree *ftree;
   if (fTreeList) {
      if (fTreeList->FindObject(tree)) {
         printf("Tree found\n");
         TIter next(fTreeList);
         Int_t index = 0;
         while ((ftree = (TTree*)next())) {
            if (ftree==tree) {printf("found at index %i\n", index);break;}
            index++;
         }
         SwitchTree(index);
         if (fTree != fMappedTree) {
            // switch also the global "tree" variable
            fLVContainer->RemoveNonStatic();
            // map it on the right panel
            MapTree(fTree);
            fListView->Layout();
            TGListTreeItem *base = 0;
            TGListTreeItem *parent = fLt->FindChildByName(base, "TreeList");
            TGListTreeItem *item = fLt->FindChildByName(parent, fTree->GetName());
            fLt->ClearHighlighted();
            fLt->HighlightItem(item);
            fClient->NeedRedraw(fLt);
         }
         return;
      }
   }
   if (fTree != tree) {
      fTree = tree;
      // load the tree via the interpreter
      char command[100];
      command[0] = 0;
      // define a global "tree" variable for the same tree
      snprintf(command,100, "tv__tree = (TTree *)0x%lx;", (ULong_t)tree);
      ExecuteCommand(command);
   }
   //--- add the tree to the list if it is not already in
   if (fTreeList) fTreeList->Add(fTree);
   ExecuteCommand("tv__tree_list->Add(tv__tree);");
   //--- map this tree
   TGListTreeItem *base = 0;
   TGListTreeItem *parent = fLt->FindChildByName(base, "TreeList");
   if (!parent) parent = fLt->AddItem(base, "TreeList", new ULong_t(kLTNoType));
   ULong_t *itemType = new ULong_t((fTreeIndex << 8) | kLTTreeType);
   fTreeIndex++;
   TGListTreeItem *lTreeItem = fLt->AddItem(parent, tree->GetName(), itemType,
               gClient->GetPicture("tree_t.xpm"), gClient->GetPicture("tree_t.xpm"));
   MapTree(fTree, lTreeItem, kFALSE);
   fLt->OpenItem(parent);
   fLt->HighlightItem(lTreeItem);
   fClient->NeedRedraw(fLt);

   //--- map slider and list view
   SwitchTree(fTreeIndex-1);
   fLVContainer->RemoveNonStatic();
   MapTree(fTree);
   fListView->Layout();
   SetFile();
}
//______________________________________________________________________________
void TTreeViewer::SetNexpressions(Int_t expr)
{
   // Change the number of expression widgets.

   Int_t diff = expr - fNexpressions;
   if (diff <= 0) return;
   if (!fLVContainer) return;
   for (Int_t i=0; i<TMath::Abs(diff); i++) NewExpression();
}
//______________________________________________________________________________
void TTreeViewer::SetScanFileName(const char *name)
{
   // Set the name of the file where to redirect <Scan> output.

   if (fTree) ((TTreePlayer *)fTree->GetPlayer())->SetScanFileName(name);
}
//______________________________________________________________________________
void TTreeViewer::SetScanRedirect(Bool_t mode)
{
   // Set the state of Scan check button.

   if (mode)
      fBarScan->SetState(kButtonDown);
   else
      fBarScan->SetState(kButtonUp);
}
//______________________________________________________________________________
void TTreeViewer::SetTree(TTree *tree)
{
   // Assign the fTree member from existing tree, e.g. when calling
   // tree->StartViewer() from the browser, or even from the command line.

   if (!tree) return;
   if (fTree != tree) {
      fTree = tree;
      // load the tree via the interpreter
      // define a global "tree" variable for the same tree
      TString command = TString::Format("tv__tree = (TTree *)0x%lx;", (ULong_t)tree);
      ExecuteCommand(command.Data());
   }
   //--- add the tree to the list if it is not already in
   if (fTreeList) fTreeList->Add(fTree);
   ExecuteCommand("tv__tree_list->Add(tv__tree);");
   //--- map this tree
   TGListTreeItem *base = 0;
   TGListTreeItem *parent = fLt->FindChildByName(base, "TreeList");
   if (!parent) parent = fLt->AddItem(base, "TreeList", new ULong_t(kLTNoType));
   ULong_t *itemType = new ULong_t((fTreeIndex << 8) | kLTTreeType);
   fTreeIndex++;
   TGListTreeItem *lTreeItem = fLt->AddItem(parent, tree->GetName(), itemType,
               gClient->GetPicture("tree_t.xpm"), gClient->GetPicture("tree_t.xpm"));
   MapTree(fTree, lTreeItem, kFALSE);
   fLt->OpenItem(parent);
   fLt->HighlightItem(lTreeItem);
   fClient->NeedRedraw(fLt);

   //--- map slider and list view
   SwitchTree(fTreeIndex-1);
   fLVContainer->RemoveNonStatic();
   MapTree(fTree);
   fListView->Layout();
   SetFile();
}
//______________________________________________________________________________
void TTreeViewer::SetTreeName(const char* treeName)
{
   // Allow geting the tree from the context menu.

   if (!treeName) return;
   TTree *tree = (TTree *) gROOT->FindObject(treeName);
   if (fTreeList) {
      if (fTreeList->FindObject(treeName)) {
         printf("Tree found\n");
         TIter next(fTreeList);
         Int_t index = 0;
         while ((tree = (TTree*)next())) {
            if (!strcmp(treeName, tree->GetName())) {printf("found at index %i\n", index);break;}
            index++;
         }
         SwitchTree(index);
         if (fTree != fMappedTree) {
            // switch also the global "tree" variable
            fLVContainer->RemoveNonStatic();
            // map it on the right panel
            MapTree(fTree);
            fListView->Layout();
            TGListTreeItem *base = 0;
            TGListTreeItem *parent = fLt->FindChildByName(base, "TreeList");
            TGListTreeItem *item = fLt->FindChildByName(parent, fTree->GetName());
            fLt->ClearHighlighted();
            fLt->HighlightItem(item);
            fClient->NeedRedraw(fLt);
         }
         return;
      }
   }
   if (!tree) return;
//   ((TTreePlayer *)tree->GetPlayer())->SetViewer(this);
   if (fTree != tree) {
      fTree = tree;
      // load the tree via the interpreter
      // define a global "tree" variable for the same tree
      TString command = TString::Format("tv__tree = (TTree *) gROOT->FindObject(\"%s\");", treeName);
      ExecuteCommand(command.Data());
   }
   //--- add the tree to the list if it is not already in
   if (fTreeList) fTreeList->Add(fTree);
   ExecuteCommand("tv__tree_list->Add(tv__tree);");
   //--- map this tree
   TGListTreeItem *base = 0;
   TGListTreeItem *parent = fLt->FindChildByName(base, "TreeList");
   if (!parent) parent = fLt->AddItem(base, "TreeList", new ULong_t(kLTNoType));
   ULong_t *itemType = new ULong_t((fTreeIndex << 8) | kLTTreeType);
   fTreeIndex++;
   TGListTreeItem *lTreeItem = fLt->AddItem(parent, treeName, itemType,
               gClient->GetPicture("tree_t.xpm"), gClient->GetPicture("tree_t.xpm"));
   MapTree(fTree, lTreeItem, kFALSE);
   fLt->OpenItem(parent);
   fLt->HighlightItem(lTreeItem);
   fClient->NeedRedraw(fLt);

   //--- map slider and list view
   SwitchTree(fTreeIndex-1);
   fLVContainer->RemoveNonStatic();
   MapTree(fTree);
   fListView->Layout();
   SetFile();
}
//______________________________________________________________________________
void TTreeViewer::SetFile()
{
   // Set file name containing the tree.

   if (!fTree) return;
   TSeqCollection *list = gROOT->GetListOfFiles();
   TTree *tree;
   TIter next(list);
   TObject *obj;
   TFile   *file;
   while ((obj=next())) {
      file = (TFile*)obj;
      if (file) {
         tree = (TTree*)file->Get(fTree->GetName());
         if (tree) {
            fFilename = file->GetName();
            std::cout << "File name : "<< fFilename << std::endl;
            return;
         } else {
            fFilename = "";
         }
      }
   }
   fFilename = "";
}
//______________________________________________________________________________
void TTreeViewer::BuildInterface()
{
   // Create all viewer widgets.

   //--- timer & misc
   fCounting = kFALSE;
   fScanMode = kFALSE;
   fEnableCut = kTRUE;
   fTimer = new TTimer(this, 20, kTRUE);
   fLastOption = "";
   fSession = new TTVSession(this);
   //--- cursors
   fDefaultCursor = gVirtualX->CreateCursor(kPointer);
   fWatchCursor = gVirtualX->CreateCursor(kWatch);
   //--- colours
   ULong_t color;
   gClient->GetColorByName("blue",color);
   //--- pictures for X, Y and Z expression items
   fPicX = gClient->GetPicture("x_pic.xpm");
   fPicY = gClient->GetPicture("y_pic.xpm");
   fPicZ = gClient->GetPicture("z_pic.xpm");

   //--- general context menu
   fContextMenu = new TContextMenu("TreeViewer context menu","");
   fMappedTree = 0;
   fMappedBranch = 0;
   fDialogBox = 0;
   fDimension = 0;
   fVarDraw = kFALSE;
   fStopMapping = kFALSE;
//   fFilename = "";
   fSourceFile = "treeviewer.C";
   //--- lists : trees and widgets to be removed
//   fTreeList = 0;
   fTreeIndex = 0;
   fWidgets = new TList();
   //--- create menus --------------------------------------------------------
   //--- File menu
   fFileMenu = new TGPopupMenu(fClient->GetRoot());
   fFileMenu->AddEntry("&New canvas",      kFileCanvas);
   fFileMenu->AddEntry("Open &tree file...", kFileBrowse);
   fFileMenu->AddEntry("&Load Library...", kFileLoadLibrary);
   fFileMenu->AddEntry("&Open session",   kFileOpenSession);
   fFileMenu->AddEntry("&Save source",    kFileSaveMacro);
   fFileMenu->AddSeparator();
   fFileMenu->AddEntry("&Print",           kFilePrint);
   fFileMenu->AddEntry("&Close",           kFileClose);
   fFileMenu->AddSeparator();
   fFileMenu->AddEntry("&Quit ROOT",       kFileQuit);

   fFileMenu->DisableEntry(kFilePrint);

   //--- Edit menu
   fEditMenu = new TGPopupMenu(gClient->GetRoot());
   fEditMenu->AddEntry("&Expression...",   kEditExpression);
   fEditMenu->AddEntry("&Cut...",          kEditCut);
   fEditMenu->AddEntry("&Macro...",        kEditMacro);
   fEditMenu->AddEntry("E&Vent...",        kEditEvent);

   fEditMenu->DisableEntry(kEditMacro);
   fEditMenu->DisableEntry(kEditEvent);
   //---Run menu
   fRunMenu = new TGPopupMenu(gClient->GetRoot());
   fRunMenu->AddEntry("&Macro...",         kRunMacro);
   fRunMenu->DisableEntry(kRunMacro);
   //--- Options menu
   //--- General options
   fOptionsGen = new TGPopupMenu(gClient->GetRoot());
   fOptionsGen->AddEntry("Default",        kOptionsGeneral);
   fOptionsGen->AddSeparator();
   fOptionsGen->AddEntry("Axis only",      kOptionsGeneral+1);  // "AXIS"
   fOptionsGen->AddEntry("Contour only",   kOptionsGeneral+2);  // "HIST"
   fOptionsGen->AddEntry("Superimpose",    kOptionsGeneral+3);  //"SAME"
   fOptionsGen->AddEntry("Cylindrical",    kOptionsGeneral+4);  //"CYL"
   fOptionsGen->AddEntry("Polar",          kOptionsGeneral+5);  //"POL"
   fOptionsGen->AddEntry("Spherical",      kOptionsGeneral+6);  //"SPH"
   fOptionsGen->AddEntry("PsRap/Phi",      kOptionsGeneral+7);  //"PSR"
   fOptionsGen->AddEntry("Lego HLR",       kOptionsGeneral+8);  //"LEGO"
   fOptionsGen->AddEntry("Lego HSR",       kOptionsGeneral+9);  //"LEGO1"
   fOptionsGen->AddEntry("Lego Color",     kOptionsGeneral+10); //"LEGO2"
   fOptionsGen->AddEntry("Surface HLR",    kOptionsGeneral+11); //"SURF"
   fOptionsGen->AddEntry("Surface HSR",    kOptionsGeneral+12); //"SURF1"
   fOptionsGen->AddEntry("Surface Col",    kOptionsGeneral+13); //"SURF2"
   fOptionsGen->AddEntry("Surf+Cont",      kOptionsGeneral+14); //"SURF3"
   fOptionsGen->AddEntry("Gouraud",        kOptionsGeneral+15); //"SURF4"
   fOptionsGen->Associate(this);
   //--- 1D options
   fOptions1D = new TGPopupMenu(gClient->GetRoot());
   fOptions1D->AddEntry("Default",         kOptions1D);
   fOptions1D->AddSeparator();
   fOptions1D->AddEntry("No labels/ticks", kOptions1D+1);       // "AH"
   fOptions1D->AddEntry("Bar chart",       kOptions1D+2);       // "B"
   fOptions1D->AddEntry("Smooth curve",    kOptions1D+3);       // "C"
   fOptions1D->AddEntry("Errors",          kOptions1D+4);       // "E"
   fOptions1D->AddEntry("Errors 1",        kOptions1D+5);       // "E1"
   fOptions1D->AddEntry("Errors 2",        kOptions1D+6);       // "E2"
   fOptions1D->AddEntry("Errors 3",        kOptions1D+7);       // "E3"
   fOptions1D->AddEntry("Errors 4",        kOptions1D+8);       // "E4"
   fOptions1D->AddEntry("Line",            kOptions1D+9);       // "L"
   fOptions1D->AddEntry("Markers",         kOptions1D+10);      // "P"
   fOptions1D->AddEntry("Stars",           kOptions1D+11);      // "*H"
   fOptions1D->Associate(this);
   //--- 2D options
   fOptions2D = new TGPopupMenu(gClient->GetRoot());
   fOptions2D->AddEntry("Default",         kOptions2D);
   fOptions2D->AddSeparator();
   fOptions2D->AddEntry("Arrows",          kOptions2D+1);       // "ARR"
   fOptions2D->AddEntry("Box/Surf",        kOptions2D+2);       // "BOX"
   fOptions2D->AddEntry("Box/Color",       kOptions2D+3);       // "COL"
   fOptions2D->AddEntry("Box/ColMap",      kOptions2D+4);       // "COLZ"
   fOptions2D->AddEntry("Contour",         kOptions2D+5);       // "CONT"
   fOptions2D->AddEntry("Contour 0",       kOptions2D+6);       // "CONT0"
   fOptions2D->AddEntry("Contour 1",       kOptions2D+7);       // "CONT1"
   fOptions2D->AddEntry("Contour 2",       kOptions2D+8);       // "CONT2"
   fOptions2D->AddEntry("Contour 3",       kOptions2D+9);       // "CONT3"
   fOptions2D->AddEntry("No front-box",    kOptions2D+10);      // "FB"
   fOptions2D->AddEntry("No back-box",     kOptions2D+11);      // "BB"
   fOptions2D->AddEntry("Scatter",         kOptions2D+12);      // "SCAT"
   fOptions2D->AddEntry("Profile",         kOptions2D+13);      // "SCAT"
   fOptions2D->Associate(this);

   fOptionsMenu = new TGPopupMenu(gClient->GetRoot());
   fOptionsMenu->AddPopup("&General Options...", fOptionsGen);
   fOptionsMenu->AddPopup("&1D Options",         fOptions1D);
   fOptionsMenu->AddPopup("&2D Options",         fOptions2D);
   fOptionsMenu->AddSeparator();
   fOptionsMenu->AddEntry("&Reset options",      kOptionsReset);
   //--- Help menu
   fHelpMenu = new TGPopupMenu(gClient->GetRoot());
   fHelpMenu->AddEntry("&About ROOT...",         kHelpAbout);
   fHelpMenu->AddEntry("&About TreeViewer...",   kHelpAboutTV);
   fHelpMenu->AddSeparator();
   fHelpMenu->AddEntry("&Starting...",           kHelpStart);
   fHelpMenu->AddEntry("&Layout...",             kHelpLayout);
   fHelpMenu->AddEntry("&Open/Save",             kHelpOpenSave);
   fHelpMenu->AddEntry("&Dragging...",           kHelpDragging);
   fHelpMenu->AddEntry("&Editing expressions...",kHelpEditing);
   fHelpMenu->AddEntry("&Session...",            kHelpSession);
   fHelpMenu->AddEntry("&User commands...",      kHelpCommands);
   fHelpMenu->AddEntry("&Context menus...",      kHelpContext);
   fHelpMenu->AddEntry("D&rawing...",            kHelpDrawing);
   fHelpMenu->AddEntry("&Macros...",             kHelpMacros);

   fFileMenu->Associate(this);
   fEditMenu->Associate(this);
   fRunMenu->Associate(this);
   fOptionsMenu->Associate(this);
   fHelpMenu->Associate(this);

   //--- menubar layout hints
   fMenuBarLayout = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0,0,1,1);
   fMenuBarItemLayout = new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0);
   fMenuBarHelpLayout = new TGLayoutHints(kLHintsTop | kLHintsRight);
   //--- create menubar and add popup menus
   fMenuBar = new TGMenuBar(this, 1, 1, kHorizontalFrame);

   fMenuBar->AddPopup("&File", fFileMenu, fMenuBarItemLayout);
   fMenuBar->AddPopup("&Edit", fEditMenu, fMenuBarItemLayout);
   fMenuBar->AddPopup("&Run",  fRunMenu,  fMenuBarItemLayout);
   fMenuBar->AddPopup("&Options", fOptionsMenu, fMenuBarItemLayout);
   fMenuBar->AddPopup("&Help", fHelpMenu, fMenuBarHelpLayout);

   AddFrame(fMenuBar, fMenuBarLayout);
   //--- toolbar ----------------------------------------------------------------
   fToolBar = new TGToolBar(this, 10, 10, kHorizontalFrame);
   fBarLayout = new TGLayoutHints(kLHintsTop | kLHintsExpandX);

   TGLayoutHints *lo;
   lo = new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 4,4,0,0);
   fWidgets->Add(lo);
   //--- label for Command text entry
   fBarLbl1 = new TGLabel(fToolBar,"Command");
   fToolBar->AddFrame(fBarLbl1,lo);
   //--- command text entry
   fBarCommand = new TGTextEntry(fToolBar, new TGTextBuffer(250),kBarCommand);
   fBarCommand->SetWidth(120);
   fBarCommand->Associate(this);
   fBarCommand->SetToolTipText("User commands executed via interpreter. Type <ENTER> to execute");
   fToolBar->AddFrame(fBarCommand, lo);
   //--- first vertical separator
   TGVertical3DLine *vSeparator = new TGVertical3DLine(fToolBar);
   lo = new TGLayoutHints(kLHintsLeft | kLHintsExpandY, 4,4,0,0);
   fWidgets->Add(lo);
   fWidgets->Add(vSeparator);
   fToolBar->AddFrame(vSeparator, lo);

   lo = new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 4,4,0,0);
   fWidgets->Add(lo);
   //--- label for Option text entry
   fBarLbl2 = new TGLabel(fToolBar,"Option");
   fToolBar->AddFrame(fBarLbl2, lo);
   //--- drawing option text entry
   fBarOption = new TGTextEntry(fToolBar, new TGTextBuffer(200),kBarOption);
   fBarOption->SetWidth(100);
   fBarOption->Associate(this);
   fBarOption->SetToolTipText("Histogram graphics option. Type option here and click <Draw> (or  <ENTER> to update current histogram).");
   fToolBar->AddFrame(fBarOption, lo);
   //--- second vertical separator
   vSeparator = new TGVertical3DLine(fToolBar);
   lo = new TGLayoutHints(kLHintsLeft | kLHintsExpandY, 4,4,0,0);
   fWidgets->Add(lo);
   fWidgets->Add(vSeparator);
   fToolBar->AddFrame(vSeparator, lo);

   lo = new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 4,4,0,0);
   fWidgets->Add(lo);
   //--- label for Histogram text entry
   fBarLbl3 = new TGLabel(fToolBar,"Histogram");
   fToolBar->AddFrame(fBarLbl3, lo);

   //--- histogram name text entry
   lo = new TGLayoutHints(kLHintsCenterY | kLHintsExpandX, 4,4,0,0);
   fWidgets->Add(lo);
   fBarHist = new TGTextEntry(fToolBar, new TGTextBuffer(100));
   fBarHist->Resize(50, fBarHist->GetDefaultHeight());
   fBarHist->SetDefaultSize(50, fBarHist->GetDefaultHeight());
   fBarHist->SetText("htemp");
   fToolBar->AddFrame(fBarHist, lo);

   //--- Hist check button
   lo = new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 4,4,0,0);
   fWidgets->Add(lo);
   fBarH = new TGCheckButton(fToolBar, "Hist");
   fBarH->SetToolTipText("Checked : redraw only current histogram");
   fBarH->SetState(kButtonUp);
   fToolBar->AddFrame(fBarH, lo);
   //--- Scan check button
   fBarScan = new TGCheckButton(fToolBar, "Scan");
   fBarScan->SetState(kButtonUp);
   fBarScan->SetToolTipText("Check to redirect TTree::Scan command in a file");
   fToolBar->AddFrame(fBarScan, lo);
   //--- Rec check button
   fBarRec = new TGCheckButton(fToolBar, "Rec");
   fBarRec->SetState(kButtonDown);
   fBarRec->SetToolTipText("Check to record commands in history file and be verbose");
   fToolBar->AddFrame(fBarRec, lo);
   //--- 1'st horizontal tool bar separator ----------------------------------------
   TGHorizontal3DLine *toolBarSep = new TGHorizontal3DLine(this);
   fWidgets->Add(toolBarSep);
   AddFrame(toolBarSep, fBarLayout);
   AddFrame(fToolBar, fBarLayout);
   //--- 2'nd horizontal tool bar separator ----------------------------------------
   toolBarSep = new TGHorizontal3DLine(this);
   fWidgets->Add(toolBarSep);
   AddFrame(toolBarSep, fBarLayout);

   //--- Horizontal mother frame ---------------------------------------------------
   fHf = new TGHorizontalFrame(this, 10, 10);
   //--- Vertical frames
   fSlider = new TGDoubleVSlider(fHf, 10, kDoubleScaleBoth, kSLIDER);
//   fSlider->SetBackgroundColor(color);
   fSlider->Associate(this);

   //--- fV1 -----------------------------------------------------------------------
   fV1 = new TGVerticalFrame(fHf, 10, 10, kFixedWidth);
   fTreeHdr = new TGCompositeFrame(fV1, 10, 10, kSunkenFrame | kVerticalFrame);

   fLbl1 = new TGLabel(fTreeHdr, "Current Folder");
   lo = new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY, 3, 0, 0, 0);
   fWidgets->Add(lo);
   fTreeHdr->AddFrame(fLbl1, lo);

   lo = new TGLayoutHints(kLHintsTop | kLHintsExpandX, 2, 0, 1, 0);
   fWidgets->Add(lo);
   fV1->AddFrame(fTreeHdr, lo);

   //--- tree view canvas on the left
   fTreeView = new TGCanvas(fV1, fV1->GetWidth(), 10, kSunkenFrame | kDoubleBorder);
   //--- container frame
   fLt = new TGListTree(fTreeView->GetViewPort(), 10, 10, kHorizontalFrame,
                        GetWhitePixel());
   fLt->Associate(this);
   fTreeView->SetContainer(fLt);

   lo = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, 2,0,0,0);
   fWidgets->Add(lo);
   fV1->AddFrame(fTreeView, lo);

   //--- button horizontal frame
   fHpb = new TGHorizontalFrame(fV1, fTreeHdr->GetWidth(), 10, kSunkenFrame);

   //--- DRAW button
   fPicDraw = gClient->GetPicture("draw_t.xpm");
   fDRAW  = new TGPictureButton(fHpb,fPicDraw,kDRAW);
   fDRAW->SetToolTipText("Draw current selection");
   fDRAW->Associate(this);

   lo = new TGLayoutHints(kLHintsTop | kLHintsLeft, 2,2,4,2);
   fWidgets->Add(lo);
   fHpb->AddFrame(fDRAW, lo);

   //--- SPIDER button
   fSPIDER = new TGTextButton(fHpb,"SPIDER");
   fSPIDER->SetToolTipText("Scan current selection using a spider plot");
   fSPIDER->Associate(this);

   lo = new TGLayoutHints(kLHintsTop | kLHintsLeft, 2,2,4,2);
   fWidgets->Add(lo);
   fHpb->AddFrame(fSPIDER,lo);
   //---connect SPIDER button to ExecuteScan() method
   fSPIDER->Connect("Clicked()","TTreeViewer",this,"ExecuteSpider()");

   //--- STOP button (breaks current operation)
//   fPicStop = gClient->GetPicture("mb_stop_s.xpm");
   fPicStop = gClient->GetPicture("stop_t.xpm");
   fSTOP  = new TGPictureButton(fHpb,fPicStop,kSTOP);
   fSTOP->SetToolTipText("Abort current operation");
   fSTOP->Associate(this);

   lo = new TGLayoutHints(kLHintsTop | kLHintsLeft, 2,2,4,2);
   fWidgets->Add(lo);
   fHpb->AddFrame(fSTOP, lo);

   //--- REFR button (breaks current operation)
   fPicRefr = gClient->GetPicture("refresh2.xpm");
   fREFR  = new TGPictureButton(fHpb,fPicRefr,kDRAW);
   fREFR->SetToolTipText("Update the tree viewer");
   lo = new TGLayoutHints(kLHintsTop | kLHintsLeft, 2,2,4,2);
   fWidgets->Add(lo);
   fHpb->AddFrame(fREFR, lo);
   //---connect REFR button to DoRefresh() method
   fREFR->Connect("Clicked()", "TTreeViewer", this, "DoRefresh()");

   lo = new TGLayoutHints(kLHintsTop | kLHintsLeft, 2,2,2,2);
   fWidgets->Add(lo);
   fV1->AddFrame(fHpb, lo);

   //--- fV2
   fV2 = new TGVerticalFrame(fHf, 10, 10);
   fListHdr = new TGCompositeFrame(fV2, 10, 10, kSunkenFrame | kFitHeight);
   fLbl2 = new TGLabel(fListHdr, "Current Tree:                 ");
   lo = new TGLayoutHints(kLHintsTop | kLHintsLeft, 3, 0, 0, 0);
   fWidgets->Add(lo);
   fListHdr->AddFrame(fLbl2, lo);

   //--- progress bar
   fProgressBar = new TGHProgressBar(fListHdr);
   fProgressBar->SetBarColor("red");
   fProgressBar->SetFillType(TGProgressBar::kBlockFill);
   lo = new TGLayoutHints(kLHintsBottom | kLHintsExpandX, 2,2,4,2);
   fWidgets->Add(lo);
   fListHdr->AddFrame(fProgressBar, lo);
   lo = new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY, 2,0,1,2);
   fWidgets->Add(lo);
   fV2->AddFrame(fListHdr, lo);

   fV1->Resize(fTreeHdr->GetDefaultWidth()+100, fV1->GetDefaultHeight());
   lo = new TGLayoutHints(kLHintsLeft | kLHintsExpandY);
   fWidgets->Add(lo);
   fHf->AddFrame(fSlider, lo);
   lo = new TGLayoutHints(kLHintsLeft | kLHintsExpandY);
   fWidgets->Add(lo);
   fHf->AddFrame(fV1, lo);

   //--- vertical splitter
   TGVSplitter *splitter = new TGVSplitter(fHf);
   splitter->SetFrame(fV1,kTRUE);
   lo = new TGLayoutHints(kLHintsLeft | kLHintsExpandY);
   fWidgets->Add(splitter);
   fWidgets->Add(lo);
   fHf->AddFrame(splitter,lo);



   //-- listview for the content of the tree/branch -----------------------------
   fListView = new TGListView(fListHdr,400,300);
   //--- container frame
   fLVContainer = new TTVLVContainer(fListView->GetViewPort(),400,300);
   fLVContainer->Associate(this);
   fLVContainer->SetListView(fListView);
   fLVContainer->SetViewer(this);
   fLVContainer->SetBackgroundColor(GetWhitePixel());
   fListView->GetViewPort()->SetBackgroundColor(GetWhitePixel());
   fListView->SetContainer(fLVContainer);
   fListView->SetViewMode(kLVList);
   lo = new TGLayoutHints(kLHintsRight | kLHintsTop | kLHintsExpandX | kLHintsExpandY);
   fWidgets->Add(lo);

   fListHdr->AddFrame(fListView,lo);

   lo = new TGLayoutHints(kLHintsRight | kLHintsExpandX | kLHintsExpandY);
   fWidgets->Add(lo);
   fHf->AddFrame(fV2,lo);

   AddFrame(fHf, lo);
   //--- 3rd horizontal tool bar separator ----------------------------------------
   toolBarSep = new TGHorizontal3DLine(this);
   fWidgets->Add(toolBarSep);
   AddFrame(toolBarSep, fBarLayout);

   //--- label for IList text entry
   fBFrame = new TGHorizontalFrame(this,10,10);
   fBLbl4 = new TGLabel(fBFrame,"IList");
   lo = new TGLayoutHints(kLHintsLeft | kLHintsBottom, 2,2,2,2);
   fWidgets->Add(lo);
   fBFrame->AddFrame(fBLbl4, lo);
   //--- IList text entry
   fBarListIn =  new TGTextEntry(fBFrame, new TGTextBuffer(100));
   fBarListIn->SetWidth(60);
   fBarListIn->SetToolTipText("Name of a previously created event list");
   fBFrame->AddFrame(fBarListIn, lo);
   //--- label for OList text entry
   fBLbl5 = new TGLabel(fBFrame,"OList");
   fBFrame->AddFrame(fBLbl5, lo);
   //--- OList text entry
   fBarListOut =  new TGTextEntry(fBFrame, new TGTextBuffer(100));
   fBarListOut->SetWidth(60);
   fBarListOut->SetToolTipText("Output event list. Use <Draw> to generate it.");
   fBFrame->AddFrame(fBarListOut, lo);
   //--- Status bar
   fStatusBar = new TGStatusBar(fBFrame, 10, 10);
   fStatusBar->SetWidth(200);
   fStatusBar->Draw3DCorner(kFALSE);
   lo = new TGLayoutHints(kLHintsCenterX | kLHintsCenterY | kLHintsLeft | kLHintsExpandX, 2,2,2,2);
   fWidgets->Add(lo);
   fBFrame->AddFrame(fStatusBar, lo);
   //--- RESET button
   fReset = new TGTextButton(fBFrame,"RESET",kRESET);
   fReset->SetToolTipText("Reset variable's fields and drawing options");
   fReset->Associate(this);
   lo = new TGLayoutHints(kLHintsTop | kLHintsRight, 2,2,2,2);
   fWidgets->Add(lo);
   fBFrame->AddFrame(fReset,lo);
   //---  group of buttons for session handling
   fBGFirst = new TGPictureButton(fBFrame,
                                  gClient->GetPicture("first_t.xpm"), kBGFirst);
   fBGFirst->SetToolTipText("First record");
   fBGFirst->Associate(this);
   fBGPrevious = new TGPictureButton(fBFrame,
                                  gClient->GetPicture("previous_t.xpm"), kBGPrevious);
   fBGPrevious->SetToolTipText("Previous record");
   fBGPrevious->Associate(this);
   fBGRecord = new TGPictureButton(fBFrame,
                                  gClient->GetPicture("record_t.xpm"), kBGRecord);
   fBGRecord->SetToolTipText("Record");
   fBGRecord->Associate(this);
   fBGNext = new TGPictureButton(fBFrame,
                                 gClient->GetPicture("next_t.xpm"), kBGNext);
   fBGNext->SetToolTipText("Next record");
   fBGNext->Associate(this);
   fBGLast = new TGPictureButton(fBFrame,
                                 gClient->GetPicture("last_t.xpm"), kBGLast);
   fBGLast->SetToolTipText("Last record");
   fBGLast->Associate(this);

   fCombo = new TGComboBox(fBFrame, 0);
   fCombo->SetHeight(fReset->GetDefaultHeight());
   fCombo->SetWidth(100);
   fCombo->Associate(this);

   lo = new TGLayoutHints(kLHintsCenterY | kLHintsRight, 0,0,2,0);
   fWidgets->Add(lo);
   fBFrame->AddFrame(fCombo,      lo);
   fBFrame->AddFrame(fBGLast,     lo);
   fBFrame->AddFrame(fBGNext,     lo);
   fBFrame->AddFrame(fBGRecord,   lo);
   fBFrame->AddFrame(fBGPrevious, lo);
   fBFrame->AddFrame(fBGFirst,    lo);
   lo = new TGLayoutHints(kLHintsExpandX,2,2,2,0);
   fWidgets->Add(lo);
   AddFrame(fBFrame,lo);

   // map the window
   SetWindowName("TreeViewer");
   MapSubwindows();
   Resize(GetDefaultSize());
   MapWindow();

   // put default items in the listview on the right
   const TGPicture *pic, *spic;

   fLVContainer->RemoveAll();
   TTVLVEntry* entry;
   Char_t symbol;
   entry = new TTVLVEntry(fLVContainer,fPicX,fPicX,new TGString(),0,kLVSmallIcons);
   symbol = 'X';
   entry->SetUserData(new ULong_t((symbol << 8) | kLTExpressionType | kLTTreeType));
   entry->SetToolTipText("X expression. Drag and drop expressions here");
   //--- X item
   fLVContainer->AddThisItem(entry);
   entry->Empty();
   entry->MapWindow();

   entry = new TTVLVEntry(fLVContainer,fPicY,fPicY,new TGString(),0,kLVSmallIcons);
   symbol = 'Y';
   entry->SetUserData(new ULong_t((symbol << 8) | kLTExpressionType | kLTTreeType));
   entry->SetToolTipText("Y expression. Drag and drop expressions here");
   //--- Y item
   fLVContainer->AddThisItem(entry);
   entry->Empty();
   entry->MapWindow();

   entry = new TTVLVEntry(fLVContainer,fPicZ,fPicZ,new TGString(),0,kLVSmallIcons);
   symbol = 'Z';
   entry->SetUserData(new ULong_t((symbol << 8) | kLTExpressionType | kLTTreeType));
   entry->SetToolTipText("Z expression. Drag and drop expressions here");
   //--- Z item
   fLVContainer->AddThisItem(entry);
   entry->Empty();
   entry->MapWindow();

   pic = gClient->GetPicture("cut_t.xpm");
   spic = gClient->GetPicture("cut_t.xpm");
   entry = new TTVLVEntry(fLVContainer,pic,spic,new TGString(),0,kLVSmallIcons);
   entry->SetUserData(new ULong_t(kLTExpressionType | kLTCutType));
   entry->SetToolTipText("Active cut. Double-click to enable/disable");
   //--- Cut item (scissors icon)
   fLVContainer->AddThisItem(entry);
   entry->Empty();
   entry->MapWindow();

   pic = gClient->GetPicture("pack_t.xpm");
   spic = gClient->GetPicture("pack-empty_t.xpm");
   entry = new TTVLVEntry(fLVContainer,pic,spic,new TGString("Scan box"),0,kLVSmallIcons);
   entry->SetUserData(new ULong_t(kLTExpressionType | kLTPackType));
   entry->SetToolTipText("Drag and drop expressions/leaves here. Double-click to scan. Check <Scan> to redirect on file.");
   //--- Scan Box
   fLVContainer->AddThisItem(entry);
   entry->MapWindow();
   entry->SetTrueName("");

   //--- 10 expression items
   fNexpressions = 10;
   for (Int_t i=0; i<fNexpressions; i++) {
      pic = gClient->GetPicture("expression_t.xpm");
      spic = gClient->GetPicture("expression_t.xpm");
      entry = new TTVLVEntry(fLVContainer,pic,spic,new TGString(),0,kLVSmallIcons);
      entry->SetUserData(new ULong_t(kLTExpressionType | kLTDragType));
      entry->SetToolTipText("User defined expression/cut. Double-click to edit");
      fLVContainer->AddThisItem(entry);
      entry->Empty();
      entry->MapWindow();
   }

   fListView->Layout();
   fListView->Resize();
//   EmptyAll();
   // map the tree if it was supplied in the constructor

   if (!fTree) {
      fSlider->SetRange(0,1000000);
      fSlider->SetPosition(0,1000000);
   } else {
      fSlider->SetRange(0,fTree->GetEntries()-1);
      fSlider->SetPosition(0,fTree->GetEntries()-1);
   }
   PrintEntries();
   fProgressBar->SetPosition(0);
   fProgressBar->ShowPosition();
   ActivateButtons(kFALSE, kFALSE, kFALSE, kFALSE);

   // map the window
   ///SetWindowName("TreeViewer");
   MapSubwindows();
   Resize(GetDefaultSize());
   MapWindow();
}

//______________________________________________________________________________
TTreeViewer::~TTreeViewer()
{
   // TTreeViewer destructor.

   if (!gClient) return;
   gClient->FreePicture(fPicX);
   gClient->FreePicture(fPicY);
   gClient->FreePicture(fPicZ);
   gClient->FreePicture(fPicDraw);
   gClient->FreePicture(fPicStop);
   gClient->FreePicture(fPicRefr);

   fDialogBox = TGSelectBox::GetInstance();
   if (fDialogBox) delete fDialogBox;

   delete fContextMenu;

   delete fBarLbl1;
   delete fBarLbl2;
   delete fBarLbl3;
   delete fBLbl4;
   delete fBLbl5;
   delete fBarCommand;
   delete fBarOption;
   delete fBarHist;
   delete fBarListIn;
   delete fBarListOut;

   delete fBarH;
   delete fBarScan;
   delete fBarRec;

   delete fToolBar;

   delete fSlider;
   delete fV1;
   delete fV2;
   delete fLbl1;
   delete fLbl2;
   delete fHf;
   delete fTreeHdr;
   delete fListHdr;
   delete fLt;
   delete fTreeView;
   delete fLVContainer;
   delete fListView;

   delete fProgressBar;
   delete fHpb;

   delete fDRAW;
   delete fSPIDER;
   delete fSTOP;
   delete fReset;
   delete fBGFirst;
   delete fBGPrevious;
   delete fBGRecord;
   delete fBGNext;
   delete fBGLast;
   delete fCombo;
   delete fBFrame;

   delete fMenuBar;
   delete fFileMenu;
   delete fEditMenu;

   delete fOptionsGen;
   delete fOptions1D;
   delete fOptions2D;
   delete fOptionsMenu;
   delete fHelpMenu;
   delete fMenuBarLayout;
   delete fMenuBarItemLayout;
   delete fMenuBarHelpLayout;
   delete fBarLayout;

   fWidgets->Delete();
   delete fWidgets;
   if (fTreeList) {
      delete fTreeList;
   }
   delete fTimer;
   delete fSession;
}
//______________________________________________________________________________
void TTreeViewer::ActivateButtons(Bool_t first, Bool_t previous,
                                  Bool_t next, Bool_t last)
{
   // Enable/disable session buttons.

   if (first)    fBGFirst->SetState(kButtonUp);
   else          fBGFirst->SetState(kButtonDisabled);
   if (previous) fBGPrevious->SetState(kButtonUp);
   else          fBGPrevious->SetState(kButtonDisabled);
   if (next)     fBGNext->SetState(kButtonUp);
   else          fBGNext->SetState(kButtonDisabled);
   if (last)     fBGLast->SetState(kButtonUp);
   else          fBGLast->SetState(kButtonDisabled);
}

//______________________________________________________________________________
const char* TTreeViewer::Cut()
{
   // Apply Cut

   return fLVContainer->Cut();
}

//______________________________________________________________________________
const char* TTreeViewer::ScanList()
{
   // returns scanlist

   return fLVContainer->ScanList();
}

//______________________________________________________________________________
void TTreeViewer::SetSession(TTVSession *session)
{
   // Set current session

   if (session) {
      delete fSession;
      fSession = session;
   }
}

//______________________________________________________________________________
const char* TTreeViewer::EmptyBrackets(const char* name)
{
   // Empty the bracket content of a string.

   TString stripped(name);
   if (!stripped.Contains("[")) return name;
   TString retstr(name);
   TObjString *objstr;
   Int_t index = 0;
   while (stripped.Index("[", index) != kNPOS) {
      Int_t start = stripped.Index("[", index);
      Int_t end   = stripped.Index("]", index);
      if (end == kNPOS) {
         objstr = new TObjString(retstr.Data());
         fWidgets->Add(objstr);
         return (objstr->String()).Data();
      }
      index = start+2;
      retstr = stripped.Remove(start+1, end-start-1);
      stripped = retstr;
   }
   objstr = new TObjString(retstr.Data());
   fWidgets->Add(objstr);
   return (objstr->String()).Data();
}

//______________________________________________________________________________
void TTreeViewer::EmptyAll()
{
   // Clear the content of all items in the list view.

   fLVContainer->EmptyAll();
}

//______________________________________________________________________________
void TTreeViewer::Empty()
{
   // Empty the content of the selected expression.

   void *p = 0;
   TTVLVEntry *item = 0;
   if ((item = (TTVLVEntry *) fLVContainer->GetNextSelected(&p)) == 0) {
      Warning("Empty", "No item selected.");
      return;
   }
   ULong_t *itemType = (ULong_t *) item->GetUserData();
   if (!(*itemType & kLTExpressionType)) {
      Warning("Empty", "Not expression type.");
      return;
   }
   if (*itemType & kLTPackType) {
      item->SetSmallPic(fClient->GetPicture("pack-empty_t.xpm"));
      item->SetTrueName("");
      return;
   }
   item->Empty();
}

//______________________________________________________________________________
TTVLVEntry * TTreeViewer::ExpressionItem(Int_t index)
{
   // Get the item from a specific position.

   return fLVContainer->ExpressionItem(index);
}

//______________________________________________________________________________
TList* TTreeViewer::ExpressionList()
{
   // Get the list of expression items.

   return fLVContainer->ExpressionList();
}

//______________________________________________________________________________
Int_t TTreeViewer::Dimension()
{
   // Compute dimension of the histogram.

   fDimension = 0;
   if (Ex() && strlen(Ex())) fDimension++;
   if (Ey() && strlen(Ey())) fDimension++;
   if (Ez() && strlen(Ez())) fDimension++;
   return fDimension;
}

//______________________________________________________________________________
void TTreeViewer::ExecuteDraw()
{
   // Called when the DRAW button is executed.

   TString varexp;
   TString command;
   Int_t dimension = 0;
   TString alias[3];
   TTVLVEntry *item;
   Int_t i;
   // fill in expressions
   if (fVarDraw) {
      void *p = 0;
      dimension = 1;
      if (!(item = (TTVLVEntry *) fLVContainer->GetNextSelected(&p))) return;
      alias[0] = item->GetAlias();
      if (alias[0].BeginsWith("~")) alias[0].Remove(0, 1);
      varexp = item->ConvertAliases();
   } else {
      if (Ez() && strlen(Ez())) {
         dimension++;
         varexp = Ez();
         item = ExpressionItem(2);
         alias[2] = item->GetAlias();
         if (alias[2].BeginsWith("~")) alias[2].Remove(0, 1);
      }
      if ((Ez() && strlen(Ez())) && ((Ex() &&strlen(Ex())) || (Ey() && strlen(Ey())))) varexp += ":";
      if (Ey() && strlen(Ey())) {
         dimension++;
         varexp += Ey();
         item = ExpressionItem(1);
         alias[1] = item->GetAlias();
         if (alias[1].BeginsWith("~")) alias[1].Remove(0, 1);
      }
      if (Ey() && strlen(Ey()) && Ex() && strlen(Ex())) varexp += ":";
      if (Ex () && strlen(Ex())) {
         dimension++;
         varexp += Ex();
         item = ExpressionItem(0);
         alias[0] = item->GetAlias();
         if (alias[0].BeginsWith("~")) alias[0].Remove(0, 1);
      }
   }
   if (!dimension && !fScanMode) {
      Warning("ExecuteDraw", "Nothing to draw on X,Y,Z.");
      return;
   }
   // find ListIn
   fTree->SetEventList(0);
   TEventList *elist = 0;
   if (strlen(fBarListIn->GetText())) {
      elist = (TEventList *) gROOT->FindObject(fBarListIn->GetText());
      if (elist) fTree->SetEventList(elist);
   }
   // find ListOut
   if (strlen(fBarListOut->GetText())) varexp = TString::Format(">>%s", fBarListOut->GetText());
   // find histogram name
   if (strcmp("htemp", fBarHist->GetText())) {
      varexp += ">>";
      varexp += fBarHist->GetText();
   }
   // find canvas/pad where to draw
   TPad *pad = (TPad*)gROOT->GetSelectedPad();
   if (pad) pad->cd();
   // find graphics option
   const char* gopt = fBarOption->GetText();
   // just in case a previous interrupt was posted
   gROOT->SetInterrupt(kFALSE);
   // check if cut is enabled
   const char *cut = "";
   if (fEnableCut) cut = Cut();

   // get entries to be processed
   Long64_t nentries = (Long64_t)(fSlider->GetMaxPosition() -
                            fSlider->GetMinPosition() + 1);
   Long64_t firstentry =(Long64_t) fSlider->GetMinPosition();
//printf("firstentry=%lld, nentries=%lld\n",firstentry,nentries);
   // check if Scan is checked and if there is something in the box
   if (fScanMode) {
//      fBarScan->SetState(kButtonUp);
      fScanMode = kFALSE;
      if (ScanList() && strlen(ScanList())) varexp = ScanList();
      command = TString::Format("tv__tree->Scan(\"%s\",\"%s\",\"%s\", %lld, %lld);",
              varexp.Data(), cut, gopt, nentries, firstentry);
      if (fBarScan->GetState() == kButtonDown) {
         ((TTreePlayer *)fTree->GetPlayer())->SetScanRedirect(kTRUE);
      } else {
         ((TTreePlayer *)fTree->GetPlayer())->SetScanRedirect(kFALSE);
      }
      ExecuteCommand(command.Data(), kTRUE);
      return;
   }
   // check if only histogram has to be updated
   if (fBarH->GetState() == kButtonDown) {
      // reset 'Hist' mode
      fBarH->SetState(kButtonUp);
      TH1 *hist = fTree->GetHistogram();
      if (hist && gPad) {
         //hist = (TH1*)gPad->GetListOfPrimitives()->FindObject(fBarHist->GetText());
         if (hist) {
            // check if graphic option was modified
            TString last(fLastOption);
            TString current(gopt);
            current.ToUpper();
            last.ToUpper();
            if (current == last) {
               gPad->Update();
               return;
            }
            if (dimension == 3 && strlen(gopt)) {
               std::cout << "Graphics option " << gopt << " not valid for 3D histograms" << std::endl;
               return;
            }
            std::cout << " Graphics option for current histogram changed to " << gopt << std::endl;
            hist->Draw(gopt);
            fLastOption = fBarOption->GetText();
            gPad->Update();
            return;
         }
      }
   }
   // send draw command
   fLastOption = fBarOption->GetText();
   if (!gopt[0] && dimension!=3)
   //{
   //   gopt = "hist";
   //   fLastOption = "hist";
   //}
   if (dimension == 3 && strlen(gopt)) {
      std::cout << "Graphics option " << gopt << " not valid for 3D histograms" << std::endl;
      gopt = "";
      fLastOption = "";
   }
   command = TString::Format("tv__tree->Draw(\"%s\",\"%s\",\"%s\", %lld, %lld);",
           varexp.Data(), cut, gopt, nentries, firstentry);
   if (fCounting) return;
   fCounting = kTRUE;
   fTree->SetTimerInterval(200);
   fTimer->TurnOn();
   ExecuteCommand(command.Data());
   HandleTimer(fTimer);
   fTimer->TurnOff();
   fTree->SetTimerInterval(0);
   fCounting = kFALSE;
   fProgressBar->SetPosition(0);
   fProgressBar->ShowPosition();
   TH1 *hist = fTree->GetHistogram();
   if (hist) {
   // put expressions aliases on axes
      Int_t current = 0;
      for (i=0; i<3; i++) {
         if (alias[i].Length()) {
            if (i != current) {
               alias[current] = alias[i];
               alias[i] = "";
            }
            current++;
         }
      }
      //hist = (TH1*)gPad->GetListOfPrimitives()->FindObject(fBarHist->GetText());
      TAxis *axis[3];
      axis[0] = hist->GetXaxis();
      axis[1] = hist->GetYaxis();
      axis[2] = hist->GetZaxis();
      for (Int_t ind=0; ind<3; ind++) axis[ind]->SetTitle(alias[ind].Data());
   }
   if (gPad) gPad->Update();
}


//______________________________________________________________________________
void TTreeViewer::ExecuteSpider()
{
   // Draw a spider plot for the selected entries.

   TString varexp;
   Int_t dimension = 0;
   TString alias[3];
   TTVLVEntry *item;
   Bool_t previousexp = kFALSE;
   // fill in expressions
   if (Ez() && strlen(Ez())) {
      previousexp = kTRUE;
      dimension++;
      varexp = Ez();
      item = ExpressionItem(2);
      alias[2] = item->GetAlias();
      if (alias[2].BeginsWith("~")) alias[2].Remove(0, 1);
   }
   if ((Ez() && strlen(Ez())) && ((Ex() && strlen(Ex())) || (Ey() && strlen(Ey())))) varexp += ":";
   if (Ey() && strlen(Ey())) {
      previousexp = kTRUE;
      dimension++;
      varexp += Ey();
      item = ExpressionItem(1);
      alias[1] = item->GetAlias();
      if (alias[1].BeginsWith("~")) alias[1].Remove(0, 1);
   }
   if (Ey() && strlen(Ey()) && Ex() && strlen(Ex())) varexp += ":";
   if (Ex() && strlen(Ex())) {
      previousexp = kTRUE;
      dimension++;
      varexp += Ex();
      item = ExpressionItem(0);
      alias[0] = item->GetAlias();
      if (alias[0].BeginsWith("~")) alias[0].Remove(0, 1);
   }
   for(Int_t i=0;i<10;++i){
      if(En(i+5) && strlen(En(i+5))){
         ++dimension;
         if(previousexp){
            varexp += ":";
            varexp += En(i+5);
         } else varexp = En(i+5);
         previousexp = kTRUE;
      }
   }
   if (dimension<3) {
      Warning("ExecuteSpider", "Need at least 3 variables");
      return;
   }
   // find ListIn
   fTree->SetEventList(0);
   TEventList *elist = 0;
   if (strlen(fBarListIn->GetText())) {
      elist = (TEventList *) gROOT->FindObject(fBarListIn->GetText());
      if (elist) fTree->SetEventList(elist);
   }
   // find ListOut
   if (strlen(fBarListOut->GetText())) varexp = TString::Format(">>%s", fBarListOut->GetText());
   // find canvas/pad where to draw
   TPad *pad = (TPad*)gROOT->GetSelectedPad();
   if (pad) pad->cd();
   // find graphics option
   const char* gopt = fBarOption->GetText();
   // just in case a previous interrupt was posted
   gROOT->SetInterrupt(kFALSE);
   // check if cut is enabled
   const char *cut = "";
   if (fEnableCut) cut = Cut();

   // get entries to be processed
   Long64_t nentries = (Long64_t)(fSlider->GetMaxPosition() -
                            fSlider->GetMinPosition() + 1);
   Long64_t firstentry =(Long64_t) fSlider->GetMinPosition();

   // create the spider plot

   TSpider* spider = new TSpider(fTree,varexp.Data(),cut,Form("%s spider average",gopt),nentries,firstentry);
   spider->Draw();

   if (gPad) gPad->Update();
}

//______________________________________________________________________________
const char* TTreeViewer::Ex()
{
   // Get the expression to be drawn on X axis.

   return fLVContainer->Ex();
}

//______________________________________________________________________________
const char* TTreeViewer::Ey()
{
   // Get the expression to be drawn on Y axis.

   return fLVContainer->Ey();
}

//______________________________________________________________________________
const char* TTreeViewer::Ez()
{
   // Get the expression to be drawn on Z axis.

   return fLVContainer->Ez();
}

//______________________________________________________________________________
const char* TTreeViewer::En(Int_t n)
{
   // Get the n'th expression
   TTVLVEntry *e = fLVContainer->ExpressionItem(n);
   if(e) return e->ConvertAliases();
   return "";
}

//______________________________________________________________________________
void TTreeViewer::EditExpression()
{
   // Start the expression editor.

   void *p = 0;
   // get the selected item
   TTVLVEntry *item = 0;
   if ((item = (TTVLVEntry *) fLVContainer->GetNextSelected(&p)) == 0) {
      Warning("EditExpression", "No item selected.");
      return;
   }
   // check if it is an expression
   ULong_t *itemType = (ULong_t *) item->GetUserData();
   if (!(*itemType & kLTExpressionType)) {
      Warning("EditExpression", "Not expression type.");
      return;
   }
   // check if the editor is already active
   fDialogBox = TGSelectBox::GetInstance();
   if (!fDialogBox) {
      fDialogBox = new TGSelectBox(fClient->GetRoot(), this, fV1->GetWidth() - 10);
   }
   // copy current item data into editor boxes
   fDialogBox->SetEntry(item);
   fDialogBox->SetWindowName("Expression editor");
   // check if you are editing the cut expression
   if (*itemType & kLTCutType || item->IsCut()) {
      fDialogBox->SetLabel("Selection");
   } else {
      fDialogBox->SetLabel("Expression");
   }
}

//______________________________________________________________________________
Int_t TTreeViewer::MakeSelector(const char* selector)
{
   // Get use of TTree::MakeSelector() via the context menu.

   if (!fTree) return 0;
   return fTree->MakeSelector(selector);
}

//______________________________________________________________________________
Long64_t TTreeViewer::Process(const char* filename, Option_t *option, Long64_t nentries, Long64_t firstentry)
{
   // Get use of TTree::Process() via the context menu.

   if (!fTree) return 0;
   return fTree->Process(filename, option, nentries, firstentry);
}

//______________________________________________________________________________
const char *TTreeViewer::GetGrOpt()
{
   // Get graph option

   return fBarOption->GetText();
}

//______________________________________________________________________________
void TTreeViewer::SetGrOpt(const char *option)
{
   // Set graph option

   fBarOption->SetText(option);
}

//______________________________________________________________________________
Bool_t TTreeViewer::IsScanRedirected()
{
   // Return kTRUE if scan is redirected

   return (fBarScan->GetState()==kButtonDown);
}

//______________________________________________________________________________
void TTreeViewer::RemoveItem()
{
   // Remove the selected item from the list.

   void *p = 0;
   TTVLVEntry *item = 0;
   // get the selected item
   if ((item = (TTVLVEntry *) fLVContainer->GetNextSelected(&p)) == 0) {
      Warning("RemoveItem", "No item selected.");
      return;
   }
   // check if it is removable
   ULong_t *itemType = (ULong_t *) item->GetUserData();
   if (!(*itemType & kLTDragType)) {
      Warning("RemoveItem", "Not removable type.");
      return;
   }
   fLVContainer->RemoveItem(item);
   fListView->Layout();
}

//______________________________________________________________________________
void TTreeViewer::RemoveLastRecord()
{
   // Remove the current record.

   fSession->RemoveLastRecord();
}

//______________________________________________________________________________
Bool_t TTreeViewer::HandleTimer(TTimer *timer)
{
   // This function is called by the fTimer object.

   if (fCounting) {
      Float_t first = fSlider->GetMinPosition();
      Float_t last  = fSlider->GetMaxPosition();
      Float_t current = (Float_t)fTree->GetReadEntry();
      Float_t percent = (current-first+1)/(last-first+1);
      fProgressBar->SetPosition(100.*percent);
      fProgressBar->ShowPosition();
   }
   timer->Reset();
   return kFALSE;
}

//______________________________________________________________________________
Bool_t TTreeViewer::ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
{
   // Handle menu and other commands generated.

   TRootHelpDialog *hd;
   TTVRecord *record;

   switch (GET_MSG(msg)) {
      case kC_VSLIDER :
         // handle slider messages
         PrintEntries();
      break;
      case kC_TEXTENTRY:
         switch (GET_SUBMSG(msg)) {
         // handle enter posted by the Command text entry
            case kTE_ENTER:
               if ((ERootTreeViewerCommands)parm1 == kBarCommand) {
                  ExecuteCommand(fBarCommand->GetText());
                  fBarCommand->Clear();
               }
               if ((ERootTreeViewerCommands)parm1 == kBarOption) {
                  fVarDraw = kFALSE;
                  fBarH->SetState(kButtonDown);
                  ExecuteDraw();
                  fBarH->SetState(kButtonUp);
               }
               break;
            default:
               break;
         }
         break;
      case kC_LISTTREE:
         switch (GET_SUBMSG(msg)) {
         // handle mouse messages in the list-tree (left panel)
            case kCT_ITEMCLICK :
               // tell coverity that parm1 is a Long_t, and not an enum (even
               // if we compare it with an enum value) and the meaning of 
               // parm1 depends on GET_MSG(msg) and GET_SUBMSG(msg)
               // coverity[mixed_enums]
               if (((EMouseButton)parm1==kButton1) || 
                   ((EMouseButton)parm1==kButton3)) {
                  TGListTreeItem *ltItem = 0;
                  // get item that sent this
                  if ((ltItem = fLt->GetSelected()) != 0) {
                  // get item type
                     ULong_t *itemType = (ULong_t *)ltItem->GetUserData();
                     if (!itemType) 
                        break;
                     if (*itemType & kLTTreeType) {
                     // already mapped tree item clicked
                        Int_t index = (Int_t)(*itemType >> 8);
                        SwitchTree(index);
                        if (fTree != fMappedTree) {
                           // switch also the global "tree" variable
                           fLVContainer->RemoveNonStatic();
                           // map it on the right panel
                           MapTree(fTree);
                           fListView->Layout();
                        }
                        // activate context menu for this tree
                        if (parm1 == kButton3) {
                           Int_t x = (Int_t)(parm2 &0xffff);
                           Int_t y = (Int_t)((parm2 >> 16) & 0xffff);
                           fContextMenu->Popup(x, y, fTree);
                        }
                     }

                     if (*itemType & kLTBranchType) {
                     // branch item clicked
                        SetParentTree(ltItem);
                        if (!fTree) break; // really needed ?
                        TBranch *branch = fTree->GetBranch(ltItem->GetText());
                        if (!branch) break;
                        // check if it is mapped on the right panel
                        if (branch != fMappedBranch) {
                           fLVContainer->RemoveNonStatic();
                           MapBranch(branch);
                           fStopMapping = kFALSE;
                           fListView->Layout();
                        }
                        // activate context menu for this branch (no *MENU* methods ):)
                        if (parm1 == kButton3) {
                           Int_t x = (Int_t)(parm2 &0xffff);
                           Int_t y = (Int_t)((parm2 >> 16) & 0xffff);
                           fContextMenu->Popup(x, y, branch);
                        }
                     }

                     if (*itemType & kLTLeafType) {
                     // leaf item clicked
                        SetParentTree(ltItem);
                        if (!fTree) break;
                        // find parent branch
                        TBranch *branch = fTree->GetBranch(ltItem->GetParent()->GetText());
                        if (!branch) {
                           if (fTree != fMappedTree) {
                              fLVContainer->RemoveNonStatic();
                              MapTree(fTree);
                              fListView->Layout();
                           }
                        } else {
                           // check if it is already mapped
                           if (branch!=fMappedBranch) {
                              fLVContainer->RemoveNonStatic();
                              MapBranch(branch);
                              fStopMapping = kFALSE;
                              fListView->Layout();
                           }
                        }
                        // select corresponding leaf on the right panel
                        fLVContainer->SelectItem(ltItem->GetText());
                        if (parm1 == kButton3) {
                        // activate context menu for this leaf
                           ProcessMessage(MK_MSG(kC_CONTAINER, kCT_ITEMCLICK), kButton3, parm2);
                        }
                     }
                  }
               }
               break;
            case kCT_ITEMDBLCLICK :
               fClient->NeedRedraw(fLt);
               if (parm1 == kButton1) {
               // execute double-click action for corresponding item in the right panel
                  ProcessMessage(MK_MSG(kC_CONTAINER, kCT_ITEMDBLCLICK), kButton1, parm2);
               }
               break;
            default:
               break;
         }
         break;
      case kC_COMMAND:
         switch (GET_SUBMSG(msg)) {
            case kCM_COMBOBOX:
               if ((record = fSession->GetRecord((Int_t)parm2)))
                  fSession->Show(record);
            break;
            case kCM_BUTTON:
               switch (parm1) {
               // handle button messages
                  case kRESET:
                     EmptyAll();
                     break;
                  case kDRAW:
                     fVarDraw = kFALSE;
                     ExecuteDraw();
                     break;
                  case kSTOP:
                     if (fCounting)
                        gROOT->SetInterrupt(kTRUE);
                     break;
                  case kCLOSE:
                     SendCloseMessage();
                     break;
                  case kBGFirst:
                     if ((record = fSession->First()))
                        fSession->Show(record);
                     break;
                  case kBGPrevious:
                     if ((record = fSession->Previous()))
                        fSession->Show(record);
                     break;
                  case kBGRecord:
                     fSession->AddRecord();
                     break;
                  case kBGNext:
                     if ((record = fSession->Next()))
                        fSession->Show(record);
                     break;
                  case kBGLast:
                     if ((record = fSession->Last()))
                        fSession->Show(record);
                     break;
                  default:
                     break;
               }
               break;
            case kCM_MENU:
            // handle menu messages
               // check if sent by Options menu
               if ((parm1>=kOptionsReset) && (parm1<kHelpAbout)) {
                  Dimension();
                  if ((fDimension==0) && (parm1>=kOptions1D)) {
                     Warning("ProcessMessage", "Edit expressions first.");
                     break;
                  }
                  if ((fDimension==1) && (parm1>=kOptions2D)) {
                     Warning("ProcessMessage", "You have only one expression active.");
                     break;
                  }
                  if ((fDimension==2) && (parm1>=kOptions1D) &&(parm1<kOptions2D)) {
                     Warning("ProcessMessage", "1D drawing options not apply to 2D histograms.");
                     break;
                  }
                  // make composed option
                  MapOptions(parm1);
                  break;
               }
               switch (parm1) {
                  case kFileCanvas:
                     gROOT->MakeDefCanvas();
                     break;
                  case kFileBrowse:
                     if (1) {
                        static TString dir(".");
                        TGFileInfo info;
                        info.fFileTypes = gOpenTypes;
                        info.fIniDir    = StrDup(dir);
                        new TGFileDialog(fClient->GetRoot(), this, kFDOpen, &info);
                        if (!info.fFilename) return kTRUE;
                        dir = info.fIniDir;
                        TString command = TString::Format("tv__tree_file = new TFile(\"%s\");",
                           gSystem->UnixPathName(info.fFilename));
                        ExecuteCommand(command.Data());
                        ExecuteCommand("tv__tree_file->ls();");
                        std::cout << "Use SetTreeName() from context menu and supply a tree name" << std::endl;
                        std::cout << "The context menu is activated by right-clicking the panel from right" << std::endl;
                     }
                     break;
                  case kFileLoadLibrary:
                     fBarCommand->SetText("gSystem->Load(\"\");");
                     if (1) {
                        Event_t event;
                        event.fType = kButtonPress;
                        event.fCode = kButton1;
                        event.fX = event.fY = 1;
                        fBarCommand->HandleButton(&event);
                     }
                     fBarCommand->SetCursorPosition(15);
                     break;
                  case kFileOpenSession:
                     if (1) {
                        static TString dir(".");
                        TGFileInfo info;
                        info.fFileTypes = gMacroTypes;
                        info.fIniDir    = StrDup(dir);
                        new TGFileDialog(fClient->GetRoot(), this, kFDOpen, &info);
                        if (!info.fFilename) return kTRUE;
                        dir = info.fIniDir;
                        gInterpreter->Reset();
                        if (!gInterpreter->IsLoaded(info.fFilename)) gInterpreter->LoadMacro(info.fFilename);
                        char command[1024];
                        command[0] = 0;
                        snprintf(command,1024,"open_session((void*)0x%lx);", (Long_t)this);
                        ExecuteCommand(command);
                     }
                     break;
                  case kFileSaveMacro:
                     SaveSource();
                     break;
                  case kFilePrint:
                     break;
                  case kFileClose:
                     SendCloseMessage();
                     break;
                  case kFileQuit:
                     gApplication->Terminate(0);
                     break;
                  case kEditExpression:
                     EditExpression();
                     break;
                  case kEditCut:
                     EditExpression();
                     break;
                  case kEditMacro:
                     break;
                  case kEditEvent:
                     break;
                  case kRunMacro:
                     break;
                  case kHelpAbout:
                     {
#ifdef R__UNIX
                        TString rootx;
# ifdef ROOTBINDIR
                        rootx = ROOTBINDIR;
# else
                        rootx = gSystem->Getenv("ROOTSYS");
                        if (!rootx.IsNull()) rootx += "/bin";
# endif
                        rootx += "/root -a &";
                        gSystem->Exec(rootx);
#else
#ifdef WIN32
                        new TWin32SplashThread(kTRUE);
#else
                        char str[32];
                        snprintf(str,32, "About ROOT %s...", gROOT->GetVersion());
                        hd = new TRootHelpDialog(this, str, 600, 400);
                        hd->SetText(gHelpAbout);
                        hd->Popup();
#endif
#endif
                     }
                     break;
                  case kHelpAboutTV:
                     hd = new TRootHelpDialog(this, "About TreeViewer...", 600, 400);
                     hd->SetText(gTVHelpAbout);
                     hd->Resize(hd->GetDefaultSize());
                     hd->Popup();
                     break;
                  case kHelpStart:
                     hd = new TRootHelpDialog(this, "Quick start...", 600, 400);
                     hd->SetText(gTVHelpStart);
                     hd->Popup();
                     break;
                  case kHelpLayout:
                     hd = new TRootHelpDialog(this, "Layout...", 600, 400);
                     hd->SetText(gTVHelpLayout);
                     hd->Popup();
                     break;
                  case kHelpOpenSave:
                     hd = new TRootHelpDialog(this, "Open/Save...", 600, 400);
                     hd->SetText(gTVHelpOpenSave);
                     hd->Popup();
                     break;
                  case kHelpDragging:
                     hd = new TRootHelpDialog(this, "Dragging items...", 600, 400);
                     hd->SetText(gTVHelpDraggingItems);
                     hd->Popup();
                     break;
                  case kHelpEditing:
                     hd = new TRootHelpDialog(this, "Editing expressions...", 600, 400);
                     hd->SetText(gTVHelpEditExpressions);
                     hd->Popup();
                     break;
                  case kHelpSession:
                     hd = new TRootHelpDialog(this, "Session...", 600, 400);
                     hd->SetText(gTVHelpSession);
                     hd->Popup();
                     break;
                  case kHelpCommands:
                     hd = new TRootHelpDialog(this, "Executing user commands...", 600, 400);
                     hd->SetText(gTVHelpUserCommands);
                     hd->Popup();
                     break;
                  case kHelpContext:
                     hd = new TRootHelpDialog(this, "Context menus...", 600, 400);
                     hd->SetText(gTVHelpContext);
                     hd->Popup();
                     break;
                  case kHelpDrawing:
                     hd = new TRootHelpDialog(this, "Drawing histograms...", 600, 400);
                     hd->SetText(gTVHelpDrawing);
                     hd->Popup();
                     break;
                  case kHelpMacros:
                     hd = new TRootHelpDialog(this, "Using macros...", 600, 400);
                     hd->SetText(gTVHelpMacros);
                     hd->Popup();
                     break;
                  default:
                     break;
               }
               break;
            default:
               break;
         }
         break;
      case kC_CONTAINER:
         switch (GET_SUBMSG(msg)) {
         // handle messages sent from the listview (right panel)
            case kCT_SELCHANGED:
               break;
            case kCT_ITEMCLICK:
            // handle mouse messages
               switch (parm1) {
                  case kButton1:
                     if (fLVContainer->NumSelected()) {
                     // get item that sent this
                        void *p = 0;
                        TTVLVEntry *item;
                        if ((item = (TTVLVEntry *) fLVContainer->GetNextSelected(&p)) != 0) {
                           const char* vname = item->GetTrueName();
                           TString trueName(vname);
                           if (trueName.Contains("[]")) {
                              TIter next(fTree->GetListOfLeaves());
                              TLeaf *leaf;
                              while((leaf=(TLeaf*)next())) {
                                 if (!strcmp(vname, EmptyBrackets(leaf->GetName())))
                                    vname = leaf->GetName();
                              }
                           }
                           char* msg2 = new char[2000];
                           // get item type
                           ULong_t *itemType = (ULong_t *) item->GetUserData();
                           if (*itemType & kLTTreeType) {
                           // X, Y or Z clicked
                              char symbol = (char)((*itemType) >> 8);
                              snprintf(msg2,2000, "%c expression : %s", symbol, vname);
                           } else {
                              if (*itemType & kLTCutType) {
                              // scissors clicked
                                 snprintf(msg2,2000, "Cut : %s", vname);
                              } else {
                                 if (*itemType & kLTPackType) {
                                    snprintf(msg2,2000, "Box : %s", vname);
                                 } else {
                                    if (*itemType & kLTExpressionType) {
                                       // expression clicked
                                       snprintf(msg2,2000, "Expression : %s", vname);
                                    } else {
                                       if (*itemType & kLTBranchType) {
                                          snprintf(msg2,2000, "Branch : %s", vname);
                                       } else {
                                          snprintf(msg2,2000, "Leaf : %s", vname);
                                       }
                                    }
                                 }
                              }
                           }
                           // write who is responsable for this
                           TString message = msg2;
                           message = message(0,150);
                           Message(msg2);
                           delete[] msg2;
                           // check if this should be pasted into the expression editor
                           if ((*itemType & kLTBranchType) || (*itemType & kLTCutType)) break;
                           fDialogBox = TGSelectBox::GetInstance();
                           if (!fDialogBox || !vname[0]) break;
                           if (item == fDialogBox->EditedEntry()) break;
                           // paste it
//                           char first = (char) vname[0];
                           TString insert(item->GetAlias());
//                           if (first != '(') insert += "(";
//                           insert += item->GetAlias();
//                           if (first != '(') insert += ")";

                           fDialogBox->GrabPointer();
                           fDialogBox->InsertText(insert.Data());
                           // put the cursor at the right position
                        }
                     }
                     break;
                  case kButton2:
                     break;
                  case kButton3:
                  // activate general context menu
                     if (fLVContainer->NumSelected()) {
                        void *p = 0;
                        Int_t x = (Int_t)(parm2 &0xffff);
                        Int_t y = (Int_t)((parm2 >> 16) & 0xffff);
                        TTVLVEntry *item = 0;
                        if ((item = (TTVLVEntry *) fLVContainer->GetNextSelected(&p)) != 0) {
                           fContextMenu->Popup(x, y, item->GetContext());
                        }
                     } else {        // empty click
                        Int_t x = (Int_t)(parm2 &0xffff);
                        Int_t y = (Int_t)((parm2 >> 16) & 0xffff);
                        fContextMenu->Popup(x, y, this);
                     }
                     break;
                  default:
                     break;
               }
               break;
            case kCT_ITEMDBLCLICK:
               switch (parm1) {
                  case kButton1:
                     if (fLVContainer->NumSelected()) {
                     // get item that sent this
                        void *p = 0;
                        TTVLVEntry *item;
                        if ((item = (TTVLVEntry *) fLVContainer->GetNextSelected(&p)) != 0) {
                        // get item type
                           ULong_t *itemType = (ULong_t *) item->GetUserData();
                           if (!(*itemType & kLTCutType) && !(*itemType & kLTBranchType)
                               && !(*itemType & kLTPackType)) {
                              if (strlen(item->GetTrueName())) {
                                 fVarDraw = kTRUE;
                                 // draw on double-click
                                 ExecuteDraw();
                                 break;
                              } else {
                              // open expression in editor
                                 EditExpression();
                              }
                           }
                           if (*itemType & kLTCutType) {
                              fEnableCut = !fEnableCut;
                              if (fEnableCut) {
                                 item->SetSmallPic(gClient->GetPicture("cut_t.xpm"));
                              } else {
                                 item->SetSmallPic(gClient->GetPicture("cut-disable_t.xpm"));
                              }
                           }
                           if (*itemType & kLTPackType) {
                              fScanMode = kTRUE;
                              ExecuteDraw();
                           }
                        }
                     }
                     break;
                  case kButton2:
                     break;
                  case kButton3:
                     break;
                  default:
                     break;
               }
               break;
            case 4:
//               std::cout << "Dragging Item" << std::endl;
            default:
               break;
         }
         break;
      default:
         break;
   }
   return kTRUE;
}

//______________________________________________________________________________
void TTreeViewer::CloseWindow()
{
   // Close the viewer.

   DeleteWindow();
}

//______________________________________________________________________________
void TTreeViewer::ExecuteCommand(const char* command, Bool_t fast)
{
   // Execute all user commands.

   // Execute the command, write it to history file and echo it to output
   if (fBarRec->GetState() == kButtonDown) {
   // show the command on the command line
      //printf("%s\n", command);
      char comm[2000];
      comm[0] = 0;
      if (strlen(command) > 1999) {
         Warning("ExecuteCommand", "Command too long: aborting.");
         return;
      }
      snprintf(comm,2000, "%s", command);
      // print the command to history file
      Gl_histadd(comm);
   }
   // execute it
   if (fast) {
      gROOT->ProcessLineFast(command);
   } else {
      gROOT->ProcessLine(command);
   }
   // make sure that 'draw on double-click' flag is reset
   fVarDraw = kFALSE;
}
//______________________________________________________________________________
void TTreeViewer::MapOptions(Long_t parm1)
{
   // Scan the selected options from option menu.

   Int_t ind;
   if (parm1 == kOptionsReset) {
      for (ind=kOptionsGeneral; ind<kOptionsGeneral+16; ind++)
         fOptionsGen->UnCheckEntry(ind);
      for (ind=kOptions1D; ind<kOptions1D+12; ind++)
         fOptions1D->UnCheckEntry(ind);
      for (ind=kOptions2D; ind<kOptions2D+14; ind++)
         fOptions2D->UnCheckEntry(ind);
   }
   if ((parm1 < kOptions1D) && (parm1 != kOptionsReset)) {
      if (fOptionsGen->IsEntryChecked((Int_t)parm1)) {
         fOptionsGen->UnCheckEntry((Int_t)parm1);
      } else {
         fOptionsGen->CheckEntry((Int_t)parm1);
         if ((Int_t)parm1 != kOptionsGeneral) fOptionsGen->UnCheckEntry((Int_t)kOptionsGeneral);
      }
      if (fOptionsGen->IsEntryChecked((Int_t)kOptionsGeneral)) {
      // uncheck all in this menu
         for (ind=kOptionsGeneral+1; ind<kOptionsGeneral+16; ind++) {
            fOptionsGen->UnCheckEntry(ind);
         }
      }
   }

   if ((parm1 < kOptions2D) && (parm1 >= kOptions1D)) {
      if (fOptions1D->IsEntryChecked((Int_t)parm1)) {
         fOptions1D->UnCheckEntry((Int_t)parm1);
      } else {
         fOptions1D->CheckEntry((Int_t)parm1);
         if ((Int_t)parm1 != kOptions1D) fOptions1D->UnCheckEntry((Int_t)kOptions1D);
      }
      if (fOptions1D->IsEntryChecked((Int_t)kOptions1D)) {
      // uncheck all in this menu
         for (ind=kOptions1D+1; ind<kOptions1D+12; ind++) {
            fOptions1D->UnCheckEntry(ind);
         }
      }
   }

   if (parm1 >= kOptions2D) {
      if (fOptions2D->IsEntryChecked((Int_t)parm1)) {
         fOptions2D->UnCheckEntry((Int_t)parm1);
      } else {
         fOptions2D->CheckEntry((Int_t)parm1);
         if ((Int_t)parm1 != kOptions2D) fOptions2D->UnCheckEntry((Int_t)kOptions2D);
      }
      if (fOptions2D->IsEntryChecked((Int_t)kOptions2D)) {
      // uncheck all in this menu
         for (ind=kOptions2D+1; ind<kOptions2D+14; ind++) {
            fOptions2D->UnCheckEntry(ind);
         }
      }
   }
   // concatenate options
   fBarOption->SetText("");
   for (ind=kOptionsGeneral; ind<kOptionsGeneral+16; ind++) {
      if (fOptionsGen->IsEntryChecked(ind))
         fBarOption->AppendText(gOptgen[ind-kOptionsGeneral]);
   }
   if (Dimension() == 1) {
      for (ind=kOptions1D; ind<kOptions1D+12; ind++) {
         if (fOptions1D->IsEntryChecked(ind))
            fBarOption->AppendText(gOpt1D[ind-kOptions1D]);
      }
   }
   if (Dimension() == 2) {
      for (ind=kOptions2D; ind<kOptions2D+14; ind++) {
         if (fOptions2D->IsEntryChecked(ind))
            fBarOption->AppendText(gOpt2D[ind-kOptions2D]);
      }
   }
}

//______________________________________________________________________________
void TTreeViewer::MapTree(TTree *tree, TGListTreeItem *parent, Bool_t listIt)
{
   // Map current tree and expand its content (including friends) in the lists.
   
   if (!tree) return;
   TObjArray *branches = tree->GetListOfBranches();
   if (!branches) return; // A Chain with no underlying trees.
   TBranch   *branch;
   // loop on branches
   Int_t id;
   for (id=0; id<branches->GetEntries(); id++) {
      branch = (TBranch *)branches->At(id);
      if (branch->TestBit(kDoNotProcess))  continue;
      TString name = branch->GetName();
      if (name.Contains("fBits") || name.Contains("fUniqueID")) continue;
      // now map sub-branches
      MapBranch(branch, "", parent, listIt);
      fStopMapping = kFALSE;
   }
   //Map branches of friend Trees (if any)
   //Look at tree->GetTree() to insure we see both the friendss of a chain
   //and the friends of the chain members
   TIter nextf( tree->GetTree()->GetListOfFriends() ); 
   TFriendElement *fr;
   while ((fr = (TFriendElement*)nextf())) {
      TTree * t = fr->GetTree();
      branches = t->GetListOfBranches();
      for (id=0; id<branches->GetEntries(); id++) {
         branch = (TBranch *)branches->At(id);
         if (branch->TestBit(kDoNotProcess))  continue;
         TString name = branch->GetName();
         if (name.Contains("fBits") || name.Contains("fUniqueID")) continue;
         // now map sub-branches
         MapBranch(branch, fr->GetName(), parent, listIt);
         fStopMapping = kFALSE;
      }
   }
   
   // tell who was last mapped
   if (listIt) {
      fMappedTree    = tree;
      fMappedBranch  = 0;
   }
}

//______________________________________________________________________________
void TTreeViewer::MapBranch(TBranch *branch, const char *prefix, TGListTreeItem *parent, Bool_t listIt)
{
   // Map current branch and expand its content in the list view.

   if (!branch) return;
   TString   name;
   if (prefix && strlen(prefix) >0) name = Form("%s.%s",prefix,branch->GetName());
   else                             name = branch->GetName();
   Int_t     ind;
   TGListTreeItem *branchItem = 0;
   ULong_t *itemType;
   // map this branch
   if (name.Contains("fBits") || name.Contains("fUniqueID")) return;
   if (parent) {
   // make list tree items for each branch according to the type
      const TGPicture *pic, *spic;
      if ((branch->GetListOfBranches()->GetEntries()) ||
          (branch->GetNleaves())) {
         if (branch->GetListOfBranches()->GetEntries()) {
            itemType = new ULong_t(kLTBranchType);
            if (branch->InheritsFrom("TBranchObject")) {
               pic = gClient->GetPicture("branch-ob_t.xpm");
               spic = gClient->GetPicture("branch-ob_t.xpm");
            } else {
               if (branch->InheritsFrom("TBranchClones")) {
                  pic = gClient->GetPicture("branch-cl_t.xpm");
                  spic = gClient->GetPicture("branch-cl_t.xpm");
               } else {
                  pic = gClient->GetPicture("branch_t.xpm");
                  spic = gClient->GetPicture("branch_t.xpm");
               }
            }
            branchItem = fLt->AddItem(parent, EmptyBrackets(name), itemType, pic, spic);
         } else {
            if (branch->GetNleaves() > 1) {
               itemType = new ULong_t(kLTBranchType);
               pic = gClient->GetPicture("branch_t.xpm");
               spic = gClient->GetPicture("branch_t.xpm");
               branchItem = fLt->AddItem(parent, EmptyBrackets(name), itemType,pic, spic);
               TObjArray *leaves = branch->GetListOfLeaves();
               TLeaf *leaf = 0;
               TString leafName;
               for (Int_t lf=0; lf<leaves->GetEntries(); lf++) {
                  leaf = (TLeaf *)leaves->At(lf);
                  leafName = name;
                  leafName.Append(".").Append(EmptyBrackets(leaf->GetName()));
                  itemType = new ULong_t(kLTLeafType);
                  pic = gClient->GetPicture("leaf_t.xpm");
                  spic = gClient->GetPicture("leaf_t.xpm");
                  fLt->AddItem(branchItem, leafName.Data(), itemType, pic, spic);
               }
            } else {
               itemType = new ULong_t(kLTLeafType);
               pic = gClient->GetPicture("leaf_t.xpm");
               spic = gClient->GetPicture("leaf_t.xpm");
               branchItem = fLt->AddItem(parent, EmptyBrackets(name), itemType, pic, spic);
            }
         }
      }
   }
   // list branch in list view if necessary
   if (listIt) {
      TGString *textEntry = 0;
      const TGPicture *pic, *spic;
      TTVLVEntry *entry;
      // make list view items in the right frame
      if (!fStopMapping) {
         fMappedBranch = branch;
         fMappedTree = 0;
         fStopMapping = kTRUE;
      }
      if ((branch->GetListOfBranches()->GetEntries()) ||
          (branch->GetNleaves())) {
         textEntry = new TGString(EmptyBrackets(name.Data()));
         if (branch->GetListOfBranches()->GetEntries()) {
            if (branch->InheritsFrom("TBranchObject")) {
               pic = gClient->GetPicture("branch-ob_t.xpm");
               spic = gClient->GetPicture("branch-ob_t.xpm");
            } else {
               if (branch->InheritsFrom("TBranchClones")) {
                  pic = gClient->GetPicture("branch-cl_t.xpm");
                  spic = gClient->GetPicture("branch-cl_t.xpm");
               } else {
                  pic = gClient->GetPicture("branch_t.xpm");
                  spic = gClient->GetPicture("branch_t.xpm");
               }
            }
            entry = new TTVLVEntry(fLVContainer,pic,spic,textEntry,0,kLVSmallIcons);
            entry->SetUserData(new UInt_t(kLTBranchType));
            entry->SetToolTipText("Branch with sub-branches. Can not be dragged");
            fLVContainer->AddThisItem(entry);
            entry->MapWindow();
            entry->SetAlias(textEntry->GetString());
         } else {
            if (branch->GetNleaves() > 1) {
               if (textEntry) delete textEntry;
               textEntry = new TGString(EmptyBrackets(name.Data()));
               pic = gClient->GetPicture("branch_t.xpm");
               spic = gClient->GetPicture("branch_t.xpm");
               entry = new TTVLVEntry(fLVContainer, pic, spic, textEntry,0,kLVSmallIcons);
               entry->SetUserData(new UInt_t(kLTBranchType));
               entry->SetToolTipText("Branch with more than one leaf. Can not be dragged");
               fLVContainer->AddThisItem(entry);
               entry->MapWindow();
               entry->SetAlias(textEntry->GetString());

               TObjArray *leaves = branch->GetListOfLeaves();
               TLeaf *leaf = 0;
               TString leafName;
               for (Int_t lf=0; lf<leaves->GetEntries(); lf++) {
                  leaf = (TLeaf *)leaves->At(lf);
                  leafName = name;
                  leafName.Append(".").Append(EmptyBrackets(leaf->GetName()));
                  textEntry = new TGString(leafName.Data());
                  pic = gClient->GetPicture("leaf_t.xpm");
                  spic = gClient->GetPicture("leaf_t.xpm");
                  entry = new TTVLVEntry(fLVContainer, pic, spic, textEntry,0,kLVSmallIcons);
                  entry->SetUserData(new UInt_t(kLTDragType | kLTLeafType));
                  entry->SetToolTipText("Double-click to draw. Drag to X, Y, Z or scan box.");
                  fLVContainer->AddThisItem(entry);
                  entry->MapWindow();
                  entry->SetAlias(textEntry->GetString());
               }
            } else {
               pic = (gClient->GetMimeTypeList())->GetIcon("TLeaf",kFALSE);
               if (!pic) pic = gClient->GetPicture("leaf_t.xpm");
               spic = gClient->GetMimeTypeList()->GetIcon("TLeaf",kTRUE);
               if (!spic) spic = gClient->GetPicture("leaf_t.xpm");
               entry = new TTVLVEntry(fLVContainer,pic,spic,textEntry,0,kLVSmallIcons);
               entry->SetUserData(new UInt_t(kLTDragType | kLTLeafType));
               entry->SetToolTipText("Double-click to draw. Drag to X, Y, Z or scan box.");
               fLVContainer->AddThisItem(entry);
               entry->MapWindow();
               entry->SetAlias(textEntry->GetString());
            }
         }
      }
   }

   TObjArray *branches = branch->GetListOfBranches();
   TBranch   *branchDaughter = 0;

   // loop all sub-branches
   for (ind=0; ind<branches->GetEntries(); ind++) {
      branchDaughter = (TBranch *)branches->UncheckedAt(ind);
      // map also all sub-branches
      MapBranch(branchDaughter, "", branchItem, listIt);
   }
}

//______________________________________________________________________________
void TTreeViewer::NewExpression()
{
   // Create new expression

   fLVContainer->RemoveNonStatic();
   const TGPicture  *pic = gClient->GetPicture("expression_t.xpm");
   const TGPicture *spic = gClient->GetPicture("expression_t.xpm");

   TTVLVEntry *entry = new TTVLVEntry(fLVContainer,pic,spic,
                                            new TGString(),0,kLVSmallIcons);
   entry->SetUserData(new ULong_t(kLTExpressionType | kLTDragType));
   fLVContainer->AddThisItem(entry);
   entry->MapWindow();
   entry->Empty();
   if (fMappedTree) MapTree(fTree);
   if (fMappedBranch) MapBranch(fMappedBranch);
   fListView->Layout();
   fNexpressions++;
}

//______________________________________________________________________________
void TTreeViewer::SetParentTree(TGListTreeItem *item)
{
   // Find parent tree of a clicked item.

   if (!item) return;
   ULong_t *itemType = (ULong_t *)item->GetUserData();
   if (!itemType) return;
   TGListTreeItem *parent = 0;
   Int_t index;
   if (!(*itemType & kLTTreeType)) {
      parent = item->GetParent();
      SetParentTree(parent);
   } else {
      index = (Int_t)(*itemType >> 8);
      SwitchTree(index);
   }
}

//______________________________________________________________________________
void TTreeViewer::Message(const char* msg)
{
   // Send a message on the status bar.

   fStatusBar->SetText(msg);
}

//______________________________________________________________________________
void TTreeViewer::DoError(int level, const char *location, const char *fmt, va_list va) const
{
   // Put error/warning into TMsgBox and also forward to console.

   TObject::DoError(level, location, fmt, va);

   // in case level will abort we will not come here...

   static const int buf_size = 2048;
   char buf[buf_size], *bp;

   int n = vsnprintf(buf, buf_size, fmt, va);
   // old vsnprintf's return -1 if string is truncated new ones return
   // total number of characters that would have been written
   if (n == -1 || n >= buf_size) {
      TObject::Warning("DoError", "Error message string truncated...");
   }
   if (level >= kSysError && level < kFatal)
      bp = Form("%s (%s)", buf, gSystem->GetError());
   else
      bp = buf;

   const char *title = "";
   if (level == kInfo)
      title = "Info";
   if (level == kWarning)
      title = "Warning";
   if (level == kError)
      title = "Error";
   if (level == kSysError)
      title = "System Error";

   new TGMsgBox(fClient->GetRoot(), this, title, bp, kMBIconExclamation);
}

//______________________________________________________________________________
void TTreeViewer::PrintEntries()
{
   // Print the number of selected entries on status-bar.

   if (!fTree) return;
   char * msg = new char[100];
   snprintf(msg,100, "First entry : %lld Last entry : %lld",
           (Long64_t)fSlider->GetMinPosition(), (Long64_t)fSlider->GetMaxPosition());
   Message(msg);
   delete[] msg;
}

//______________________________________________________________________________
void TTreeViewer::SaveSource(const char* filename, Option_t *)
{
   // Save current session as a C++ macro file.

   if (!fTree) return;
   char quote = '"';
   std::ofstream out;
   Int_t lenfile = strlen(filename);
   char * fname;
   if (!lenfile) {
      fname = (char*)fSourceFile;
      lenfile = strlen(fname);
   } else {
      fname = (char*)filename;
      fSourceFile = filename;
   }
   // if filename is given, open this file, otherwise create a file
   // with a name : treeviewer.C
   if (lenfile) {
      out.open(fname, std::ios::out);
   } else {
      fname = new char[13];
      strlcpy(fname, "treeviewer.C",13);
      out.open(fname, std::ios::out);
   }
   if (!out.good ()) {
      printf("SaveSource cannot open file : %s\n", fname);
      fSourceFile = "treeviewer.C";
      if (!lenfile) delete [] fname;
      return;
   }
   //   Write macro header and date/time stamp
   TDatime t;
   TString sname(fname);
   sname = sname.ReplaceAll(".C", "");
   out <<"void "<<sname.Data()<<"() {"<<std::endl;
   out <<"//=========Macro generated by ROOT version"<<gROOT->GetVersion()<<std::endl;
   out <<"//=========for tree "<<quote<<fTree->GetName()<<quote<<" ("<<t.AsString()<<")"<<std::endl;
   out <<"//===This macro can be opened from a TreeViewer session after loading"<<std::endl;
   out <<"//===the corresponding tree, or by running root with the macro name argument"<<std::endl<<std::endl;
   out <<"   open_session();"<<std::endl;
   out <<"}"<<std::endl<<std::endl;
   out <<"open_session(void *p = 0) {"<<std::endl;
   out <<"   gSystem->Load("<<quote<<"libTreeViewer"<<quote<<");"<<std::endl;
   out <<"   TTreeViewer *treeview = (TTreeViewer *) p;"<<std::endl;
   out <<"   if (!treeview) treeview = new TTreeViewer();"<<std::endl;
   out <<"   TTree *tv_tree = (TTree*)gROOT->FindObject("<<quote<<fTree->GetName()<<quote<<");"<<std::endl;
   out <<"   TFile *tv_file = (TFile*)gROOT->GetListOfFiles()->FindObject("<<quote<<fFilename<<quote<<");"<<std::endl;
   out <<"   if (!tv_tree) {"<<std::endl;
   out <<"      if (!tv_file) tv_file = new TFile("<<quote<<fFilename<<quote<<");"<<std::endl;
   out <<"      if (tv_file)  tv_tree = (TTree*)tv_file->Get("<<quote<<fTree->GetName()<<quote<<");"<<std::endl;
   out <<"      if(!tv_tree) {"<<std::endl;
   out <<"         printf(\"Tree %s not found\", fTree->GetName());"<<std::endl;
   out <<"         return;"<<std::endl;
   out <<"      }"<<std::endl;
   out <<"   }"<<std::endl<<std::endl;
   out <<"   treeview->SetTreeName("<<quote<<fTree->GetName()<<quote<<");"<<std::endl;
   out <<"   treeview->SetNexpressions("<<fNexpressions<<");"<<std::endl;
   // get expressions
   TTVLVEntry *item;
   out <<"//         Set expressions on axis and cut"<<std::endl;
   out <<"   TTVLVEntry *item;"<<std::endl;
   for (Int_t i=0; i<4; i++) {
      switch (i) {
         case 0:
            out <<"//   X expression"<<std::endl;
            break;
         case 1:
            out <<"//   Y expression"<<std::endl;
            break;
         case 2:
            out <<"//   Z expression"<<std::endl;
            break;
         case 3:
            out <<"//   Cut expression"<<std::endl;
            break;
         default:
            break;
      }
      item = ExpressionItem(i);
      out <<"   item = treeview->ExpressionItem("<<i<<");"<<std::endl;
      out <<"   item->SetExpression("<<quote<<item->GetTrueName()<<quote
          <<", "<<quote<<item->GetAlias()<<quote<<");"<<std::endl;
   }
   out <<"//         Scan list"<<std::endl;
   item = ExpressionItem(4);
   out <<"   item = treeview->ExpressionItem(4);"<<std::endl;
   out <<"   item->SetExpression("<<quote<<item->GetTrueName()<<quote
          <<", "<<quote<<"Scan box"<<quote<<");"<<std::endl;
   out <<"//         User defined expressions"<<std::endl;
   TString itemType;
   for (Int_t crt=5; crt<fNexpressions+5; crt++) {
      item = ExpressionItem(crt);
      if (item->IsCut())
         itemType = "kTRUE";
      else
         itemType = "kFALSE";
      out <<"   item = treeview->ExpressionItem("<<crt<<");"<<std::endl;
      out <<"   item->SetExpression("<<quote<<item->GetTrueName()<<quote
          <<", "<<quote<<item->GetAlias()<<quote<<", "<<itemType.Data()<<");"<<std::endl;
   }
   fSession->SaveSource(out);
   out <<"}"<<std::endl;
   out.close();
   printf("C++ Macro file: %s has been generated\n", fname);
   if (!lenfile) delete [] fname;
}

//______________________________________________________________________________
Bool_t TTreeViewer::SwitchTree(Int_t index)
{
   // Makes current the tree at a given index in the list.

   TTree *tree = (TTree *) fTreeList->At(index);
   if (!tree) {
      Warning("SwitchTree", "No tree found.");
      return kFALSE;
   }
   if ((tree == fTree) && (tree == fMappedTree)) return kFALSE;     // nothing to switch
   std::string command;
   if (tree != fTree) {
      command = "tv__tree = (TTree *) tv__tree_list->At";
      command += Form("(%i)",index);
      ExecuteCommand(command.c_str());
   }

   fTree = tree;
   fSlider->SetRange(0,fTree->GetEntries()-1);
   fSlider->SetPosition(0,fTree->GetEntries()-1);
   command = "Current Tree : ";
   command += fTree->GetName();
   fLbl2->SetText(new TGString(command.c_str()));
   fTreeHdr->Layout();
   MapSubwindows();
   Resize(GetDefaultSize());
   MapWindow();
   ///Resize();  //ia
   PrintEntries();
   return kTRUE;
}

//______________________________________________________________________________
void TTreeViewer::SetRecordName(const char *name)
{
   // Set record name

   fSession->SetRecordName(name);
}

//______________________________________________________________________________
void TTreeViewer::SetCurrentRecord(Long64_t entry)
{
   // Set current record

   fCombo->Select(entry);
}

//______________________________________________________________________________
void TTreeViewer::SetHistogramTitle(const char *title)
{
   // Set title of Histogram

   if (!gPad) return;
   TH1 *hist = (TH1*)gPad->GetListOfPrimitives()->FindObject(fBarHist->GetText());
   if (hist) {
      hist->SetTitle(title);
      gPad->Update();
   }
}
//______________________________________________________________________________
void TTreeViewer::SetUserCode(const char *code, Bool_t autoexec)
{
   // user defined command for current record

   TTVRecord *rec = fSession->GetCurrent();
   if (rec) rec->SetUserCode(code, autoexec);
}
//______________________________________________________________________________
void TTreeViewer::UpdateCombo()
{
   // Updates combo box to current session entries.

   TTVRecord *record;
   fCombo->RemoveEntries(0, 1000);
   for (Long64_t entry=0; entry<fSession->GetEntries(); entry++) {
      if ((record = fSession->GetRecord(entry)))
         fCombo->AddEntry(record->GetName(), entry);
   }
}

//______________________________________________________________________________
void TTreeViewer::UpdateRecord(const char *name)
{
   // Updates current record to new X, Y, Z items.

   fSession->UpdateRecord(name);
}

//______________________________________________________________________________
void TTreeViewer::DoRefresh()
{
   // This slot is called when button REFR is clicked

   fTree->Refresh();
   Float_t min = fSlider->GetMinPosition();
   Float_t max = (Float_t)fTree->GetEntries()-1;
   fSlider->SetRange(min,max);
   fSlider->SetPosition(min,max);
   ExecuteDraw();
}
 TTreeViewer.cxx:1
 TTreeViewer.cxx:2
 TTreeViewer.cxx:3
 TTreeViewer.cxx:4
 TTreeViewer.cxx:5
 TTreeViewer.cxx:6
 TTreeViewer.cxx:7
 TTreeViewer.cxx:8
 TTreeViewer.cxx:9
 TTreeViewer.cxx:10
 TTreeViewer.cxx:11
 TTreeViewer.cxx:12
 TTreeViewer.cxx:13
 TTreeViewer.cxx:14
 TTreeViewer.cxx:15
 TTreeViewer.cxx:16
 TTreeViewer.cxx:17
 TTreeViewer.cxx:18
 TTreeViewer.cxx:19
 TTreeViewer.cxx:20
 TTreeViewer.cxx:21
 TTreeViewer.cxx:22
 TTreeViewer.cxx:23
 TTreeViewer.cxx:24
 TTreeViewer.cxx:25
 TTreeViewer.cxx:26
 TTreeViewer.cxx:27
 TTreeViewer.cxx:28
 TTreeViewer.cxx:29
 TTreeViewer.cxx:30
 TTreeViewer.cxx:31
 TTreeViewer.cxx:32
 TTreeViewer.cxx:33
 TTreeViewer.cxx:34
 TTreeViewer.cxx:35
 TTreeViewer.cxx:36
 TTreeViewer.cxx:37
 TTreeViewer.cxx:38
 TTreeViewer.cxx:39
 TTreeViewer.cxx:40
 TTreeViewer.cxx:41
 TTreeViewer.cxx:42
 TTreeViewer.cxx:43
 TTreeViewer.cxx:44
 TTreeViewer.cxx:45
 TTreeViewer.cxx:46
 TTreeViewer.cxx:47
 TTreeViewer.cxx:48
 TTreeViewer.cxx:49
 TTreeViewer.cxx:50
 TTreeViewer.cxx:51
 TTreeViewer.cxx:52
 TTreeViewer.cxx:53
 TTreeViewer.cxx:54
 TTreeViewer.cxx:55
 TTreeViewer.cxx:56
 TTreeViewer.cxx:57
 TTreeViewer.cxx:58
 TTreeViewer.cxx:59
 TTreeViewer.cxx:60
 TTreeViewer.cxx:61
 TTreeViewer.cxx:62
 TTreeViewer.cxx:63
 TTreeViewer.cxx:64
 TTreeViewer.cxx:65
 TTreeViewer.cxx:66
 TTreeViewer.cxx:67
 TTreeViewer.cxx:68
 TTreeViewer.cxx:69
 TTreeViewer.cxx:70
 TTreeViewer.cxx:71
 TTreeViewer.cxx:72
 TTreeViewer.cxx:73
 TTreeViewer.cxx:74
 TTreeViewer.cxx:75
 TTreeViewer.cxx:76
 TTreeViewer.cxx:77
 TTreeViewer.cxx:78
 TTreeViewer.cxx:79
 TTreeViewer.cxx:80
 TTreeViewer.cxx:81
 TTreeViewer.cxx:82
 TTreeViewer.cxx:83
 TTreeViewer.cxx:84
 TTreeViewer.cxx:85
 TTreeViewer.cxx:86
 TTreeViewer.cxx:87
 TTreeViewer.cxx:88
 TTreeViewer.cxx:89
 TTreeViewer.cxx:90
 TTreeViewer.cxx:91
 TTreeViewer.cxx:92
 TTreeViewer.cxx:93
 TTreeViewer.cxx:94
 TTreeViewer.cxx:95
 TTreeViewer.cxx:96
 TTreeViewer.cxx:97
 TTreeViewer.cxx:98
 TTreeViewer.cxx:99
 TTreeViewer.cxx:100
 TTreeViewer.cxx:101
 TTreeViewer.cxx:102
 TTreeViewer.cxx:103
 TTreeViewer.cxx:104
 TTreeViewer.cxx:105
 TTreeViewer.cxx:106
 TTreeViewer.cxx:107
 TTreeViewer.cxx:108
 TTreeViewer.cxx:109
 TTreeViewer.cxx:110
 TTreeViewer.cxx:111
 TTreeViewer.cxx:112
 TTreeViewer.cxx:113
 TTreeViewer.cxx:114
 TTreeViewer.cxx:115
 TTreeViewer.cxx:116
 TTreeViewer.cxx:117
 TTreeViewer.cxx:118
 TTreeViewer.cxx:119
 TTreeViewer.cxx:120
 TTreeViewer.cxx:121
 TTreeViewer.cxx:122
 TTreeViewer.cxx:123
 TTreeViewer.cxx:124
 TTreeViewer.cxx:125
 TTreeViewer.cxx:126
 TTreeViewer.cxx:127
 TTreeViewer.cxx:128
 TTreeViewer.cxx:129
 TTreeViewer.cxx:130
 TTreeViewer.cxx:131
 TTreeViewer.cxx:132
 TTreeViewer.cxx:133
 TTreeViewer.cxx:134
 TTreeViewer.cxx:135
 TTreeViewer.cxx:136
 TTreeViewer.cxx:137
 TTreeViewer.cxx:138
 TTreeViewer.cxx:139
 TTreeViewer.cxx:140
 TTreeViewer.cxx:141
 TTreeViewer.cxx:142
 TTreeViewer.cxx:143
 TTreeViewer.cxx:144
 TTreeViewer.cxx:145
 TTreeViewer.cxx:146
 TTreeViewer.cxx:147
 TTreeViewer.cxx:148
 TTreeViewer.cxx:149
 TTreeViewer.cxx:150
 TTreeViewer.cxx:151
 TTreeViewer.cxx:152
 TTreeViewer.cxx:153
 TTreeViewer.cxx:154
 TTreeViewer.cxx:155
 TTreeViewer.cxx:156
 TTreeViewer.cxx:157
 TTreeViewer.cxx:158
 TTreeViewer.cxx:159
 TTreeViewer.cxx:160
 TTreeViewer.cxx:161
 TTreeViewer.cxx:162
 TTreeViewer.cxx:163
 TTreeViewer.cxx:164
 TTreeViewer.cxx:165
 TTreeViewer.cxx:166
 TTreeViewer.cxx:167
 TTreeViewer.cxx:168
 TTreeViewer.cxx:169
 TTreeViewer.cxx:170
 TTreeViewer.cxx:171
 TTreeViewer.cxx:172
 TTreeViewer.cxx:173
 TTreeViewer.cxx:174
 TTreeViewer.cxx:175
 TTreeViewer.cxx:176
 TTreeViewer.cxx:177
 TTreeViewer.cxx:178
 TTreeViewer.cxx:179
 TTreeViewer.cxx:180
 TTreeViewer.cxx:181
 TTreeViewer.cxx:182
 TTreeViewer.cxx:183
 TTreeViewer.cxx:184
 TTreeViewer.cxx:185
 TTreeViewer.cxx:186
 TTreeViewer.cxx:187
 TTreeViewer.cxx:188
 TTreeViewer.cxx:189
 TTreeViewer.cxx:190
 TTreeViewer.cxx:191
 TTreeViewer.cxx:192
 TTreeViewer.cxx:193
 TTreeViewer.cxx:194
 TTreeViewer.cxx:195
 TTreeViewer.cxx:196
 TTreeViewer.cxx:197
 TTreeViewer.cxx:198
 TTreeViewer.cxx:199
 TTreeViewer.cxx:200
 TTreeViewer.cxx:201
 TTreeViewer.cxx:202
 TTreeViewer.cxx:203
 TTreeViewer.cxx:204
 TTreeViewer.cxx:205
 TTreeViewer.cxx:206
 TTreeViewer.cxx:207
 TTreeViewer.cxx:208
 TTreeViewer.cxx:209
 TTreeViewer.cxx:210
 TTreeViewer.cxx:211
 TTreeViewer.cxx:212
 TTreeViewer.cxx:213
 TTreeViewer.cxx:214
 TTreeViewer.cxx:215
 TTreeViewer.cxx:216
 TTreeViewer.cxx:217
 TTreeViewer.cxx:218
 TTreeViewer.cxx:219
 TTreeViewer.cxx:220
 TTreeViewer.cxx:221
 TTreeViewer.cxx:222
 TTreeViewer.cxx:223
 TTreeViewer.cxx:224
 TTreeViewer.cxx:225
 TTreeViewer.cxx:226
 TTreeViewer.cxx:227
 TTreeViewer.cxx:228
 TTreeViewer.cxx:229
 TTreeViewer.cxx:230
 TTreeViewer.cxx:231
 TTreeViewer.cxx:232
 TTreeViewer.cxx:233
 TTreeViewer.cxx:234
 TTreeViewer.cxx:235
 TTreeViewer.cxx:236
 TTreeViewer.cxx:237
 TTreeViewer.cxx:238
 TTreeViewer.cxx:239
 TTreeViewer.cxx:240
 TTreeViewer.cxx:241
 TTreeViewer.cxx:242
 TTreeViewer.cxx:243
 TTreeViewer.cxx:244
 TTreeViewer.cxx:245
 TTreeViewer.cxx:246
 TTreeViewer.cxx:247
 TTreeViewer.cxx:248
 TTreeViewer.cxx:249
 TTreeViewer.cxx:250
 TTreeViewer.cxx:251
 TTreeViewer.cxx:252
 TTreeViewer.cxx:253
 TTreeViewer.cxx:254
 TTreeViewer.cxx:255
 TTreeViewer.cxx:256
 TTreeViewer.cxx:257
 TTreeViewer.cxx:258
 TTreeViewer.cxx:259
 TTreeViewer.cxx:260
 TTreeViewer.cxx:261
 TTreeViewer.cxx:262
 TTreeViewer.cxx:263
 TTreeViewer.cxx:264
 TTreeViewer.cxx:265
 TTreeViewer.cxx:266
 TTreeViewer.cxx:267
 TTreeViewer.cxx:268
 TTreeViewer.cxx:269
 TTreeViewer.cxx:270
 TTreeViewer.cxx:271
 TTreeViewer.cxx:272
 TTreeViewer.cxx:273
 TTreeViewer.cxx:274
 TTreeViewer.cxx:275
 TTreeViewer.cxx:276
 TTreeViewer.cxx:277
 TTreeViewer.cxx:278
 TTreeViewer.cxx:279
 TTreeViewer.cxx:280
 TTreeViewer.cxx:281
 TTreeViewer.cxx:282
 TTreeViewer.cxx:283
 TTreeViewer.cxx:284
 TTreeViewer.cxx:285
 TTreeViewer.cxx:286
 TTreeViewer.cxx:287
 TTreeViewer.cxx:288
 TTreeViewer.cxx:289
 TTreeViewer.cxx:290
 TTreeViewer.cxx:291
 TTreeViewer.cxx:292
 TTreeViewer.cxx:293
 TTreeViewer.cxx:294
 TTreeViewer.cxx:295
 TTreeViewer.cxx:296
 TTreeViewer.cxx:297
 TTreeViewer.cxx:298
 TTreeViewer.cxx:299
 TTreeViewer.cxx:300
 TTreeViewer.cxx:301
 TTreeViewer.cxx:302
 TTreeViewer.cxx:303
 TTreeViewer.cxx:304
 TTreeViewer.cxx:305
 TTreeViewer.cxx:306
 TTreeViewer.cxx:307
 TTreeViewer.cxx:308
 TTreeViewer.cxx:309
 TTreeViewer.cxx:310
 TTreeViewer.cxx:311
 TTreeViewer.cxx:312
 TTreeViewer.cxx:313
 TTreeViewer.cxx:314
 TTreeViewer.cxx:315
 TTreeViewer.cxx:316
 TTreeViewer.cxx:317
 TTreeViewer.cxx:318
 TTreeViewer.cxx:319
 TTreeViewer.cxx:320
 TTreeViewer.cxx:321
 TTreeViewer.cxx:322
 TTreeViewer.cxx:323
 TTreeViewer.cxx:324
 TTreeViewer.cxx:325
 TTreeViewer.cxx:326
 TTreeViewer.cxx:327
 TTreeViewer.cxx:328
 TTreeViewer.cxx:329
 TTreeViewer.cxx:330
 TTreeViewer.cxx:331
 TTreeViewer.cxx:332
 TTreeViewer.cxx:333
 TTreeViewer.cxx:334
 TTreeViewer.cxx:335
 TTreeViewer.cxx:336
 TTreeViewer.cxx:337
 TTreeViewer.cxx:338
 TTreeViewer.cxx:339
 TTreeViewer.cxx:340
 TTreeViewer.cxx:341
 TTreeViewer.cxx:342
 TTreeViewer.cxx:343
 TTreeViewer.cxx:344
 TTreeViewer.cxx:345
 TTreeViewer.cxx:346
 TTreeViewer.cxx:347
 TTreeViewer.cxx:348
 TTreeViewer.cxx:349
 TTreeViewer.cxx:350
 TTreeViewer.cxx:351
 TTreeViewer.cxx:352
 TTreeViewer.cxx:353
 TTreeViewer.cxx:354
 TTreeViewer.cxx:355
 TTreeViewer.cxx:356
 TTreeViewer.cxx:357
 TTreeViewer.cxx:358
 TTreeViewer.cxx:359
 TTreeViewer.cxx:360
 TTreeViewer.cxx:361
 TTreeViewer.cxx:362
 TTreeViewer.cxx:363
 TTreeViewer.cxx:364
 TTreeViewer.cxx:365
 TTreeViewer.cxx:366
 TTreeViewer.cxx:367
 TTreeViewer.cxx:368
 TTreeViewer.cxx:369
 TTreeViewer.cxx:370
 TTreeViewer.cxx:371
 TTreeViewer.cxx:372
 TTreeViewer.cxx:373
 TTreeViewer.cxx:374
 TTreeViewer.cxx:375
 TTreeViewer.cxx:376
 TTreeViewer.cxx:377
 TTreeViewer.cxx:378
 TTreeViewer.cxx:379
 TTreeViewer.cxx:380
 TTreeViewer.cxx:381
 TTreeViewer.cxx:382
 TTreeViewer.cxx:383
 TTreeViewer.cxx:384
 TTreeViewer.cxx:385
 TTreeViewer.cxx:386
 TTreeViewer.cxx:387
 TTreeViewer.cxx:388
 TTreeViewer.cxx:389
 TTreeViewer.cxx:390
 TTreeViewer.cxx:391
 TTreeViewer.cxx:392
 TTreeViewer.cxx:393
 TTreeViewer.cxx:394
 TTreeViewer.cxx:395
 TTreeViewer.cxx:396
 TTreeViewer.cxx:397
 TTreeViewer.cxx:398
 TTreeViewer.cxx:399
 TTreeViewer.cxx:400
 TTreeViewer.cxx:401
 TTreeViewer.cxx:402
 TTreeViewer.cxx:403
 TTreeViewer.cxx:404
 TTreeViewer.cxx:405
 TTreeViewer.cxx:406
 TTreeViewer.cxx:407
 TTreeViewer.cxx:408
 TTreeViewer.cxx:409
 TTreeViewer.cxx:410
 TTreeViewer.cxx:411
 TTreeViewer.cxx:412
 TTreeViewer.cxx:413
 TTreeViewer.cxx:414
 TTreeViewer.cxx:415
 TTreeViewer.cxx:416
 TTreeViewer.cxx:417
 TTreeViewer.cxx:418
 TTreeViewer.cxx:419
 TTreeViewer.cxx:420
 TTreeViewer.cxx:421
 TTreeViewer.cxx:422
 TTreeViewer.cxx:423
 TTreeViewer.cxx:424
 TTreeViewer.cxx:425
 TTreeViewer.cxx:426
 TTreeViewer.cxx:427
 TTreeViewer.cxx:428
 TTreeViewer.cxx:429
 TTreeViewer.cxx:430
 TTreeViewer.cxx:431
 TTreeViewer.cxx:432
 TTreeViewer.cxx:433
 TTreeViewer.cxx:434
 TTreeViewer.cxx:435
 TTreeViewer.cxx:436
 TTreeViewer.cxx:437
 TTreeViewer.cxx:438
 TTreeViewer.cxx:439
 TTreeViewer.cxx:440
 TTreeViewer.cxx:441
 TTreeViewer.cxx:442
 TTreeViewer.cxx:443
 TTreeViewer.cxx:444
 TTreeViewer.cxx:445
 TTreeViewer.cxx:446
 TTreeViewer.cxx:447
 TTreeViewer.cxx:448
 TTreeViewer.cxx:449
 TTreeViewer.cxx:450
 TTreeViewer.cxx:451
 TTreeViewer.cxx:452
 TTreeViewer.cxx:453
 TTreeViewer.cxx:454
 TTreeViewer.cxx:455
 TTreeViewer.cxx:456
 TTreeViewer.cxx:457
 TTreeViewer.cxx:458
 TTreeViewer.cxx:459
 TTreeViewer.cxx:460
 TTreeViewer.cxx:461
 TTreeViewer.cxx:462
 TTreeViewer.cxx:463
 TTreeViewer.cxx:464
 TTreeViewer.cxx:465
 TTreeViewer.cxx:466
 TTreeViewer.cxx:467
 TTreeViewer.cxx:468
 TTreeViewer.cxx:469
 TTreeViewer.cxx:470
 TTreeViewer.cxx:471
 TTreeViewer.cxx:472
 TTreeViewer.cxx:473
 TTreeViewer.cxx:474
 TTreeViewer.cxx:475
 TTreeViewer.cxx:476
 TTreeViewer.cxx:477
 TTreeViewer.cxx:478
 TTreeViewer.cxx:479
 TTreeViewer.cxx:480
 TTreeViewer.cxx:481
 TTreeViewer.cxx:482
 TTreeViewer.cxx:483
 TTreeViewer.cxx:484
 TTreeViewer.cxx:485
 TTreeViewer.cxx:486
 TTreeViewer.cxx:487
 TTreeViewer.cxx:488
 TTreeViewer.cxx:489
 TTreeViewer.cxx:490
 TTreeViewer.cxx:491
 TTreeViewer.cxx:492
 TTreeViewer.cxx:493
 TTreeViewer.cxx:494
 TTreeViewer.cxx:495
 TTreeViewer.cxx:496
 TTreeViewer.cxx:497
 TTreeViewer.cxx:498
 TTreeViewer.cxx:499
 TTreeViewer.cxx:500
 TTreeViewer.cxx:501
 TTreeViewer.cxx:502
 TTreeViewer.cxx:503
 TTreeViewer.cxx:504
 TTreeViewer.cxx:505
 TTreeViewer.cxx:506
 TTreeViewer.cxx:507
 TTreeViewer.cxx:508
 TTreeViewer.cxx:509
 TTreeViewer.cxx:510
 TTreeViewer.cxx:511
 TTreeViewer.cxx:512
 TTreeViewer.cxx:513
 TTreeViewer.cxx:514
 TTreeViewer.cxx:515
 TTreeViewer.cxx:516
 TTreeViewer.cxx:517
 TTreeViewer.cxx:518
 TTreeViewer.cxx:519
 TTreeViewer.cxx:520
 TTreeViewer.cxx:521
 TTreeViewer.cxx:522
 TTreeViewer.cxx:523
 TTreeViewer.cxx:524
 TTreeViewer.cxx:525
 TTreeViewer.cxx:526
 TTreeViewer.cxx:527
 TTreeViewer.cxx:528
 TTreeViewer.cxx:529
 TTreeViewer.cxx:530
 TTreeViewer.cxx:531
 TTreeViewer.cxx:532
 TTreeViewer.cxx:533
 TTreeViewer.cxx:534
 TTreeViewer.cxx:535
 TTreeViewer.cxx:536
 TTreeViewer.cxx:537
 TTreeViewer.cxx:538
 TTreeViewer.cxx:539
 TTreeViewer.cxx:540
 TTreeViewer.cxx:541
 TTreeViewer.cxx:542
 TTreeViewer.cxx:543
 TTreeViewer.cxx:544
 TTreeViewer.cxx:545
 TTreeViewer.cxx:546
 TTreeViewer.cxx:547
 TTreeViewer.cxx:548
 TTreeViewer.cxx:549
 TTreeViewer.cxx:550
 TTreeViewer.cxx:551
 TTreeViewer.cxx:552
 TTreeViewer.cxx:553
 TTreeViewer.cxx:554
 TTreeViewer.cxx:555
 TTreeViewer.cxx:556
 TTreeViewer.cxx:557
 TTreeViewer.cxx:558
 TTreeViewer.cxx:559
 TTreeViewer.cxx:560
 TTreeViewer.cxx:561
 TTreeViewer.cxx:562
 TTreeViewer.cxx:563
 TTreeViewer.cxx:564
 TTreeViewer.cxx:565
 TTreeViewer.cxx:566
 TTreeViewer.cxx:567
 TTreeViewer.cxx:568
 TTreeViewer.cxx:569
 TTreeViewer.cxx:570
 TTreeViewer.cxx:571
 TTreeViewer.cxx:572
 TTreeViewer.cxx:573
 TTreeViewer.cxx:574
 TTreeViewer.cxx:575
 TTreeViewer.cxx:576
 TTreeViewer.cxx:577
 TTreeViewer.cxx:578
 TTreeViewer.cxx:579
 TTreeViewer.cxx:580
 TTreeViewer.cxx:581
 TTreeViewer.cxx:582
 TTreeViewer.cxx:583
 TTreeViewer.cxx:584
 TTreeViewer.cxx:585
 TTreeViewer.cxx:586
 TTreeViewer.cxx:587
 TTreeViewer.cxx:588
 TTreeViewer.cxx:589
 TTreeViewer.cxx:590
 TTreeViewer.cxx:591
 TTreeViewer.cxx:592
 TTreeViewer.cxx:593
 TTreeViewer.cxx:594
 TTreeViewer.cxx:595
 TTreeViewer.cxx:596
 TTreeViewer.cxx:597
 TTreeViewer.cxx:598
 TTreeViewer.cxx:599
 TTreeViewer.cxx:600
 TTreeViewer.cxx:601
 TTreeViewer.cxx:602
 TTreeViewer.cxx:603
 TTreeViewer.cxx:604
 TTreeViewer.cxx:605
 TTreeViewer.cxx:606
 TTreeViewer.cxx:607
 TTreeViewer.cxx:608
 TTreeViewer.cxx:609
 TTreeViewer.cxx:610
 TTreeViewer.cxx:611
 TTreeViewer.cxx:612
 TTreeViewer.cxx:613
 TTreeViewer.cxx:614
 TTreeViewer.cxx:615
 TTreeViewer.cxx:616
 TTreeViewer.cxx:617
 TTreeViewer.cxx:618
 TTreeViewer.cxx:619
 TTreeViewer.cxx:620
 TTreeViewer.cxx:621
 TTreeViewer.cxx:622
 TTreeViewer.cxx:623
 TTreeViewer.cxx:624
 TTreeViewer.cxx:625
 TTreeViewer.cxx:626
 TTreeViewer.cxx:627
 TTreeViewer.cxx:628
 TTreeViewer.cxx:629
 TTreeViewer.cxx:630
 TTreeViewer.cxx:631
 TTreeViewer.cxx:632
 TTreeViewer.cxx:633
 TTreeViewer.cxx:634
 TTreeViewer.cxx:635
 TTreeViewer.cxx:636
 TTreeViewer.cxx:637
 TTreeViewer.cxx:638
 TTreeViewer.cxx:639
 TTreeViewer.cxx:640
 TTreeViewer.cxx:641
 TTreeViewer.cxx:642
 TTreeViewer.cxx:643
 TTreeViewer.cxx:644
 TTreeViewer.cxx:645
 TTreeViewer.cxx:646
 TTreeViewer.cxx:647
 TTreeViewer.cxx:648
 TTreeViewer.cxx:649
 TTreeViewer.cxx:650
 TTreeViewer.cxx:651
 TTreeViewer.cxx:652
 TTreeViewer.cxx:653
 TTreeViewer.cxx:654
 TTreeViewer.cxx:655
 TTreeViewer.cxx:656
 TTreeViewer.cxx:657
 TTreeViewer.cxx:658
 TTreeViewer.cxx:659
 TTreeViewer.cxx:660
 TTreeViewer.cxx:661
 TTreeViewer.cxx:662
 TTreeViewer.cxx:663
 TTreeViewer.cxx:664
 TTreeViewer.cxx:665
 TTreeViewer.cxx:666
 TTreeViewer.cxx:667
 TTreeViewer.cxx:668
 TTreeViewer.cxx:669
 TTreeViewer.cxx:670
 TTreeViewer.cxx:671
 TTreeViewer.cxx:672
 TTreeViewer.cxx:673
 TTreeViewer.cxx:674
 TTreeViewer.cxx:675
 TTreeViewer.cxx:676
 TTreeViewer.cxx:677
 TTreeViewer.cxx:678
 TTreeViewer.cxx:679
 TTreeViewer.cxx:680
 TTreeViewer.cxx:681
 TTreeViewer.cxx:682
 TTreeViewer.cxx:683
 TTreeViewer.cxx:684
 TTreeViewer.cxx:685
 TTreeViewer.cxx:686
 TTreeViewer.cxx:687
 TTreeViewer.cxx:688
 TTreeViewer.cxx:689
 TTreeViewer.cxx:690
 TTreeViewer.cxx:691
 TTreeViewer.cxx:692
 TTreeViewer.cxx:693
 TTreeViewer.cxx:694
 TTreeViewer.cxx:695
 TTreeViewer.cxx:696
 TTreeViewer.cxx:697
 TTreeViewer.cxx:698
 TTreeViewer.cxx:699
 TTreeViewer.cxx:700
 TTreeViewer.cxx:701
 TTreeViewer.cxx:702
 TTreeViewer.cxx:703
 TTreeViewer.cxx:704
 TTreeViewer.cxx:705
 TTreeViewer.cxx:706
 TTreeViewer.cxx:707
 TTreeViewer.cxx:708
 TTreeViewer.cxx:709
 TTreeViewer.cxx:710
 TTreeViewer.cxx:711
 TTreeViewer.cxx:712
 TTreeViewer.cxx:713
 TTreeViewer.cxx:714
 TTreeViewer.cxx:715
 TTreeViewer.cxx:716
 TTreeViewer.cxx:717
 TTreeViewer.cxx:718
 TTreeViewer.cxx:719
 TTreeViewer.cxx:720
 TTreeViewer.cxx:721
 TTreeViewer.cxx:722
 TTreeViewer.cxx:723
 TTreeViewer.cxx:724
 TTreeViewer.cxx:725
 TTreeViewer.cxx:726
 TTreeViewer.cxx:727
 TTreeViewer.cxx:728
 TTreeViewer.cxx:729
 TTreeViewer.cxx:730
 TTreeViewer.cxx:731
 TTreeViewer.cxx:732
 TTreeViewer.cxx:733
 TTreeViewer.cxx:734
 TTreeViewer.cxx:735
 TTreeViewer.cxx:736
 TTreeViewer.cxx:737
 TTreeViewer.cxx:738
 TTreeViewer.cxx:739
 TTreeViewer.cxx:740
 TTreeViewer.cxx:741
 TTreeViewer.cxx:742
 TTreeViewer.cxx:743
 TTreeViewer.cxx:744
 TTreeViewer.cxx:745
 TTreeViewer.cxx:746
 TTreeViewer.cxx:747
 TTreeViewer.cxx:748
 TTreeViewer.cxx:749
 TTreeViewer.cxx:750
 TTreeViewer.cxx:751
 TTreeViewer.cxx:752
 TTreeViewer.cxx:753
 TTreeViewer.cxx:754
 TTreeViewer.cxx:755
 TTreeViewer.cxx:756
 TTreeViewer.cxx:757
 TTreeViewer.cxx:758
 TTreeViewer.cxx:759
 TTreeViewer.cxx:760
 TTreeViewer.cxx:761
 TTreeViewer.cxx:762
 TTreeViewer.cxx:763
 TTreeViewer.cxx:764
 TTreeViewer.cxx:765
 TTreeViewer.cxx:766
 TTreeViewer.cxx:767
 TTreeViewer.cxx:768
 TTreeViewer.cxx:769
 TTreeViewer.cxx:770
 TTreeViewer.cxx:771
 TTreeViewer.cxx:772
 TTreeViewer.cxx:773
 TTreeViewer.cxx:774
 TTreeViewer.cxx:775
 TTreeViewer.cxx:776
 TTreeViewer.cxx:777
 TTreeViewer.cxx:778
 TTreeViewer.cxx:779
 TTreeViewer.cxx:780
 TTreeViewer.cxx:781
 TTreeViewer.cxx:782
 TTreeViewer.cxx:783
 TTreeViewer.cxx:784
 TTreeViewer.cxx:785
 TTreeViewer.cxx:786
 TTreeViewer.cxx:787
 TTreeViewer.cxx:788
 TTreeViewer.cxx:789
 TTreeViewer.cxx:790
 TTreeViewer.cxx:791
 TTreeViewer.cxx:792
 TTreeViewer.cxx:793
 TTreeViewer.cxx:794
 TTreeViewer.cxx:795
 TTreeViewer.cxx:796
 TTreeViewer.cxx:797
 TTreeViewer.cxx:798
 TTreeViewer.cxx:799
 TTreeViewer.cxx:800
 TTreeViewer.cxx:801
 TTreeViewer.cxx:802
 TTreeViewer.cxx:803
 TTreeViewer.cxx:804
 TTreeViewer.cxx:805
 TTreeViewer.cxx:806
 TTreeViewer.cxx:807
 TTreeViewer.cxx:808
 TTreeViewer.cxx:809
 TTreeViewer.cxx:810
 TTreeViewer.cxx:811
 TTreeViewer.cxx:812
 TTreeViewer.cxx:813
 TTreeViewer.cxx:814
 TTreeViewer.cxx:815
 TTreeViewer.cxx:816
 TTreeViewer.cxx:817
 TTreeViewer.cxx:818
 TTreeViewer.cxx:819
 TTreeViewer.cxx:820
 TTreeViewer.cxx:821
 TTreeViewer.cxx:822
 TTreeViewer.cxx:823
 TTreeViewer.cxx:824
 TTreeViewer.cxx:825
 TTreeViewer.cxx:826
 TTreeViewer.cxx:827
 TTreeViewer.cxx:828
 TTreeViewer.cxx:829
 TTreeViewer.cxx:830
 TTreeViewer.cxx:831
 TTreeViewer.cxx:832
 TTreeViewer.cxx:833
 TTreeViewer.cxx:834
 TTreeViewer.cxx:835
 TTreeViewer.cxx:836
 TTreeViewer.cxx:837
 TTreeViewer.cxx:838
 TTreeViewer.cxx:839
 TTreeViewer.cxx:840
 TTreeViewer.cxx:841
 TTreeViewer.cxx:842
 TTreeViewer.cxx:843
 TTreeViewer.cxx:844
 TTreeViewer.cxx:845
 TTreeViewer.cxx:846
 TTreeViewer.cxx:847
 TTreeViewer.cxx:848
 TTreeViewer.cxx:849
 TTreeViewer.cxx:850
 TTreeViewer.cxx:851
 TTreeViewer.cxx:852
 TTreeViewer.cxx:853
 TTreeViewer.cxx:854
 TTreeViewer.cxx:855
 TTreeViewer.cxx:856
 TTreeViewer.cxx:857
 TTreeViewer.cxx:858
 TTreeViewer.cxx:859
 TTreeViewer.cxx:860
 TTreeViewer.cxx:861
 TTreeViewer.cxx:862
 TTreeViewer.cxx:863
 TTreeViewer.cxx:864
 TTreeViewer.cxx:865
 TTreeViewer.cxx:866
 TTreeViewer.cxx:867
 TTreeViewer.cxx:868
 TTreeViewer.cxx:869
 TTreeViewer.cxx:870
 TTreeViewer.cxx:871
 TTreeViewer.cxx:872
 TTreeViewer.cxx:873
 TTreeViewer.cxx:874
 TTreeViewer.cxx:875
 TTreeViewer.cxx:876
 TTreeViewer.cxx:877
 TTreeViewer.cxx:878
 TTreeViewer.cxx:879
 TTreeViewer.cxx:880
 TTreeViewer.cxx:881
 TTreeViewer.cxx:882
 TTreeViewer.cxx:883
 TTreeViewer.cxx:884
 TTreeViewer.cxx:885
 TTreeViewer.cxx:886
 TTreeViewer.cxx:887
 TTreeViewer.cxx:888
 TTreeViewer.cxx:889
 TTreeViewer.cxx:890
 TTreeViewer.cxx:891
 TTreeViewer.cxx:892
 TTreeViewer.cxx:893
 TTreeViewer.cxx:894
 TTreeViewer.cxx:895
 TTreeViewer.cxx:896
 TTreeViewer.cxx:897
 TTreeViewer.cxx:898
 TTreeViewer.cxx:899
 TTreeViewer.cxx:900
 TTreeViewer.cxx:901
 TTreeViewer.cxx:902
 TTreeViewer.cxx:903
 TTreeViewer.cxx:904
 TTreeViewer.cxx:905
 TTreeViewer.cxx:906
 TTreeViewer.cxx:907
 TTreeViewer.cxx:908
 TTreeViewer.cxx:909
 TTreeViewer.cxx:910
 TTreeViewer.cxx:911
 TTreeViewer.cxx:912
 TTreeViewer.cxx:913
 TTreeViewer.cxx:914
 TTreeViewer.cxx:915
 TTreeViewer.cxx:916
 TTreeViewer.cxx:917
 TTreeViewer.cxx:918
 TTreeViewer.cxx:919
 TTreeViewer.cxx:920
 TTreeViewer.cxx:921
 TTreeViewer.cxx:922
 TTreeViewer.cxx:923
 TTreeViewer.cxx:924
 TTreeViewer.cxx:925
 TTreeViewer.cxx:926
 TTreeViewer.cxx:927
 TTreeViewer.cxx:928
 TTreeViewer.cxx:929
 TTreeViewer.cxx:930
 TTreeViewer.cxx:931
 TTreeViewer.cxx:932
 TTreeViewer.cxx:933
 TTreeViewer.cxx:934
 TTreeViewer.cxx:935
 TTreeViewer.cxx:936
 TTreeViewer.cxx:937
 TTreeViewer.cxx:938
 TTreeViewer.cxx:939
 TTreeViewer.cxx:940
 TTreeViewer.cxx:941
 TTreeViewer.cxx:942
 TTreeViewer.cxx:943
 TTreeViewer.cxx:944
 TTreeViewer.cxx:945
 TTreeViewer.cxx:946
 TTreeViewer.cxx:947
 TTreeViewer.cxx:948
 TTreeViewer.cxx:949
 TTreeViewer.cxx:950
 TTreeViewer.cxx:951
 TTreeViewer.cxx:952
 TTreeViewer.cxx:953
 TTreeViewer.cxx:954
 TTreeViewer.cxx:955
 TTreeViewer.cxx:956
 TTreeViewer.cxx:957
 TTreeViewer.cxx:958
 TTreeViewer.cxx:959
 TTreeViewer.cxx:960
 TTreeViewer.cxx:961
 TTreeViewer.cxx:962
 TTreeViewer.cxx:963
 TTreeViewer.cxx:964
 TTreeViewer.cxx:965
 TTreeViewer.cxx:966
 TTreeViewer.cxx:967
 TTreeViewer.cxx:968
 TTreeViewer.cxx:969
 TTreeViewer.cxx:970
 TTreeViewer.cxx:971
 TTreeViewer.cxx:972
 TTreeViewer.cxx:973
 TTreeViewer.cxx:974
 TTreeViewer.cxx:975
 TTreeViewer.cxx:976
 TTreeViewer.cxx:977
 TTreeViewer.cxx:978
 TTreeViewer.cxx:979
 TTreeViewer.cxx:980
 TTreeViewer.cxx:981
 TTreeViewer.cxx:982
 TTreeViewer.cxx:983
 TTreeViewer.cxx:984
 TTreeViewer.cxx:985
 TTreeViewer.cxx:986
 TTreeViewer.cxx:987
 TTreeViewer.cxx:988
 TTreeViewer.cxx:989
 TTreeViewer.cxx:990
 TTreeViewer.cxx:991
 TTreeViewer.cxx:992
 TTreeViewer.cxx:993
 TTreeViewer.cxx:994
 TTreeViewer.cxx:995
 TTreeViewer.cxx:996
 TTreeViewer.cxx:997
 TTreeViewer.cxx:998
 TTreeViewer.cxx:999
 TTreeViewer.cxx:1000
 TTreeViewer.cxx:1001
 TTreeViewer.cxx:1002
 TTreeViewer.cxx:1003
 TTreeViewer.cxx:1004
 TTreeViewer.cxx:1005
 TTreeViewer.cxx:1006
 TTreeViewer.cxx:1007
 TTreeViewer.cxx:1008
 TTreeViewer.cxx:1009
 TTreeViewer.cxx:1010
 TTreeViewer.cxx:1011
 TTreeViewer.cxx:1012
 TTreeViewer.cxx:1013
 TTreeViewer.cxx:1014
 TTreeViewer.cxx:1015
 TTreeViewer.cxx:1016
 TTreeViewer.cxx:1017
 TTreeViewer.cxx:1018
 TTreeViewer.cxx:1019
 TTreeViewer.cxx:1020
 TTreeViewer.cxx:1021
 TTreeViewer.cxx:1022
 TTreeViewer.cxx:1023
 TTreeViewer.cxx:1024
 TTreeViewer.cxx:1025
 TTreeViewer.cxx:1026
 TTreeViewer.cxx:1027
 TTreeViewer.cxx:1028
 TTreeViewer.cxx:1029
 TTreeViewer.cxx:1030
 TTreeViewer.cxx:1031
 TTreeViewer.cxx:1032
 TTreeViewer.cxx:1033
 TTreeViewer.cxx:1034
 TTreeViewer.cxx:1035
 TTreeViewer.cxx:1036
 TTreeViewer.cxx:1037
 TTreeViewer.cxx:1038
 TTreeViewer.cxx:1039
 TTreeViewer.cxx:1040
 TTreeViewer.cxx:1041
 TTreeViewer.cxx:1042
 TTreeViewer.cxx:1043
 TTreeViewer.cxx:1044
 TTreeViewer.cxx:1045
 TTreeViewer.cxx:1046
 TTreeViewer.cxx:1047
 TTreeViewer.cxx:1048
 TTreeViewer.cxx:1049
 TTreeViewer.cxx:1050
 TTreeViewer.cxx:1051
 TTreeViewer.cxx:1052
 TTreeViewer.cxx:1053
 TTreeViewer.cxx:1054
 TTreeViewer.cxx:1055
 TTreeViewer.cxx:1056
 TTreeViewer.cxx:1057
 TTreeViewer.cxx:1058
 TTreeViewer.cxx:1059
 TTreeViewer.cxx:1060
 TTreeViewer.cxx:1061
 TTreeViewer.cxx:1062
 TTreeViewer.cxx:1063
 TTreeViewer.cxx:1064
 TTreeViewer.cxx:1065
 TTreeViewer.cxx:1066
 TTreeViewer.cxx:1067
 TTreeViewer.cxx:1068
 TTreeViewer.cxx:1069
 TTreeViewer.cxx:1070
 TTreeViewer.cxx:1071
 TTreeViewer.cxx:1072
 TTreeViewer.cxx:1073
 TTreeViewer.cxx:1074
 TTreeViewer.cxx:1075
 TTreeViewer.cxx:1076
 TTreeViewer.cxx:1077
 TTreeViewer.cxx:1078
 TTreeViewer.cxx:1079
 TTreeViewer.cxx:1080
 TTreeViewer.cxx:1081
 TTreeViewer.cxx:1082
 TTreeViewer.cxx:1083
 TTreeViewer.cxx:1084
 TTreeViewer.cxx:1085
 TTreeViewer.cxx:1086
 TTreeViewer.cxx:1087
 TTreeViewer.cxx:1088
 TTreeViewer.cxx:1089
 TTreeViewer.cxx:1090
 TTreeViewer.cxx:1091
 TTreeViewer.cxx:1092
 TTreeViewer.cxx:1093
 TTreeViewer.cxx:1094
 TTreeViewer.cxx:1095
 TTreeViewer.cxx:1096
 TTreeViewer.cxx:1097
 TTreeViewer.cxx:1098
 TTreeViewer.cxx:1099
 TTreeViewer.cxx:1100
 TTreeViewer.cxx:1101
 TTreeViewer.cxx:1102
 TTreeViewer.cxx:1103
 TTreeViewer.cxx:1104
 TTreeViewer.cxx:1105
 TTreeViewer.cxx:1106
 TTreeViewer.cxx:1107
 TTreeViewer.cxx:1108
 TTreeViewer.cxx:1109
 TTreeViewer.cxx:1110
 TTreeViewer.cxx:1111
 TTreeViewer.cxx:1112
 TTreeViewer.cxx:1113
 TTreeViewer.cxx:1114
 TTreeViewer.cxx:1115
 TTreeViewer.cxx:1116
 TTreeViewer.cxx:1117
 TTreeViewer.cxx:1118
 TTreeViewer.cxx:1119
 TTreeViewer.cxx:1120
 TTreeViewer.cxx:1121
 TTreeViewer.cxx:1122
 TTreeViewer.cxx:1123
 TTreeViewer.cxx:1124
 TTreeViewer.cxx:1125
 TTreeViewer.cxx:1126
 TTreeViewer.cxx:1127
 TTreeViewer.cxx:1128
 TTreeViewer.cxx:1129
 TTreeViewer.cxx:1130
 TTreeViewer.cxx:1131
 TTreeViewer.cxx:1132
 TTreeViewer.cxx:1133
 TTreeViewer.cxx:1134
 TTreeViewer.cxx:1135
 TTreeViewer.cxx:1136
 TTreeViewer.cxx:1137
 TTreeViewer.cxx:1138
 TTreeViewer.cxx:1139
 TTreeViewer.cxx:1140
 TTreeViewer.cxx:1141
 TTreeViewer.cxx:1142
 TTreeViewer.cxx:1143
 TTreeViewer.cxx:1144
 TTreeViewer.cxx:1145
 TTreeViewer.cxx:1146
 TTreeViewer.cxx:1147
 TTreeViewer.cxx:1148
 TTreeViewer.cxx:1149
 TTreeViewer.cxx:1150
 TTreeViewer.cxx:1151
 TTreeViewer.cxx:1152
 TTreeViewer.cxx:1153
 TTreeViewer.cxx:1154
 TTreeViewer.cxx:1155
 TTreeViewer.cxx:1156
 TTreeViewer.cxx:1157
 TTreeViewer.cxx:1158
 TTreeViewer.cxx:1159
 TTreeViewer.cxx:1160
 TTreeViewer.cxx:1161
 TTreeViewer.cxx:1162
 TTreeViewer.cxx:1163
 TTreeViewer.cxx:1164
 TTreeViewer.cxx:1165
 TTreeViewer.cxx:1166
 TTreeViewer.cxx:1167
 TTreeViewer.cxx:1168
 TTreeViewer.cxx:1169
 TTreeViewer.cxx:1170
 TTreeViewer.cxx:1171
 TTreeViewer.cxx:1172
 TTreeViewer.cxx:1173
 TTreeViewer.cxx:1174
 TTreeViewer.cxx:1175
 TTreeViewer.cxx:1176
 TTreeViewer.cxx:1177
 TTreeViewer.cxx:1178
 TTreeViewer.cxx:1179
 TTreeViewer.cxx:1180
 TTreeViewer.cxx:1181
 TTreeViewer.cxx:1182
 TTreeViewer.cxx:1183
 TTreeViewer.cxx:1184
 TTreeViewer.cxx:1185
 TTreeViewer.cxx:1186
 TTreeViewer.cxx:1187
 TTreeViewer.cxx:1188
 TTreeViewer.cxx:1189
 TTreeViewer.cxx:1190
 TTreeViewer.cxx:1191
 TTreeViewer.cxx:1192
 TTreeViewer.cxx:1193
 TTreeViewer.cxx:1194
 TTreeViewer.cxx:1195
 TTreeViewer.cxx:1196
 TTreeViewer.cxx:1197
 TTreeViewer.cxx:1198
 TTreeViewer.cxx:1199
 TTreeViewer.cxx:1200
 TTreeViewer.cxx:1201
 TTreeViewer.cxx:1202
 TTreeViewer.cxx:1203
 TTreeViewer.cxx:1204
 TTreeViewer.cxx:1205
 TTreeViewer.cxx:1206
 TTreeViewer.cxx:1207
 TTreeViewer.cxx:1208
 TTreeViewer.cxx:1209
 TTreeViewer.cxx:1210
 TTreeViewer.cxx:1211
 TTreeViewer.cxx:1212
 TTreeViewer.cxx:1213
 TTreeViewer.cxx:1214
 TTreeViewer.cxx:1215
 TTreeViewer.cxx:1216
 TTreeViewer.cxx:1217
 TTreeViewer.cxx:1218
 TTreeViewer.cxx:1219
 TTreeViewer.cxx:1220
 TTreeViewer.cxx:1221
 TTreeViewer.cxx:1222
 TTreeViewer.cxx:1223
 TTreeViewer.cxx:1224
 TTreeViewer.cxx:1225
 TTreeViewer.cxx:1226
 TTreeViewer.cxx:1227
 TTreeViewer.cxx:1228
 TTreeViewer.cxx:1229
 TTreeViewer.cxx:1230
 TTreeViewer.cxx:1231
 TTreeViewer.cxx:1232
 TTreeViewer.cxx:1233
 TTreeViewer.cxx:1234
 TTreeViewer.cxx:1235
 TTreeViewer.cxx:1236
 TTreeViewer.cxx:1237
 TTreeViewer.cxx:1238
 TTreeViewer.cxx:1239
 TTreeViewer.cxx:1240
 TTreeViewer.cxx:1241
 TTreeViewer.cxx:1242
 TTreeViewer.cxx:1243
 TTreeViewer.cxx:1244
 TTreeViewer.cxx:1245
 TTreeViewer.cxx:1246
 TTreeViewer.cxx:1247
 TTreeViewer.cxx:1248
 TTreeViewer.cxx:1249
 TTreeViewer.cxx:1250
 TTreeViewer.cxx:1251
 TTreeViewer.cxx:1252
 TTreeViewer.cxx:1253
 TTreeViewer.cxx:1254
 TTreeViewer.cxx:1255
 TTreeViewer.cxx:1256
 TTreeViewer.cxx:1257
 TTreeViewer.cxx:1258
 TTreeViewer.cxx:1259
 TTreeViewer.cxx:1260
 TTreeViewer.cxx:1261
 TTreeViewer.cxx:1262
 TTreeViewer.cxx:1263
 TTreeViewer.cxx:1264
 TTreeViewer.cxx:1265
 TTreeViewer.cxx:1266
 TTreeViewer.cxx:1267
 TTreeViewer.cxx:1268
 TTreeViewer.cxx:1269
 TTreeViewer.cxx:1270
 TTreeViewer.cxx:1271
 TTreeViewer.cxx:1272
 TTreeViewer.cxx:1273
 TTreeViewer.cxx:1274
 TTreeViewer.cxx:1275
 TTreeViewer.cxx:1276
 TTreeViewer.cxx:1277
 TTreeViewer.cxx:1278
 TTreeViewer.cxx:1279
 TTreeViewer.cxx:1280
 TTreeViewer.cxx:1281
 TTreeViewer.cxx:1282
 TTreeViewer.cxx:1283
 TTreeViewer.cxx:1284
 TTreeViewer.cxx:1285
 TTreeViewer.cxx:1286
 TTreeViewer.cxx:1287
 TTreeViewer.cxx:1288
 TTreeViewer.cxx:1289
 TTreeViewer.cxx:1290
 TTreeViewer.cxx:1291
 TTreeViewer.cxx:1292
 TTreeViewer.cxx:1293
 TTreeViewer.cxx:1294
 TTreeViewer.cxx:1295
 TTreeViewer.cxx:1296
 TTreeViewer.cxx:1297
 TTreeViewer.cxx:1298
 TTreeViewer.cxx:1299
 TTreeViewer.cxx:1300
 TTreeViewer.cxx:1301
 TTreeViewer.cxx:1302
 TTreeViewer.cxx:1303
 TTreeViewer.cxx:1304
 TTreeViewer.cxx:1305
 TTreeViewer.cxx:1306
 TTreeViewer.cxx:1307
 TTreeViewer.cxx:1308
 TTreeViewer.cxx:1309
 TTreeViewer.cxx:1310
 TTreeViewer.cxx:1311
 TTreeViewer.cxx:1312
 TTreeViewer.cxx:1313
 TTreeViewer.cxx:1314
 TTreeViewer.cxx:1315
 TTreeViewer.cxx:1316
 TTreeViewer.cxx:1317
 TTreeViewer.cxx:1318
 TTreeViewer.cxx:1319
 TTreeViewer.cxx:1320
 TTreeViewer.cxx:1321
 TTreeViewer.cxx:1322
 TTreeViewer.cxx:1323
 TTreeViewer.cxx:1324
 TTreeViewer.cxx:1325
 TTreeViewer.cxx:1326
 TTreeViewer.cxx:1327
 TTreeViewer.cxx:1328
 TTreeViewer.cxx:1329
 TTreeViewer.cxx:1330
 TTreeViewer.cxx:1331
 TTreeViewer.cxx:1332
 TTreeViewer.cxx:1333
 TTreeViewer.cxx:1334
 TTreeViewer.cxx:1335
 TTreeViewer.cxx:1336
 TTreeViewer.cxx:1337
 TTreeViewer.cxx:1338
 TTreeViewer.cxx:1339
 TTreeViewer.cxx:1340
 TTreeViewer.cxx:1341
 TTreeViewer.cxx:1342
 TTreeViewer.cxx:1343
 TTreeViewer.cxx:1344
 TTreeViewer.cxx:1345
 TTreeViewer.cxx:1346
 TTreeViewer.cxx:1347
 TTreeViewer.cxx:1348
 TTreeViewer.cxx:1349
 TTreeViewer.cxx:1350
 TTreeViewer.cxx:1351
 TTreeViewer.cxx:1352
 TTreeViewer.cxx:1353
 TTreeViewer.cxx:1354
 TTreeViewer.cxx:1355
 TTreeViewer.cxx:1356
 TTreeViewer.cxx:1357
 TTreeViewer.cxx:1358
 TTreeViewer.cxx:1359
 TTreeViewer.cxx:1360
 TTreeViewer.cxx:1361
 TTreeViewer.cxx:1362
 TTreeViewer.cxx:1363
 TTreeViewer.cxx:1364
 TTreeViewer.cxx:1365
 TTreeViewer.cxx:1366
 TTreeViewer.cxx:1367
 TTreeViewer.cxx:1368
 TTreeViewer.cxx:1369
 TTreeViewer.cxx:1370
 TTreeViewer.cxx:1371
 TTreeViewer.cxx:1372
 TTreeViewer.cxx:1373
 TTreeViewer.cxx:1374
 TTreeViewer.cxx:1375
 TTreeViewer.cxx:1376
 TTreeViewer.cxx:1377
 TTreeViewer.cxx:1378
 TTreeViewer.cxx:1379
 TTreeViewer.cxx:1380
 TTreeViewer.cxx:1381
 TTreeViewer.cxx:1382
 TTreeViewer.cxx:1383
 TTreeViewer.cxx:1384
 TTreeViewer.cxx:1385
 TTreeViewer.cxx:1386
 TTreeViewer.cxx:1387
 TTreeViewer.cxx:1388
 TTreeViewer.cxx:1389
 TTreeViewer.cxx:1390
 TTreeViewer.cxx:1391
 TTreeViewer.cxx:1392
 TTreeViewer.cxx:1393
 TTreeViewer.cxx:1394
 TTreeViewer.cxx:1395
 TTreeViewer.cxx:1396
 TTreeViewer.cxx:1397
 TTreeViewer.cxx:1398
 TTreeViewer.cxx:1399
 TTreeViewer.cxx:1400
 TTreeViewer.cxx:1401
 TTreeViewer.cxx:1402
 TTreeViewer.cxx:1403
 TTreeViewer.cxx:1404
 TTreeViewer.cxx:1405
 TTreeViewer.cxx:1406
 TTreeViewer.cxx:1407
 TTreeViewer.cxx:1408
 TTreeViewer.cxx:1409
 TTreeViewer.cxx:1410
 TTreeViewer.cxx:1411
 TTreeViewer.cxx:1412
 TTreeViewer.cxx:1413
 TTreeViewer.cxx:1414
 TTreeViewer.cxx:1415
 TTreeViewer.cxx:1416
 TTreeViewer.cxx:1417
 TTreeViewer.cxx:1418
 TTreeViewer.cxx:1419
 TTreeViewer.cxx:1420
 TTreeViewer.cxx:1421
 TTreeViewer.cxx:1422
 TTreeViewer.cxx:1423
 TTreeViewer.cxx:1424
 TTreeViewer.cxx:1425
 TTreeViewer.cxx:1426
 TTreeViewer.cxx:1427
 TTreeViewer.cxx:1428
 TTreeViewer.cxx:1429
 TTreeViewer.cxx:1430
 TTreeViewer.cxx:1431
 TTreeViewer.cxx:1432
 TTreeViewer.cxx:1433
 TTreeViewer.cxx:1434
 TTreeViewer.cxx:1435
 TTreeViewer.cxx:1436
 TTreeViewer.cxx:1437
 TTreeViewer.cxx:1438
 TTreeViewer.cxx:1439
 TTreeViewer.cxx:1440
 TTreeViewer.cxx:1441
 TTreeViewer.cxx:1442
 TTreeViewer.cxx:1443
 TTreeViewer.cxx:1444
 TTreeViewer.cxx:1445
 TTreeViewer.cxx:1446
 TTreeViewer.cxx:1447
 TTreeViewer.cxx:1448
 TTreeViewer.cxx:1449
 TTreeViewer.cxx:1450
 TTreeViewer.cxx:1451
 TTreeViewer.cxx:1452
 TTreeViewer.cxx:1453
 TTreeViewer.cxx:1454
 TTreeViewer.cxx:1455
 TTreeViewer.cxx:1456
 TTreeViewer.cxx:1457
 TTreeViewer.cxx:1458
 TTreeViewer.cxx:1459
 TTreeViewer.cxx:1460
 TTreeViewer.cxx:1461
 TTreeViewer.cxx:1462
 TTreeViewer.cxx:1463
 TTreeViewer.cxx:1464
 TTreeViewer.cxx:1465
 TTreeViewer.cxx:1466
 TTreeViewer.cxx:1467
 TTreeViewer.cxx:1468
 TTreeViewer.cxx:1469
 TTreeViewer.cxx:1470
 TTreeViewer.cxx:1471
 TTreeViewer.cxx:1472
 TTreeViewer.cxx:1473
 TTreeViewer.cxx:1474
 TTreeViewer.cxx:1475
 TTreeViewer.cxx:1476
 TTreeViewer.cxx:1477
 TTreeViewer.cxx:1478
 TTreeViewer.cxx:1479
 TTreeViewer.cxx:1480
 TTreeViewer.cxx:1481
 TTreeViewer.cxx:1482
 TTreeViewer.cxx:1483
 TTreeViewer.cxx:1484
 TTreeViewer.cxx:1485
 TTreeViewer.cxx:1486
 TTreeViewer.cxx:1487
 TTreeViewer.cxx:1488
 TTreeViewer.cxx:1489
 TTreeViewer.cxx:1490
 TTreeViewer.cxx:1491
 TTreeViewer.cxx:1492
 TTreeViewer.cxx:1493
 TTreeViewer.cxx:1494
 TTreeViewer.cxx:1495
 TTreeViewer.cxx:1496
 TTreeViewer.cxx:1497
 TTreeViewer.cxx:1498
 TTreeViewer.cxx:1499
 TTreeViewer.cxx:1500
 TTreeViewer.cxx:1501
 TTreeViewer.cxx:1502
 TTreeViewer.cxx:1503
 TTreeViewer.cxx:1504
 TTreeViewer.cxx:1505
 TTreeViewer.cxx:1506
 TTreeViewer.cxx:1507
 TTreeViewer.cxx:1508
 TTreeViewer.cxx:1509
 TTreeViewer.cxx:1510
 TTreeViewer.cxx:1511
 TTreeViewer.cxx:1512
 TTreeViewer.cxx:1513
 TTreeViewer.cxx:1514
 TTreeViewer.cxx:1515
 TTreeViewer.cxx:1516
 TTreeViewer.cxx:1517
 TTreeViewer.cxx:1518
 TTreeViewer.cxx:1519
 TTreeViewer.cxx:1520
 TTreeViewer.cxx:1521
 TTreeViewer.cxx:1522
 TTreeViewer.cxx:1523
 TTreeViewer.cxx:1524
 TTreeViewer.cxx:1525
 TTreeViewer.cxx:1526
 TTreeViewer.cxx:1527
 TTreeViewer.cxx:1528
 TTreeViewer.cxx:1529
 TTreeViewer.cxx:1530
 TTreeViewer.cxx:1531
 TTreeViewer.cxx:1532
 TTreeViewer.cxx:1533
 TTreeViewer.cxx:1534
 TTreeViewer.cxx:1535
 TTreeViewer.cxx:1536
 TTreeViewer.cxx:1537
 TTreeViewer.cxx:1538
 TTreeViewer.cxx:1539
 TTreeViewer.cxx:1540
 TTreeViewer.cxx:1541
 TTreeViewer.cxx:1542
 TTreeViewer.cxx:1543
 TTreeViewer.cxx:1544
 TTreeViewer.cxx:1545
 TTreeViewer.cxx:1546
 TTreeViewer.cxx:1547
 TTreeViewer.cxx:1548
 TTreeViewer.cxx:1549
 TTreeViewer.cxx:1550
 TTreeViewer.cxx:1551
 TTreeViewer.cxx:1552
 TTreeViewer.cxx:1553
 TTreeViewer.cxx:1554
 TTreeViewer.cxx:1555
 TTreeViewer.cxx:1556
 TTreeViewer.cxx:1557
 TTreeViewer.cxx:1558
 TTreeViewer.cxx:1559
 TTreeViewer.cxx:1560
 TTreeViewer.cxx:1561
 TTreeViewer.cxx:1562
 TTreeViewer.cxx:1563
 TTreeViewer.cxx:1564
 TTreeViewer.cxx:1565
 TTreeViewer.cxx:1566
 TTreeViewer.cxx:1567
 TTreeViewer.cxx:1568
 TTreeViewer.cxx:1569
 TTreeViewer.cxx:1570
 TTreeViewer.cxx:1571
 TTreeViewer.cxx:1572
 TTreeViewer.cxx:1573
 TTreeViewer.cxx:1574
 TTreeViewer.cxx:1575
 TTreeViewer.cxx:1576
 TTreeViewer.cxx:1577
 TTreeViewer.cxx:1578
 TTreeViewer.cxx:1579
 TTreeViewer.cxx:1580
 TTreeViewer.cxx:1581
 TTreeViewer.cxx:1582
 TTreeViewer.cxx:1583
 TTreeViewer.cxx:1584
 TTreeViewer.cxx:1585
 TTreeViewer.cxx:1586
 TTreeViewer.cxx:1587
 TTreeViewer.cxx:1588
 TTreeViewer.cxx:1589
 TTreeViewer.cxx:1590
 TTreeViewer.cxx:1591
 TTreeViewer.cxx:1592
 TTreeViewer.cxx:1593
 TTreeViewer.cxx:1594
 TTreeViewer.cxx:1595
 TTreeViewer.cxx:1596
 TTreeViewer.cxx:1597
 TTreeViewer.cxx:1598
 TTreeViewer.cxx:1599
 TTreeViewer.cxx:1600
 TTreeViewer.cxx:1601
 TTreeViewer.cxx:1602
 TTreeViewer.cxx:1603
 TTreeViewer.cxx:1604
 TTreeViewer.cxx:1605
 TTreeViewer.cxx:1606
 TTreeViewer.cxx:1607
 TTreeViewer.cxx:1608
 TTreeViewer.cxx:1609
 TTreeViewer.cxx:1610
 TTreeViewer.cxx:1611
 TTreeViewer.cxx:1612
 TTreeViewer.cxx:1613
 TTreeViewer.cxx:1614
 TTreeViewer.cxx:1615
 TTreeViewer.cxx:1616
 TTreeViewer.cxx:1617
 TTreeViewer.cxx:1618
 TTreeViewer.cxx:1619
 TTreeViewer.cxx:1620
 TTreeViewer.cxx:1621
 TTreeViewer.cxx:1622
 TTreeViewer.cxx:1623
 TTreeViewer.cxx:1624
 TTreeViewer.cxx:1625
 TTreeViewer.cxx:1626
 TTreeViewer.cxx:1627
 TTreeViewer.cxx:1628
 TTreeViewer.cxx:1629
 TTreeViewer.cxx:1630
 TTreeViewer.cxx:1631
 TTreeViewer.cxx:1632
 TTreeViewer.cxx:1633
 TTreeViewer.cxx:1634
 TTreeViewer.cxx:1635
 TTreeViewer.cxx:1636
 TTreeViewer.cxx:1637
 TTreeViewer.cxx:1638
 TTreeViewer.cxx:1639
 TTreeViewer.cxx:1640
 TTreeViewer.cxx:1641
 TTreeViewer.cxx:1642
 TTreeViewer.cxx:1643
 TTreeViewer.cxx:1644
 TTreeViewer.cxx:1645
 TTreeViewer.cxx:1646
 TTreeViewer.cxx:1647
 TTreeViewer.cxx:1648
 TTreeViewer.cxx:1649
 TTreeViewer.cxx:1650
 TTreeViewer.cxx:1651
 TTreeViewer.cxx:1652
 TTreeViewer.cxx:1653
 TTreeViewer.cxx:1654
 TTreeViewer.cxx:1655
 TTreeViewer.cxx:1656
 TTreeViewer.cxx:1657
 TTreeViewer.cxx:1658
 TTreeViewer.cxx:1659
 TTreeViewer.cxx:1660
 TTreeViewer.cxx:1661
 TTreeViewer.cxx:1662
 TTreeViewer.cxx:1663
 TTreeViewer.cxx:1664
 TTreeViewer.cxx:1665
 TTreeViewer.cxx:1666
 TTreeViewer.cxx:1667
 TTreeViewer.cxx:1668
 TTreeViewer.cxx:1669
 TTreeViewer.cxx:1670
 TTreeViewer.cxx:1671
 TTreeViewer.cxx:1672
 TTreeViewer.cxx:1673
 TTreeViewer.cxx:1674
 TTreeViewer.cxx:1675
 TTreeViewer.cxx:1676
 TTreeViewer.cxx:1677
 TTreeViewer.cxx:1678
 TTreeViewer.cxx:1679
 TTreeViewer.cxx:1680
 TTreeViewer.cxx:1681
 TTreeViewer.cxx:1682
 TTreeViewer.cxx:1683
 TTreeViewer.cxx:1684
 TTreeViewer.cxx:1685
 TTreeViewer.cxx:1686
 TTreeViewer.cxx:1687
 TTreeViewer.cxx:1688
 TTreeViewer.cxx:1689
 TTreeViewer.cxx:1690
 TTreeViewer.cxx:1691
 TTreeViewer.cxx:1692
 TTreeViewer.cxx:1693
 TTreeViewer.cxx:1694
 TTreeViewer.cxx:1695
 TTreeViewer.cxx:1696
 TTreeViewer.cxx:1697
 TTreeViewer.cxx:1698
 TTreeViewer.cxx:1699
 TTreeViewer.cxx:1700
 TTreeViewer.cxx:1701
 TTreeViewer.cxx:1702
 TTreeViewer.cxx:1703
 TTreeViewer.cxx:1704
 TTreeViewer.cxx:1705
 TTreeViewer.cxx:1706
 TTreeViewer.cxx:1707
 TTreeViewer.cxx:1708
 TTreeViewer.cxx:1709
 TTreeViewer.cxx:1710
 TTreeViewer.cxx:1711
 TTreeViewer.cxx:1712
 TTreeViewer.cxx:1713
 TTreeViewer.cxx:1714
 TTreeViewer.cxx:1715
 TTreeViewer.cxx:1716
 TTreeViewer.cxx:1717
 TTreeViewer.cxx:1718
 TTreeViewer.cxx:1719
 TTreeViewer.cxx:1720
 TTreeViewer.cxx:1721
 TTreeViewer.cxx:1722
 TTreeViewer.cxx:1723
 TTreeViewer.cxx:1724
 TTreeViewer.cxx:1725
 TTreeViewer.cxx:1726
 TTreeViewer.cxx:1727
 TTreeViewer.cxx:1728
 TTreeViewer.cxx:1729
 TTreeViewer.cxx:1730
 TTreeViewer.cxx:1731
 TTreeViewer.cxx:1732
 TTreeViewer.cxx:1733
 TTreeViewer.cxx:1734
 TTreeViewer.cxx:1735
 TTreeViewer.cxx:1736
 TTreeViewer.cxx:1737
 TTreeViewer.cxx:1738
 TTreeViewer.cxx:1739
 TTreeViewer.cxx:1740
 TTreeViewer.cxx:1741
 TTreeViewer.cxx:1742
 TTreeViewer.cxx:1743
 TTreeViewer.cxx:1744
 TTreeViewer.cxx:1745
 TTreeViewer.cxx:1746
 TTreeViewer.cxx:1747
 TTreeViewer.cxx:1748
 TTreeViewer.cxx:1749
 TTreeViewer.cxx:1750
 TTreeViewer.cxx:1751
 TTreeViewer.cxx:1752
 TTreeViewer.cxx:1753
 TTreeViewer.cxx:1754
 TTreeViewer.cxx:1755
 TTreeViewer.cxx:1756
 TTreeViewer.cxx:1757
 TTreeViewer.cxx:1758
 TTreeViewer.cxx:1759
 TTreeViewer.cxx:1760
 TTreeViewer.cxx:1761
 TTreeViewer.cxx:1762
 TTreeViewer.cxx:1763
 TTreeViewer.cxx:1764
 TTreeViewer.cxx:1765
 TTreeViewer.cxx:1766
 TTreeViewer.cxx:1767
 TTreeViewer.cxx:1768
 TTreeViewer.cxx:1769
 TTreeViewer.cxx:1770
 TTreeViewer.cxx:1771
 TTreeViewer.cxx:1772
 TTreeViewer.cxx:1773
 TTreeViewer.cxx:1774
 TTreeViewer.cxx:1775
 TTreeViewer.cxx:1776
 TTreeViewer.cxx:1777
 TTreeViewer.cxx:1778
 TTreeViewer.cxx:1779
 TTreeViewer.cxx:1780
 TTreeViewer.cxx:1781
 TTreeViewer.cxx:1782
 TTreeViewer.cxx:1783
 TTreeViewer.cxx:1784
 TTreeViewer.cxx:1785
 TTreeViewer.cxx:1786
 TTreeViewer.cxx:1787
 TTreeViewer.cxx:1788
 TTreeViewer.cxx:1789
 TTreeViewer.cxx:1790
 TTreeViewer.cxx:1791
 TTreeViewer.cxx:1792
 TTreeViewer.cxx:1793
 TTreeViewer.cxx:1794
 TTreeViewer.cxx:1795
 TTreeViewer.cxx:1796
 TTreeViewer.cxx:1797
 TTreeViewer.cxx:1798
 TTreeViewer.cxx:1799
 TTreeViewer.cxx:1800
 TTreeViewer.cxx:1801
 TTreeViewer.cxx:1802
 TTreeViewer.cxx:1803
 TTreeViewer.cxx:1804
 TTreeViewer.cxx:1805
 TTreeViewer.cxx:1806
 TTreeViewer.cxx:1807
 TTreeViewer.cxx:1808
 TTreeViewer.cxx:1809
 TTreeViewer.cxx:1810
 TTreeViewer.cxx:1811
 TTreeViewer.cxx:1812
 TTreeViewer.cxx:1813
 TTreeViewer.cxx:1814
 TTreeViewer.cxx:1815
 TTreeViewer.cxx:1816
 TTreeViewer.cxx:1817
 TTreeViewer.cxx:1818
 TTreeViewer.cxx:1819
 TTreeViewer.cxx:1820
 TTreeViewer.cxx:1821
 TTreeViewer.cxx:1822
 TTreeViewer.cxx:1823
 TTreeViewer.cxx:1824
 TTreeViewer.cxx:1825
 TTreeViewer.cxx:1826
 TTreeViewer.cxx:1827
 TTreeViewer.cxx:1828
 TTreeViewer.cxx:1829
 TTreeViewer.cxx:1830
 TTreeViewer.cxx:1831
 TTreeViewer.cxx:1832
 TTreeViewer.cxx:1833
 TTreeViewer.cxx:1834
 TTreeViewer.cxx:1835
 TTreeViewer.cxx:1836
 TTreeViewer.cxx:1837
 TTreeViewer.cxx:1838
 TTreeViewer.cxx:1839
 TTreeViewer.cxx:1840
 TTreeViewer.cxx:1841
 TTreeViewer.cxx:1842
 TTreeViewer.cxx:1843
 TTreeViewer.cxx:1844
 TTreeViewer.cxx:1845
 TTreeViewer.cxx:1846
 TTreeViewer.cxx:1847
 TTreeViewer.cxx:1848
 TTreeViewer.cxx:1849
 TTreeViewer.cxx:1850
 TTreeViewer.cxx:1851
 TTreeViewer.cxx:1852
 TTreeViewer.cxx:1853
 TTreeViewer.cxx:1854
 TTreeViewer.cxx:1855
 TTreeViewer.cxx:1856
 TTreeViewer.cxx:1857
 TTreeViewer.cxx:1858
 TTreeViewer.cxx:1859
 TTreeViewer.cxx:1860
 TTreeViewer.cxx:1861
 TTreeViewer.cxx:1862
 TTreeViewer.cxx:1863
 TTreeViewer.cxx:1864
 TTreeViewer.cxx:1865
 TTreeViewer.cxx:1866
 TTreeViewer.cxx:1867
 TTreeViewer.cxx:1868
 TTreeViewer.cxx:1869
 TTreeViewer.cxx:1870
 TTreeViewer.cxx:1871
 TTreeViewer.cxx:1872
 TTreeViewer.cxx:1873
 TTreeViewer.cxx:1874
 TTreeViewer.cxx:1875
 TTreeViewer.cxx:1876
 TTreeViewer.cxx:1877
 TTreeViewer.cxx:1878
 TTreeViewer.cxx:1879
 TTreeViewer.cxx:1880
 TTreeViewer.cxx:1881
 TTreeViewer.cxx:1882
 TTreeViewer.cxx:1883
 TTreeViewer.cxx:1884
 TTreeViewer.cxx:1885
 TTreeViewer.cxx:1886
 TTreeViewer.cxx:1887
 TTreeViewer.cxx:1888
 TTreeViewer.cxx:1889
 TTreeViewer.cxx:1890
 TTreeViewer.cxx:1891
 TTreeViewer.cxx:1892
 TTreeViewer.cxx:1893
 TTreeViewer.cxx:1894
 TTreeViewer.cxx:1895
 TTreeViewer.cxx:1896
 TTreeViewer.cxx:1897
 TTreeViewer.cxx:1898
 TTreeViewer.cxx:1899
 TTreeViewer.cxx:1900
 TTreeViewer.cxx:1901
 TTreeViewer.cxx:1902
 TTreeViewer.cxx:1903
 TTreeViewer.cxx:1904
 TTreeViewer.cxx:1905
 TTreeViewer.cxx:1906
 TTreeViewer.cxx:1907
 TTreeViewer.cxx:1908
 TTreeViewer.cxx:1909
 TTreeViewer.cxx:1910
 TTreeViewer.cxx:1911
 TTreeViewer.cxx:1912
 TTreeViewer.cxx:1913
 TTreeViewer.cxx:1914
 TTreeViewer.cxx:1915
 TTreeViewer.cxx:1916
 TTreeViewer.cxx:1917
 TTreeViewer.cxx:1918
 TTreeViewer.cxx:1919
 TTreeViewer.cxx:1920
 TTreeViewer.cxx:1921
 TTreeViewer.cxx:1922
 TTreeViewer.cxx:1923
 TTreeViewer.cxx:1924
 TTreeViewer.cxx:1925
 TTreeViewer.cxx:1926
 TTreeViewer.cxx:1927
 TTreeViewer.cxx:1928
 TTreeViewer.cxx:1929
 TTreeViewer.cxx:1930
 TTreeViewer.cxx:1931
 TTreeViewer.cxx:1932
 TTreeViewer.cxx:1933
 TTreeViewer.cxx:1934
 TTreeViewer.cxx:1935
 TTreeViewer.cxx:1936
 TTreeViewer.cxx:1937
 TTreeViewer.cxx:1938
 TTreeViewer.cxx:1939
 TTreeViewer.cxx:1940
 TTreeViewer.cxx:1941
 TTreeViewer.cxx:1942
 TTreeViewer.cxx:1943
 TTreeViewer.cxx:1944
 TTreeViewer.cxx:1945
 TTreeViewer.cxx:1946
 TTreeViewer.cxx:1947
 TTreeViewer.cxx:1948
 TTreeViewer.cxx:1949
 TTreeViewer.cxx:1950
 TTreeViewer.cxx:1951
 TTreeViewer.cxx:1952
 TTreeViewer.cxx:1953
 TTreeViewer.cxx:1954
 TTreeViewer.cxx:1955
 TTreeViewer.cxx:1956
 TTreeViewer.cxx:1957
 TTreeViewer.cxx:1958
 TTreeViewer.cxx:1959
 TTreeViewer.cxx:1960
 TTreeViewer.cxx:1961
 TTreeViewer.cxx:1962
 TTreeViewer.cxx:1963
 TTreeViewer.cxx:1964
 TTreeViewer.cxx:1965
 TTreeViewer.cxx:1966
 TTreeViewer.cxx:1967
 TTreeViewer.cxx:1968
 TTreeViewer.cxx:1969
 TTreeViewer.cxx:1970
 TTreeViewer.cxx:1971
 TTreeViewer.cxx:1972
 TTreeViewer.cxx:1973
 TTreeViewer.cxx:1974
 TTreeViewer.cxx:1975
 TTreeViewer.cxx:1976
 TTreeViewer.cxx:1977
 TTreeViewer.cxx:1978
 TTreeViewer.cxx:1979
 TTreeViewer.cxx:1980
 TTreeViewer.cxx:1981
 TTreeViewer.cxx:1982
 TTreeViewer.cxx:1983
 TTreeViewer.cxx:1984
 TTreeViewer.cxx:1985
 TTreeViewer.cxx:1986
 TTreeViewer.cxx:1987
 TTreeViewer.cxx:1988
 TTreeViewer.cxx:1989
 TTreeViewer.cxx:1990
 TTreeViewer.cxx:1991
 TTreeViewer.cxx:1992
 TTreeViewer.cxx:1993
 TTreeViewer.cxx:1994
 TTreeViewer.cxx:1995
 TTreeViewer.cxx:1996
 TTreeViewer.cxx:1997
 TTreeViewer.cxx:1998
 TTreeViewer.cxx:1999
 TTreeViewer.cxx:2000
 TTreeViewer.cxx:2001
 TTreeViewer.cxx:2002
 TTreeViewer.cxx:2003
 TTreeViewer.cxx:2004
 TTreeViewer.cxx:2005
 TTreeViewer.cxx:2006
 TTreeViewer.cxx:2007
 TTreeViewer.cxx:2008
 TTreeViewer.cxx:2009
 TTreeViewer.cxx:2010
 TTreeViewer.cxx:2011
 TTreeViewer.cxx:2012
 TTreeViewer.cxx:2013
 TTreeViewer.cxx:2014
 TTreeViewer.cxx:2015
 TTreeViewer.cxx:2016
 TTreeViewer.cxx:2017
 TTreeViewer.cxx:2018
 TTreeViewer.cxx:2019
 TTreeViewer.cxx:2020
 TTreeViewer.cxx:2021
 TTreeViewer.cxx:2022
 TTreeViewer.cxx:2023
 TTreeViewer.cxx:2024
 TTreeViewer.cxx:2025
 TTreeViewer.cxx:2026
 TTreeViewer.cxx:2027
 TTreeViewer.cxx:2028
 TTreeViewer.cxx:2029
 TTreeViewer.cxx:2030
 TTreeViewer.cxx:2031
 TTreeViewer.cxx:2032
 TTreeViewer.cxx:2033
 TTreeViewer.cxx:2034
 TTreeViewer.cxx:2035
 TTreeViewer.cxx:2036
 TTreeViewer.cxx:2037
 TTreeViewer.cxx:2038
 TTreeViewer.cxx:2039
 TTreeViewer.cxx:2040
 TTreeViewer.cxx:2041
 TTreeViewer.cxx:2042
 TTreeViewer.cxx:2043
 TTreeViewer.cxx:2044
 TTreeViewer.cxx:2045
 TTreeViewer.cxx:2046
 TTreeViewer.cxx:2047
 TTreeViewer.cxx:2048
 TTreeViewer.cxx:2049
 TTreeViewer.cxx:2050
 TTreeViewer.cxx:2051
 TTreeViewer.cxx:2052
 TTreeViewer.cxx:2053
 TTreeViewer.cxx:2054
 TTreeViewer.cxx:2055
 TTreeViewer.cxx:2056
 TTreeViewer.cxx:2057
 TTreeViewer.cxx:2058
 TTreeViewer.cxx:2059
 TTreeViewer.cxx:2060
 TTreeViewer.cxx:2061
 TTreeViewer.cxx:2062
 TTreeViewer.cxx:2063
 TTreeViewer.cxx:2064
 TTreeViewer.cxx:2065
 TTreeViewer.cxx:2066
 TTreeViewer.cxx:2067
 TTreeViewer.cxx:2068
 TTreeViewer.cxx:2069
 TTreeViewer.cxx:2070
 TTreeViewer.cxx:2071
 TTreeViewer.cxx:2072
 TTreeViewer.cxx:2073
 TTreeViewer.cxx:2074
 TTreeViewer.cxx:2075
 TTreeViewer.cxx:2076
 TTreeViewer.cxx:2077
 TTreeViewer.cxx:2078
 TTreeViewer.cxx:2079
 TTreeViewer.cxx:2080
 TTreeViewer.cxx:2081
 TTreeViewer.cxx:2082
 TTreeViewer.cxx:2083
 TTreeViewer.cxx:2084
 TTreeViewer.cxx:2085
 TTreeViewer.cxx:2086
 TTreeViewer.cxx:2087
 TTreeViewer.cxx:2088
 TTreeViewer.cxx:2089
 TTreeViewer.cxx:2090
 TTreeViewer.cxx:2091
 TTreeViewer.cxx:2092
 TTreeViewer.cxx:2093
 TTreeViewer.cxx:2094
 TTreeViewer.cxx:2095
 TTreeViewer.cxx:2096
 TTreeViewer.cxx:2097
 TTreeViewer.cxx:2098
 TTreeViewer.cxx:2099
 TTreeViewer.cxx:2100
 TTreeViewer.cxx:2101
 TTreeViewer.cxx:2102
 TTreeViewer.cxx:2103
 TTreeViewer.cxx:2104
 TTreeViewer.cxx:2105
 TTreeViewer.cxx:2106
 TTreeViewer.cxx:2107
 TTreeViewer.cxx:2108
 TTreeViewer.cxx:2109
 TTreeViewer.cxx:2110
 TTreeViewer.cxx:2111
 TTreeViewer.cxx:2112
 TTreeViewer.cxx:2113
 TTreeViewer.cxx:2114
 TTreeViewer.cxx:2115
 TTreeViewer.cxx:2116
 TTreeViewer.cxx:2117
 TTreeViewer.cxx:2118
 TTreeViewer.cxx:2119
 TTreeViewer.cxx:2120
 TTreeViewer.cxx:2121
 TTreeViewer.cxx:2122
 TTreeViewer.cxx:2123
 TTreeViewer.cxx:2124
 TTreeViewer.cxx:2125
 TTreeViewer.cxx:2126
 TTreeViewer.cxx:2127
 TTreeViewer.cxx:2128
 TTreeViewer.cxx:2129
 TTreeViewer.cxx:2130
 TTreeViewer.cxx:2131
 TTreeViewer.cxx:2132
 TTreeViewer.cxx:2133
 TTreeViewer.cxx:2134
 TTreeViewer.cxx:2135
 TTreeViewer.cxx:2136
 TTreeViewer.cxx:2137
 TTreeViewer.cxx:2138
 TTreeViewer.cxx:2139
 TTreeViewer.cxx:2140
 TTreeViewer.cxx:2141
 TTreeViewer.cxx:2142
 TTreeViewer.cxx:2143
 TTreeViewer.cxx:2144
 TTreeViewer.cxx:2145
 TTreeViewer.cxx:2146
 TTreeViewer.cxx:2147
 TTreeViewer.cxx:2148
 TTreeViewer.cxx:2149
 TTreeViewer.cxx:2150
 TTreeViewer.cxx:2151
 TTreeViewer.cxx:2152
 TTreeViewer.cxx:2153
 TTreeViewer.cxx:2154
 TTreeViewer.cxx:2155
 TTreeViewer.cxx:2156
 TTreeViewer.cxx:2157
 TTreeViewer.cxx:2158
 TTreeViewer.cxx:2159
 TTreeViewer.cxx:2160
 TTreeViewer.cxx:2161
 TTreeViewer.cxx:2162
 TTreeViewer.cxx:2163
 TTreeViewer.cxx:2164
 TTreeViewer.cxx:2165
 TTreeViewer.cxx:2166
 TTreeViewer.cxx:2167
 TTreeViewer.cxx:2168
 TTreeViewer.cxx:2169
 TTreeViewer.cxx:2170
 TTreeViewer.cxx:2171
 TTreeViewer.cxx:2172
 TTreeViewer.cxx:2173
 TTreeViewer.cxx:2174
 TTreeViewer.cxx:2175
 TTreeViewer.cxx:2176
 TTreeViewer.cxx:2177
 TTreeViewer.cxx:2178
 TTreeViewer.cxx:2179
 TTreeViewer.cxx:2180
 TTreeViewer.cxx:2181
 TTreeViewer.cxx:2182
 TTreeViewer.cxx:2183
 TTreeViewer.cxx:2184
 TTreeViewer.cxx:2185
 TTreeViewer.cxx:2186
 TTreeViewer.cxx:2187
 TTreeViewer.cxx:2188
 TTreeViewer.cxx:2189
 TTreeViewer.cxx:2190
 TTreeViewer.cxx:2191
 TTreeViewer.cxx:2192
 TTreeViewer.cxx:2193
 TTreeViewer.cxx:2194
 TTreeViewer.cxx:2195
 TTreeViewer.cxx:2196
 TTreeViewer.cxx:2197
 TTreeViewer.cxx:2198
 TTreeViewer.cxx:2199
 TTreeViewer.cxx:2200
 TTreeViewer.cxx:2201
 TTreeViewer.cxx:2202
 TTreeViewer.cxx:2203
 TTreeViewer.cxx:2204
 TTreeViewer.cxx:2205
 TTreeViewer.cxx:2206
 TTreeViewer.cxx:2207
 TTreeViewer.cxx:2208
 TTreeViewer.cxx:2209
 TTreeViewer.cxx:2210
 TTreeViewer.cxx:2211
 TTreeViewer.cxx:2212
 TTreeViewer.cxx:2213
 TTreeViewer.cxx:2214
 TTreeViewer.cxx:2215
 TTreeViewer.cxx:2216
 TTreeViewer.cxx:2217
 TTreeViewer.cxx:2218
 TTreeViewer.cxx:2219
 TTreeViewer.cxx:2220
 TTreeViewer.cxx:2221
 TTreeViewer.cxx:2222
 TTreeViewer.cxx:2223
 TTreeViewer.cxx:2224
 TTreeViewer.cxx:2225
 TTreeViewer.cxx:2226
 TTreeViewer.cxx:2227
 TTreeViewer.cxx:2228
 TTreeViewer.cxx:2229
 TTreeViewer.cxx:2230
 TTreeViewer.cxx:2231
 TTreeViewer.cxx:2232
 TTreeViewer.cxx:2233
 TTreeViewer.cxx:2234
 TTreeViewer.cxx:2235
 TTreeViewer.cxx:2236
 TTreeViewer.cxx:2237
 TTreeViewer.cxx:2238
 TTreeViewer.cxx:2239
 TTreeViewer.cxx:2240
 TTreeViewer.cxx:2241
 TTreeViewer.cxx:2242
 TTreeViewer.cxx:2243
 TTreeViewer.cxx:2244
 TTreeViewer.cxx:2245
 TTreeViewer.cxx:2246
 TTreeViewer.cxx:2247
 TTreeViewer.cxx:2248
 TTreeViewer.cxx:2249
 TTreeViewer.cxx:2250
 TTreeViewer.cxx:2251
 TTreeViewer.cxx:2252
 TTreeViewer.cxx:2253
 TTreeViewer.cxx:2254
 TTreeViewer.cxx:2255
 TTreeViewer.cxx:2256
 TTreeViewer.cxx:2257
 TTreeViewer.cxx:2258
 TTreeViewer.cxx:2259
 TTreeViewer.cxx:2260
 TTreeViewer.cxx:2261
 TTreeViewer.cxx:2262
 TTreeViewer.cxx:2263
 TTreeViewer.cxx:2264
 TTreeViewer.cxx:2265
 TTreeViewer.cxx:2266
 TTreeViewer.cxx:2267
 TTreeViewer.cxx:2268
 TTreeViewer.cxx:2269
 TTreeViewer.cxx:2270
 TTreeViewer.cxx:2271
 TTreeViewer.cxx:2272
 TTreeViewer.cxx:2273
 TTreeViewer.cxx:2274
 TTreeViewer.cxx:2275
 TTreeViewer.cxx:2276
 TTreeViewer.cxx:2277
 TTreeViewer.cxx:2278
 TTreeViewer.cxx:2279
 TTreeViewer.cxx:2280
 TTreeViewer.cxx:2281
 TTreeViewer.cxx:2282
 TTreeViewer.cxx:2283
 TTreeViewer.cxx:2284
 TTreeViewer.cxx:2285
 TTreeViewer.cxx:2286
 TTreeViewer.cxx:2287
 TTreeViewer.cxx:2288
 TTreeViewer.cxx:2289
 TTreeViewer.cxx:2290
 TTreeViewer.cxx:2291
 TTreeViewer.cxx:2292
 TTreeViewer.cxx:2293
 TTreeViewer.cxx:2294
 TTreeViewer.cxx:2295
 TTreeViewer.cxx:2296
 TTreeViewer.cxx:2297
 TTreeViewer.cxx:2298
 TTreeViewer.cxx:2299
 TTreeViewer.cxx:2300
 TTreeViewer.cxx:2301
 TTreeViewer.cxx:2302
 TTreeViewer.cxx:2303
 TTreeViewer.cxx:2304
 TTreeViewer.cxx:2305
 TTreeViewer.cxx:2306
 TTreeViewer.cxx:2307
 TTreeViewer.cxx:2308
 TTreeViewer.cxx:2309
 TTreeViewer.cxx:2310
 TTreeViewer.cxx:2311
 TTreeViewer.cxx:2312
 TTreeViewer.cxx:2313
 TTreeViewer.cxx:2314
 TTreeViewer.cxx:2315
 TTreeViewer.cxx:2316
 TTreeViewer.cxx:2317
 TTreeViewer.cxx:2318
 TTreeViewer.cxx:2319
 TTreeViewer.cxx:2320
 TTreeViewer.cxx:2321
 TTreeViewer.cxx:2322
 TTreeViewer.cxx:2323
 TTreeViewer.cxx:2324
 TTreeViewer.cxx:2325
 TTreeViewer.cxx:2326
 TTreeViewer.cxx:2327
 TTreeViewer.cxx:2328
 TTreeViewer.cxx:2329
 TTreeViewer.cxx:2330
 TTreeViewer.cxx:2331
 TTreeViewer.cxx:2332
 TTreeViewer.cxx:2333
 TTreeViewer.cxx:2334
 TTreeViewer.cxx:2335
 TTreeViewer.cxx:2336
 TTreeViewer.cxx:2337
 TTreeViewer.cxx:2338
 TTreeViewer.cxx:2339
 TTreeViewer.cxx:2340
 TTreeViewer.cxx:2341
 TTreeViewer.cxx:2342
 TTreeViewer.cxx:2343
 TTreeViewer.cxx:2344
 TTreeViewer.cxx:2345
 TTreeViewer.cxx:2346
 TTreeViewer.cxx:2347
 TTreeViewer.cxx:2348
 TTreeViewer.cxx:2349
 TTreeViewer.cxx:2350
 TTreeViewer.cxx:2351
 TTreeViewer.cxx:2352
 TTreeViewer.cxx:2353
 TTreeViewer.cxx:2354
 TTreeViewer.cxx:2355
 TTreeViewer.cxx:2356
 TTreeViewer.cxx:2357
 TTreeViewer.cxx:2358
 TTreeViewer.cxx:2359
 TTreeViewer.cxx:2360
 TTreeViewer.cxx:2361
 TTreeViewer.cxx:2362
 TTreeViewer.cxx:2363
 TTreeViewer.cxx:2364
 TTreeViewer.cxx:2365
 TTreeViewer.cxx:2366
 TTreeViewer.cxx:2367
 TTreeViewer.cxx:2368
 TTreeViewer.cxx:2369
 TTreeViewer.cxx:2370
 TTreeViewer.cxx:2371
 TTreeViewer.cxx:2372
 TTreeViewer.cxx:2373
 TTreeViewer.cxx:2374
 TTreeViewer.cxx:2375
 TTreeViewer.cxx:2376
 TTreeViewer.cxx:2377
 TTreeViewer.cxx:2378
 TTreeViewer.cxx:2379
 TTreeViewer.cxx:2380
 TTreeViewer.cxx:2381
 TTreeViewer.cxx:2382
 TTreeViewer.cxx:2383
 TTreeViewer.cxx:2384
 TTreeViewer.cxx:2385
 TTreeViewer.cxx:2386
 TTreeViewer.cxx:2387
 TTreeViewer.cxx:2388
 TTreeViewer.cxx:2389
 TTreeViewer.cxx:2390
 TTreeViewer.cxx:2391
 TTreeViewer.cxx:2392
 TTreeViewer.cxx:2393
 TTreeViewer.cxx:2394
 TTreeViewer.cxx:2395
 TTreeViewer.cxx:2396
 TTreeViewer.cxx:2397
 TTreeViewer.cxx:2398
 TTreeViewer.cxx:2399
 TTreeViewer.cxx:2400
 TTreeViewer.cxx:2401
 TTreeViewer.cxx:2402
 TTreeViewer.cxx:2403
 TTreeViewer.cxx:2404
 TTreeViewer.cxx:2405
 TTreeViewer.cxx:2406
 TTreeViewer.cxx:2407
 TTreeViewer.cxx:2408
 TTreeViewer.cxx:2409
 TTreeViewer.cxx:2410
 TTreeViewer.cxx:2411
 TTreeViewer.cxx:2412
 TTreeViewer.cxx:2413
 TTreeViewer.cxx:2414
 TTreeViewer.cxx:2415
 TTreeViewer.cxx:2416
 TTreeViewer.cxx:2417
 TTreeViewer.cxx:2418
 TTreeViewer.cxx:2419
 TTreeViewer.cxx:2420
 TTreeViewer.cxx:2421
 TTreeViewer.cxx:2422
 TTreeViewer.cxx:2423
 TTreeViewer.cxx:2424
 TTreeViewer.cxx:2425
 TTreeViewer.cxx:2426
 TTreeViewer.cxx:2427
 TTreeViewer.cxx:2428
 TTreeViewer.cxx:2429
 TTreeViewer.cxx:2430
 TTreeViewer.cxx:2431
 TTreeViewer.cxx:2432
 TTreeViewer.cxx:2433
 TTreeViewer.cxx:2434
 TTreeViewer.cxx:2435
 TTreeViewer.cxx:2436
 TTreeViewer.cxx:2437
 TTreeViewer.cxx:2438
 TTreeViewer.cxx:2439
 TTreeViewer.cxx:2440
 TTreeViewer.cxx:2441
 TTreeViewer.cxx:2442
 TTreeViewer.cxx:2443
 TTreeViewer.cxx:2444
 TTreeViewer.cxx:2445
 TTreeViewer.cxx:2446
 TTreeViewer.cxx:2447
 TTreeViewer.cxx:2448
 TTreeViewer.cxx:2449
 TTreeViewer.cxx:2450
 TTreeViewer.cxx:2451
 TTreeViewer.cxx:2452
 TTreeViewer.cxx:2453
 TTreeViewer.cxx:2454
 TTreeViewer.cxx:2455
 TTreeViewer.cxx:2456
 TTreeViewer.cxx:2457
 TTreeViewer.cxx:2458
 TTreeViewer.cxx:2459
 TTreeViewer.cxx:2460
 TTreeViewer.cxx:2461
 TTreeViewer.cxx:2462
 TTreeViewer.cxx:2463
 TTreeViewer.cxx:2464
 TTreeViewer.cxx:2465
 TTreeViewer.cxx:2466
 TTreeViewer.cxx:2467
 TTreeViewer.cxx:2468
 TTreeViewer.cxx:2469
 TTreeViewer.cxx:2470
 TTreeViewer.cxx:2471
 TTreeViewer.cxx:2472
 TTreeViewer.cxx:2473
 TTreeViewer.cxx:2474
 TTreeViewer.cxx:2475
 TTreeViewer.cxx:2476
 TTreeViewer.cxx:2477
 TTreeViewer.cxx:2478
 TTreeViewer.cxx:2479
 TTreeViewer.cxx:2480
 TTreeViewer.cxx:2481
 TTreeViewer.cxx:2482
 TTreeViewer.cxx:2483
 TTreeViewer.cxx:2484
 TTreeViewer.cxx:2485
 TTreeViewer.cxx:2486
 TTreeViewer.cxx:2487
 TTreeViewer.cxx:2488
 TTreeViewer.cxx:2489
 TTreeViewer.cxx:2490
 TTreeViewer.cxx:2491
 TTreeViewer.cxx:2492
 TTreeViewer.cxx:2493
 TTreeViewer.cxx:2494
 TTreeViewer.cxx:2495
 TTreeViewer.cxx:2496
 TTreeViewer.cxx:2497
 TTreeViewer.cxx:2498
 TTreeViewer.cxx:2499
 TTreeViewer.cxx:2500
 TTreeViewer.cxx:2501
 TTreeViewer.cxx:2502
 TTreeViewer.cxx:2503
 TTreeViewer.cxx:2504
 TTreeViewer.cxx:2505
 TTreeViewer.cxx:2506
 TTreeViewer.cxx:2507
 TTreeViewer.cxx:2508
 TTreeViewer.cxx:2509
 TTreeViewer.cxx:2510
 TTreeViewer.cxx:2511
 TTreeViewer.cxx:2512
 TTreeViewer.cxx:2513
 TTreeViewer.cxx:2514
 TTreeViewer.cxx:2515
 TTreeViewer.cxx:2516
 TTreeViewer.cxx:2517
 TTreeViewer.cxx:2518
 TTreeViewer.cxx:2519
 TTreeViewer.cxx:2520
 TTreeViewer.cxx:2521
 TTreeViewer.cxx:2522
 TTreeViewer.cxx:2523
 TTreeViewer.cxx:2524
 TTreeViewer.cxx:2525
 TTreeViewer.cxx:2526
 TTreeViewer.cxx:2527
 TTreeViewer.cxx:2528
 TTreeViewer.cxx:2529
 TTreeViewer.cxx:2530
 TTreeViewer.cxx:2531
 TTreeViewer.cxx:2532
 TTreeViewer.cxx:2533
 TTreeViewer.cxx:2534
 TTreeViewer.cxx:2535
 TTreeViewer.cxx:2536
 TTreeViewer.cxx:2537
 TTreeViewer.cxx:2538
 TTreeViewer.cxx:2539
 TTreeViewer.cxx:2540
 TTreeViewer.cxx:2541
 TTreeViewer.cxx:2542
 TTreeViewer.cxx:2543
 TTreeViewer.cxx:2544
 TTreeViewer.cxx:2545
 TTreeViewer.cxx:2546
 TTreeViewer.cxx:2547
 TTreeViewer.cxx:2548
 TTreeViewer.cxx:2549
 TTreeViewer.cxx:2550
 TTreeViewer.cxx:2551
 TTreeViewer.cxx:2552
 TTreeViewer.cxx:2553
 TTreeViewer.cxx:2554
 TTreeViewer.cxx:2555
 TTreeViewer.cxx:2556
 TTreeViewer.cxx:2557
 TTreeViewer.cxx:2558
 TTreeViewer.cxx:2559
 TTreeViewer.cxx:2560
 TTreeViewer.cxx:2561
 TTreeViewer.cxx:2562
 TTreeViewer.cxx:2563
 TTreeViewer.cxx:2564
 TTreeViewer.cxx:2565
 TTreeViewer.cxx:2566
 TTreeViewer.cxx:2567
 TTreeViewer.cxx:2568
 TTreeViewer.cxx:2569
 TTreeViewer.cxx:2570
 TTreeViewer.cxx:2571
 TTreeViewer.cxx:2572
 TTreeViewer.cxx:2573
 TTreeViewer.cxx:2574
 TTreeViewer.cxx:2575
 TTreeViewer.cxx:2576
 TTreeViewer.cxx:2577
 TTreeViewer.cxx:2578
 TTreeViewer.cxx:2579
 TTreeViewer.cxx:2580
 TTreeViewer.cxx:2581
 TTreeViewer.cxx:2582
 TTreeViewer.cxx:2583
 TTreeViewer.cxx:2584
 TTreeViewer.cxx:2585
 TTreeViewer.cxx:2586
 TTreeViewer.cxx:2587
 TTreeViewer.cxx:2588
 TTreeViewer.cxx:2589
 TTreeViewer.cxx:2590
 TTreeViewer.cxx:2591
 TTreeViewer.cxx:2592
 TTreeViewer.cxx:2593
 TTreeViewer.cxx:2594
 TTreeViewer.cxx:2595
 TTreeViewer.cxx:2596
 TTreeViewer.cxx:2597
 TTreeViewer.cxx:2598
 TTreeViewer.cxx:2599
 TTreeViewer.cxx:2600
 TTreeViewer.cxx:2601
 TTreeViewer.cxx:2602
 TTreeViewer.cxx:2603
 TTreeViewer.cxx:2604
 TTreeViewer.cxx:2605
 TTreeViewer.cxx:2606
 TTreeViewer.cxx:2607
 TTreeViewer.cxx:2608
 TTreeViewer.cxx:2609
 TTreeViewer.cxx:2610
 TTreeViewer.cxx:2611
 TTreeViewer.cxx:2612
 TTreeViewer.cxx:2613
 TTreeViewer.cxx:2614
 TTreeViewer.cxx:2615
 TTreeViewer.cxx:2616
 TTreeViewer.cxx:2617
 TTreeViewer.cxx:2618
 TTreeViewer.cxx:2619
 TTreeViewer.cxx:2620
 TTreeViewer.cxx:2621
 TTreeViewer.cxx:2622
 TTreeViewer.cxx:2623
 TTreeViewer.cxx:2624
 TTreeViewer.cxx:2625
 TTreeViewer.cxx:2626
 TTreeViewer.cxx:2627
 TTreeViewer.cxx:2628
 TTreeViewer.cxx:2629
 TTreeViewer.cxx:2630
 TTreeViewer.cxx:2631
 TTreeViewer.cxx:2632
 TTreeViewer.cxx:2633
 TTreeViewer.cxx:2634
 TTreeViewer.cxx:2635
 TTreeViewer.cxx:2636
 TTreeViewer.cxx:2637
 TTreeViewer.cxx:2638
 TTreeViewer.cxx:2639
 TTreeViewer.cxx:2640
 TTreeViewer.cxx:2641
 TTreeViewer.cxx:2642
 TTreeViewer.cxx:2643
 TTreeViewer.cxx:2644
 TTreeViewer.cxx:2645
 TTreeViewer.cxx:2646
 TTreeViewer.cxx:2647
 TTreeViewer.cxx:2648
 TTreeViewer.cxx:2649
 TTreeViewer.cxx:2650
 TTreeViewer.cxx:2651
 TTreeViewer.cxx:2652
 TTreeViewer.cxx:2653
 TTreeViewer.cxx:2654
 TTreeViewer.cxx:2655
 TTreeViewer.cxx:2656
 TTreeViewer.cxx:2657
 TTreeViewer.cxx:2658
 TTreeViewer.cxx:2659
 TTreeViewer.cxx:2660
 TTreeViewer.cxx:2661
 TTreeViewer.cxx:2662
 TTreeViewer.cxx:2663
 TTreeViewer.cxx:2664
 TTreeViewer.cxx:2665
 TTreeViewer.cxx:2666
 TTreeViewer.cxx:2667
 TTreeViewer.cxx:2668
 TTreeViewer.cxx:2669
 TTreeViewer.cxx:2670
 TTreeViewer.cxx:2671
 TTreeViewer.cxx:2672
 TTreeViewer.cxx:2673
 TTreeViewer.cxx:2674
 TTreeViewer.cxx:2675
 TTreeViewer.cxx:2676
 TTreeViewer.cxx:2677
 TTreeViewer.cxx:2678
 TTreeViewer.cxx:2679
 TTreeViewer.cxx:2680
 TTreeViewer.cxx:2681
 TTreeViewer.cxx:2682
 TTreeViewer.cxx:2683
 TTreeViewer.cxx:2684
 TTreeViewer.cxx:2685
 TTreeViewer.cxx:2686
 TTreeViewer.cxx:2687
 TTreeViewer.cxx:2688
 TTreeViewer.cxx:2689
 TTreeViewer.cxx:2690
 TTreeViewer.cxx:2691
 TTreeViewer.cxx:2692
 TTreeViewer.cxx:2693
 TTreeViewer.cxx:2694
 TTreeViewer.cxx:2695
 TTreeViewer.cxx:2696
 TTreeViewer.cxx:2697
 TTreeViewer.cxx:2698
 TTreeViewer.cxx:2699
 TTreeViewer.cxx:2700
 TTreeViewer.cxx:2701
 TTreeViewer.cxx:2702
 TTreeViewer.cxx:2703
 TTreeViewer.cxx:2704
 TTreeViewer.cxx:2705
 TTreeViewer.cxx:2706
 TTreeViewer.cxx:2707
 TTreeViewer.cxx:2708
 TTreeViewer.cxx:2709
 TTreeViewer.cxx:2710
 TTreeViewer.cxx:2711
 TTreeViewer.cxx:2712
 TTreeViewer.cxx:2713
 TTreeViewer.cxx:2714
 TTreeViewer.cxx:2715
 TTreeViewer.cxx:2716
 TTreeViewer.cxx:2717
 TTreeViewer.cxx:2718
 TTreeViewer.cxx:2719
 TTreeViewer.cxx:2720
 TTreeViewer.cxx:2721
 TTreeViewer.cxx:2722
 TTreeViewer.cxx:2723
 TTreeViewer.cxx:2724
 TTreeViewer.cxx:2725
 TTreeViewer.cxx:2726
 TTreeViewer.cxx:2727
 TTreeViewer.cxx:2728
 TTreeViewer.cxx:2729
 TTreeViewer.cxx:2730
 TTreeViewer.cxx:2731
 TTreeViewer.cxx:2732
 TTreeViewer.cxx:2733
 TTreeViewer.cxx:2734
 TTreeViewer.cxx:2735
 TTreeViewer.cxx:2736
 TTreeViewer.cxx:2737
 TTreeViewer.cxx:2738
 TTreeViewer.cxx:2739
 TTreeViewer.cxx:2740
 TTreeViewer.cxx:2741
 TTreeViewer.cxx:2742
 TTreeViewer.cxx:2743
 TTreeViewer.cxx:2744
 TTreeViewer.cxx:2745
 TTreeViewer.cxx:2746
 TTreeViewer.cxx:2747
 TTreeViewer.cxx:2748
 TTreeViewer.cxx:2749
 TTreeViewer.cxx:2750
 TTreeViewer.cxx:2751
 TTreeViewer.cxx:2752
 TTreeViewer.cxx:2753
 TTreeViewer.cxx:2754
 TTreeViewer.cxx:2755
 TTreeViewer.cxx:2756
 TTreeViewer.cxx:2757
 TTreeViewer.cxx:2758
 TTreeViewer.cxx:2759
 TTreeViewer.cxx:2760
 TTreeViewer.cxx:2761
 TTreeViewer.cxx:2762
 TTreeViewer.cxx:2763
 TTreeViewer.cxx:2764
 TTreeViewer.cxx:2765
 TTreeViewer.cxx:2766
 TTreeViewer.cxx:2767
 TTreeViewer.cxx:2768
 TTreeViewer.cxx:2769
 TTreeViewer.cxx:2770
 TTreeViewer.cxx:2771
 TTreeViewer.cxx:2772
 TTreeViewer.cxx:2773
 TTreeViewer.cxx:2774
 TTreeViewer.cxx:2775
 TTreeViewer.cxx:2776
 TTreeViewer.cxx:2777
 TTreeViewer.cxx:2778
 TTreeViewer.cxx:2779
 TTreeViewer.cxx:2780
 TTreeViewer.cxx:2781
 TTreeViewer.cxx:2782
 TTreeViewer.cxx:2783
 TTreeViewer.cxx:2784
 TTreeViewer.cxx:2785
 TTreeViewer.cxx:2786
 TTreeViewer.cxx:2787
 TTreeViewer.cxx:2788
 TTreeViewer.cxx:2789
 TTreeViewer.cxx:2790
 TTreeViewer.cxx:2791
 TTreeViewer.cxx:2792
 TTreeViewer.cxx:2793
 TTreeViewer.cxx:2794
 TTreeViewer.cxx:2795
 TTreeViewer.cxx:2796
 TTreeViewer.cxx:2797
 TTreeViewer.cxx:2798
 TTreeViewer.cxx:2799
 TTreeViewer.cxx:2800
 TTreeViewer.cxx:2801
 TTreeViewer.cxx:2802
 TTreeViewer.cxx:2803
 TTreeViewer.cxx:2804
 TTreeViewer.cxx:2805
 TTreeViewer.cxx:2806
 TTreeViewer.cxx:2807
 TTreeViewer.cxx:2808
 TTreeViewer.cxx:2809
 TTreeViewer.cxx:2810
 TTreeViewer.cxx:2811
 TTreeViewer.cxx:2812
 TTreeViewer.cxx:2813
 TTreeViewer.cxx:2814
 TTreeViewer.cxx:2815
 TTreeViewer.cxx:2816
 TTreeViewer.cxx:2817
 TTreeViewer.cxx:2818
 TTreeViewer.cxx:2819
 TTreeViewer.cxx:2820
 TTreeViewer.cxx:2821
 TTreeViewer.cxx:2822
 TTreeViewer.cxx:2823
 TTreeViewer.cxx:2824
 TTreeViewer.cxx:2825
 TTreeViewer.cxx:2826
 TTreeViewer.cxx:2827
 TTreeViewer.cxx:2828
 TTreeViewer.cxx:2829
 TTreeViewer.cxx:2830
 TTreeViewer.cxx:2831
 TTreeViewer.cxx:2832
 TTreeViewer.cxx:2833
 TTreeViewer.cxx:2834
 TTreeViewer.cxx:2835
 TTreeViewer.cxx:2836
 TTreeViewer.cxx:2837
 TTreeViewer.cxx:2838
 TTreeViewer.cxx:2839
 TTreeViewer.cxx:2840
 TTreeViewer.cxx:2841
 TTreeViewer.cxx:2842
 TTreeViewer.cxx:2843
 TTreeViewer.cxx:2844
 TTreeViewer.cxx:2845
 TTreeViewer.cxx:2846
 TTreeViewer.cxx:2847
 TTreeViewer.cxx:2848
 TTreeViewer.cxx:2849
 TTreeViewer.cxx:2850
 TTreeViewer.cxx:2851
 TTreeViewer.cxx:2852
 TTreeViewer.cxx:2853
 TTreeViewer.cxx:2854
 TTreeViewer.cxx:2855
 TTreeViewer.cxx:2856
 TTreeViewer.cxx:2857
 TTreeViewer.cxx:2858
 TTreeViewer.cxx:2859
 TTreeViewer.cxx:2860
 TTreeViewer.cxx:2861
 TTreeViewer.cxx:2862
 TTreeViewer.cxx:2863
 TTreeViewer.cxx:2864
 TTreeViewer.cxx:2865
 TTreeViewer.cxx:2866
 TTreeViewer.cxx:2867
 TTreeViewer.cxx:2868
 TTreeViewer.cxx:2869
 TTreeViewer.cxx:2870
 TTreeViewer.cxx:2871
 TTreeViewer.cxx:2872
 TTreeViewer.cxx:2873
 TTreeViewer.cxx:2874
 TTreeViewer.cxx:2875
 TTreeViewer.cxx:2876
 TTreeViewer.cxx:2877
 TTreeViewer.cxx:2878
 TTreeViewer.cxx:2879
 TTreeViewer.cxx:2880
 TTreeViewer.cxx:2881
 TTreeViewer.cxx:2882
 TTreeViewer.cxx:2883
 TTreeViewer.cxx:2884
 TTreeViewer.cxx:2885
 TTreeViewer.cxx:2886
 TTreeViewer.cxx:2887
 TTreeViewer.cxx:2888
 TTreeViewer.cxx:2889
 TTreeViewer.cxx:2890
 TTreeViewer.cxx:2891
 TTreeViewer.cxx:2892
 TTreeViewer.cxx:2893
 TTreeViewer.cxx:2894