ROOT logo
// @(#)root/gpad:$Id: TClassTree.cxx 20882 2007-11-19 11:31:26Z rdm $
// Author: Rene Brun   01/12/98

/*************************************************************************
 * 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.             *
 *************************************************************************/

#include "RConfigure.h"

#include "TROOT.h"
#include "TClassTree.h"
#include "TClassTable.h"
#include "TClass.h"
#include "TBaseClass.h"
#include "TDataMember.h"
#include "TDataType.h"
#include "TRealData.h"
#include "TMethod.h"
#include "TMethodArg.h"
#include "TPad.h"
#include "TPaveClass.h"
#include "TArrow.h"
#include "TText.h"
#include "TSystem.h"
#include "TObjString.h"
#include "Riostream.h"

const Int_t kIsClassTree = BIT(7);
const Int_t kUsedByData  = BIT(11);
const Int_t kUsedByFunc  = BIT(12);
const Int_t kUsedByCode  = BIT(13);
const Int_t kUsedByClass = BIT(14);
const Int_t kUsingData   = BIT(15);
const Int_t kUsingFunc   = BIT(16);
const Int_t kUsingCode   = BIT(17);
const Int_t kUsingClass  = BIT(18);
const Int_t kUsedByCode1 = BIT(19);
const Int_t kIsaPointer  = BIT(20);
const Int_t kIsBasic     = BIT(21);

static Float_t gXsize, gYsize, gDx, gDy, gLabdx, gLabdy, gDxx, gCsize;
static Int_t *gNtsons, *gNsons;

ClassImp(TClassTree)


//______________________________________________________________________________
//
// Draw inheritance tree and their relations for a list of classes
// The following options are supported
//   - Direct inheritance (default)
//   - Multiple inheritance
//   - Composition
//   - References by data members and member functions
//   - References from Code
//
// The list of classes is specified:
//   - either in the TClassTree constructor as a second argument
//   - or the parameter to TClassTRee::Draw
//
// Note that the ClassTree viewer can also be started from the canvas
// pull down menu "Classes".
//
// In the list of classes, class names are separated by a ":"
// wildcarding is supported.
// The following formats are supported, eg in TClassTree::Draw
//   1- Draw("ClassA")
//         Draw inheritance tree for ClassA
//         Show all classes referenced by ClassA
//   2- Draw("*ClassB")
//         Draw inheritance tree for ClassB
//         and all the classes deriving from ClassB
//   3- Draw(">ClassC")
//         Draw inheritance tree for ClassC
//         Show classes referencing ClassC
//   4- Draw("ClassD<")
//         Draw inheritance tree for ClassD
//         Show classes referenced by ClassD
//         Show all classes referencing ClassD
//   5- Draw("Cla*")
//         Draw inheritance tree for all classes with name starting with "Cla"
//         Show classes referenced by these classes
//   6- Draw("ClassA:ClassB<")
//         Draw inheritance tree for ClassA
//         Show all classes referenced by ClassA
//         Draw inheritance tree for ClassB
//         Show classes referenced by ClassB
//         Show all classes referencing ClassB
//
//  example;  Draw("TTree<")
//         Draw inheritance tree for the Root class TTree
//         Show all classes referenced by TTree
//         Show all classes using TTree
//
// By default, only direct inheritance is drawn.
// Use TClassTree::ShowLinks(option) to show additional references
//   option = "H" to show links to embedded classes
//   option = "M" to show multiple inheritance
//   option = "R" to show pointers to other classes from data members
//   option = "C" to show classes used by the code(implementation) of a class
//
// The following picture is produced directly by:
//       TClassTree ct("ct","*TH1")
// It shows all the classes derived from the base class TH1.
//Begin_Html
/*
<img src="gif/th1_classtree.gif">
*/
//End_Html
//
// The ClassTree class uses the services of the class TPaveClass to
// show the class names. By clicking with the right mouse button in
// one TPaveClass object, one can invoke the following functions of TClassTree:
//   - ShowLinks(option) with by default option = "HMR"
//   - Draw(classes). By default the class drawn is the one being pointed
//   - ShowClassesUsedBy(classes) (by default the pointed class)
//   - ShowClassesUsing(classes) (by default the pointed class)
//
//  The following picture has been generated with the following statements
//       TClassTree tc1("tc1","TObject");
//       tc1.SetShowLinks("HMR");
//
//Begin_Html
/*
<img src="gif/tobject_classtree.gif">
*/
//End_Html
//
// Note that in case of embedded classes or pointers to classes,
// the corresponding dashed lines or arrows respectively start
// in the TPaveClass object at an X position reflecting the position
// in the list of data members.
//
//  - References by data members to other classes are show with a full red line
//  - Multiple inheritance is shown with a dashed blue line
//  - "Has a" relation is shown with a dotted cyan line
//  - References from code is shown by a full green line
//
//  Use TClassTree::SetSourceDir to specify the search path for source files.
//  By default the search path includes the ROOTSYS/src directory, the current
//  directory and the subdirectory src.
//
//  The first time TClassTree::Draw is invoked, all the classes in the
//  current application are processed, including the parsing of the code
//  to find all classes referenced by the include statements.
//  This process may take a few seconds. The following commands will be
//  much faster.
//
//  A TClassTree object may be saved in a Root file.
//  This object can be processed later by a Root program that ignores
//  the original classes. This interesting possibility allows to send
//  the class structure of an application to a colleague who does not have
//  your classes.
//  Example:
//    TFile f("myClasses.root","recreate")
//    TClassTree *ct = new TClassTree("ct","ATLF*")
//    ct->Write();
//  You can send at this point the file myClass.root to a colleague who can
//  run the following Root basic session
//     TFile f("myClass.root"); //connect the file
//     tt.ls();                 //to list all classes and titles
//     tt.Draw("ATLFDisplay")   //show class ATLFDisplay with all its dependencies
//  At this point, one has still access to all the classes present
//  in the original session and select any combination of these classes
//  to be displayed.


//______________________________________________________________________________
TClassTree::TClassTree()
{
   // TClassTree default constructor.

   fShowCod  = 0;
   fShowHas  = 0;
   fShowMul  = 0;
   fShowRef  = 0;
   fNclasses = 0;
   fCstatus  = 0;
   fParents  = 0;
   fCparent  = 0;
   fCpointer = 0;
   fCnames   = 0;
   fCtitles  = 0;
   fOptions  = 0;
   fLinks    = 0;
   fDerived  = 0;
   fNdata    = 0;
   SetLabelDx();
   SetYoffset(0);
#ifdef ROOTSRCDIR
   SetSourceDir(".:src:" ROOTSRCDIR "/src");
#else
   SetSourceDir(".:src:$ROOTSYS/src");
#endif
}


//_____________________________________________________________________________
TClassTree::TClassTree(const char *name, const char *classes)
           :TNamed(name,classes)
{
   // TClassTree constructor.

   fShowCod  = 0;
   fShowHas  = 0;
   fShowMul  = 0;
   fShowRef  = 0;
   fNclasses = 0;
   fCstatus  = 0;
   fParents  = 0;
   fCparent  = 0;
   fCpointer = 0;
   fCnames   = 0;
   fCtitles  = 0;
   fOptions  = 0;
   fLinks    = 0;
   fDerived  = 0;
   fNdata    = 0;
   SetLabelDx();
   SetYoffset(0);
#ifdef ROOTSRCDIR
   SetSourceDir(".:src:" ROOTSRCDIR "/src");
#else
   SetSourceDir(".:src:$ROOTSYS/src");
#endif

   // draw list of classes (if specified)
   if (classes && strlen(classes)) {
      fClasses = classes;
      Draw();
   }
}


//______________________________________________________________________________
TClassTree::~TClassTree()
{
   // TClassTree default destructor.

   for (Int_t i=0;i<fNclasses;i++) {
      //delete fOptions[i];
      if (fLinks[i]) fLinks[i]->Delete();
      //delete fLinks[i];
      //if (fDerived[i]) {delete [] fDerived[i]; fDerived[i] = 0;}
   }
   delete [] fCnames;
   delete [] fCtitles;
   delete [] fCstatus;
   delete [] fParents;
   delete [] fCparent;
   delete [] fCpointer;
   delete [] fOptions;
   delete [] fLinks;
   delete [] fDerived;
   delete [] fNdata;
}


//______________________________________________________________________________
void TClassTree::Draw(const char *classes)
{
   // Draw the inheritance tree and relations for the list of classes
   // see this class header for the syntax and examples

   if (!gPad) {
      gROOT->MakeDefCanvas();
   }
   Init();
   if (classes && strlen(classes)) fClasses = classes;
   for (Int_t i=0;i<fNclasses;i++) {
      fCstatus[i]  = 0;
      fCparent[i] = -1;
   }
   Paint();
}


//______________________________________________________________________________
Int_t TClassTree::FindClass(const char *classname)
{
   //  Find class number corresponding to classname in list of local classes

   for (Int_t i=0;i<fNclasses;i++) {
      if(!fCnames[i]->CompareTo(classname)) return i;
   }
   return -1;
}


//______________________________________________________________________________
void TClassTree::FindClassesUsedBy(Int_t iclass)
{
   //  Select all classes used/referenced by the class number iclass

   fCstatus[iclass] = 1;
   Int_t i;
   TObjString *os;
   TList *los = fLinks[iclass];
   TIter next(los);
   while ((os = (TObjString*)next())) {
      i = FindClass(os->GetName());
      if (i < 0) continue;
      if (fCstatus[i]) continue;
      Int_t udata  = os->TestBit(kUsedByData);
      Int_t ufunc  = os->TestBit(kUsedByFunc);
      Int_t ucode  = os->TestBit(kUsedByCode);
      Int_t uclass = os->TestBit(kUsedByClass);
      if (udata || ufunc || ucode || uclass) {
         fCstatus[i] = 1;
      }
   }
}


//______________________________________________________________________________
void TClassTree::FindClassesUsing(Int_t iclass)
{
   //  Select all classes using/referencing the class number iclass

   // loop on all classes
   fCstatus[iclass] = 1;
   Int_t i;
   TObjString *os;
   TList *los = fLinks[iclass];
   TIter next(los);
   while ((os = (TObjString*)next())) {
      i = FindClass(os->GetName());
      if (i < 0) continue;
      if (fCstatus[i]) continue;
      Int_t udata  = os->TestBit(kUsingData);
      Int_t ufunc  = os->TestBit(kUsingFunc);
      Int_t ucode  = os->TestBit(kUsingCode);
      Int_t uclass = os->TestBit(kUsingClass);
      if (udata || ufunc || ucode || uclass) {
         fCstatus[i] = 1;
      }
   }
}


//______________________________________________________________________________
void TClassTree::FindClassPosition(const char *classname, Float_t &x, Float_t &y)
{
   // Search the TPaveClass object in the pad with label=classname
   // returns the x and y position of the center of the pave.

   TIter next(gPad->GetListOfPrimitives());
   TObject *obj;
   TPaveClass *pave;
   while((obj=next())) {
      if (obj->InheritsFrom(TPaveClass::Class())) {
         pave = (TPaveClass*)obj;
         if (!strcmp(pave->GetLabel(),classname)) {
            x = 0.5*(pave->GetX1() + pave->GetX2());
            y = 0.5*(pave->GetY1() + pave->GetY2());
            return;
         }
      }
   }
   x = y = 0;
}


//_____________________________________________________________________________
void TClassTree::Init()
{
   // Initialize the data structures

   if (fNclasses) return;

   // fill the classes structures
   gClassTable->Init();
   fNclasses   = gClassTable->Classes();   //number of classes in the application
   fCnames     = new TString*[fNclasses];  //class names
   fCtitles    = new TString*[fNclasses];  //class titles (given in ClassDef)
   fCstatus    = new Int_t[fNclasses];     //=0 if not used in current expression
   fParents    = new Int_t[fNclasses];     //parent number of classes (permanent)
   fCparent    = new Int_t[fNclasses];     //parent number of classes (local to expression)
   fNdata      = new Int_t[fNclasses];     //number of data members per class
   fCpointer   = new TClass*[fNclasses];   //pointers to the TClass
   fOptions    = new TString*[fNclasses];  //options per class
   fLinks      = new TList*[fNclasses];    //list of classes referencing/referenced
   fDerived    = new char*[fNclasses];     //derivation matrix

   Int_t i,j;
   for (i=0;i<fNclasses;i++) {
      fCnames[i]   = new TString(gClassTable->Next());
      fCpointer[i] = TClass::GetClass(fCnames[i]->Data());
      fCtitles[i]  = new TString(fCpointer[i]->GetTitle());
      fCstatus[i]  = 0;
      fOptions[i]  = new TString("ID");
      fLinks[i]    = new TList();
      fDerived[i]  = new char[fNclasses];
   }
   TBaseClass *clbase;
   TClass *cl;
   for (i=0;i<fNclasses;i++) {
      TList *lm = fCpointer[i]->GetListOfDataMembers();
      if (lm) fNdata[i] = lm->GetSize();
      else    fNdata[i] = 0;
      // build derivation matrix
      char *derived = fDerived[i];
      for (j=0;j<fNclasses;j++) {
         derived[j] = 0;
         if (fCpointer[i]->InheritsFrom(fCpointer[j])) {
            derived[j] = 1;
         }
      }
      //build list of class parent
      fParents[i] = -1;
      TList *lb = fCpointer[i]->GetListOfBases();
      if (!lb) continue;
      clbase = (TBaseClass*)lb->First();
      if (clbase == 0) continue;
      cl = (TClass*)clbase->GetClassPointer();
      for (j=0;j<fNclasses;j++) {
         if(cl == fCpointer[j]) {
            fParents[i] = j;
            break;
         }
      }
   }
   //now the real & hard stuff
   for (i=0;i<fNclasses;i++) {
      ScanClasses(i);
   }
}


//_____________________________________________________________________________
void TClassTree::ls(Option_t *) const
{
   // list classes names and titles

   char line[500];
   for (Int_t i=0;i<fNclasses;i++) {
      sprintf(line,"%s%s",fCnames[i]->Data(),"...........................");
      sprintf(&line[30],"%s",fCtitles[i]->Data());
      line[79] = 0;
      printf("%5d %s\n",i,line);
   }
}


//_____________________________________________________________________________
TObjString *TClassTree::Mark(const char *classname, TList *los, Int_t abit)
{
   // set bit abit in class classname in list los

   if (!los) return 0;
   TObjString *os = (TObjString*)los->FindObject(classname);
   if (!os) {
      os = new TObjString(classname);
      los->Add(os);
   }
   os->SetBit(abit);
   return os;
}


//______________________________________________________________________________
void TClassTree::Paint(Option_t *)
{
   // Draw the current class setting in fClasses and fStatus

   //delete primitives belonging to a previous paint
   if (gPad) {
      TIter next(gPad->GetListOfPrimitives());
      TObject *obj;
      while((obj=next())) {
         if (obj->TestBit(kIsClassTree)) delete obj;
      }
   }

   Int_t nch      = strlen(GetClasses());
   if (nch == 0) return;
   char *classes  = new char[nch+1];
   gNsons   = new Int_t[fNclasses];
   gNtsons  = new Int_t[fNclasses];
   strcpy(classes,GetClasses());
   Int_t i,j;
   char *derived;
   char *ptr = strtok(classes,":");
    //mark referenced classes
   while (ptr) {
      nch = strlen(ptr);
      if (ptr[0] == '*') {
         j = FindClass(&ptr[1]);
         if (j >= 0) {
            for (i=0;i<fNclasses;i++) {
               derived = fDerived[i];
               if(derived[j]) fCstatus[i] = 1;
            }
         }
      } else if (ptr[0] == '>') {
         for (i=0;i<fNclasses;i++) {
            if(fCnames[i]->Contains(&ptr[1])) {
               FindClassesUsing(i);
               fCstatus[i] = 2;
               break;
            }
         }
      } else if (ptr[nch-1] == '<') {
         ptr[nch-1] = 0;
         for (i=0;i<fNclasses;i++) {
            if(fCnames[i]->Contains(ptr)) {
               FindClassesUsedBy(i);
               FindClassesUsing(i);
               fCstatus[i] = 2;
               break;
            }
         }
      } else if (ptr[nch-1] == '*') {
         ptr[nch-1] = 0;
         for (i=0;i<fNclasses;i++) {
            if(fCnames[i]->Contains(ptr)) fCstatus[i] = 1;
         }
      } else {
         for (i=0;i<fNclasses;i++) {
            if(!fCnames[i]->CompareTo(ptr)) {
               FindClassesUsedBy(i);
               fCstatus[i] = 2;
               break;
            }
         }
      }
      ptr = strtok(0,":");
   }
    //mark base classes of referenced classes
   for (i=0;i<fNclasses;i++) {
      gNsons[i] = gNtsons[i] = 0;
   }
   for (i=0;i<fNclasses;i++) {
      if (fCstatus[i] == 0) continue;
      derived = fDerived[i];
      for (j=0;j<fNclasses;j++) {
         if (j == i) continue;
         if(derived[j]) {
            fCstatus[j] = 1;
         }
      }
   }
    //find parent class number for selected classes
   for (i=0;i<fNclasses;i++) {
      if (fCstatus[i] == 0) continue;
      j = fParents[i];
      if (j >=0 ) {
         fCparent[i] = j;
         gNsons[j]++;
      }
   }
    //compute total number of sons for each node
   Int_t maxlev = 1;
   Int_t icl,ip;
   for (i=0;i<fNclasses;i++) {
      if (fCstatus[i] == 0) continue;
      if (gNsons[i] != 0) continue;
      icl = i;
      Int_t nlevel = 1;
      while (fCparent[icl] >= 0) {
         nlevel++;
         if (nlevel > maxlev) maxlev = nlevel;
         ip = fCparent[icl];
         gNtsons[ip]++;
         icl = ip;
      }
   }

    //compute levels, number and list of sons
   Int_t ndiv=0;
   Int_t nmore = 0;
   for (i=0;i<fNclasses;i++) {
      if (fCstatus[i] == 0) continue;
      if (fCparent[i] < 0) {
         ndiv += gNtsons[i]+1;
         nmore++;
      }
   }
   ndiv++;

   // We are now ready to draw the active nodes
   Float_t xmin = gPad->GetX1();
   Float_t xmax = gPad->GetX2();
   Float_t ymin = gPad->GetY1();
   Float_t ymax = gPad->GetY2();
   Float_t ytop = gYsize/20;
   gXsize = xmax - xmin;
   gYsize = ymax - ymin;
   gDy = (gYsize-ytop)/(ndiv);
   if (gDy > gYsize/10.) gDy = gYsize/10.;
   gDx = 0.9*gXsize/5;
   if (maxlev > 5) gDx = 0.97*gXsize/maxlev;
   Float_t y  = ymax -ytop;
   gLabdx = fLabelDx*gXsize;
   if (gLabdx > 0.95*gDx) gLabdx = 0.95*gDx;
   gLabdy = 0.3*gDy;
   gDxx = 0.5*gXsize/26.;
   Float_t xleft  = xmin +gDxx;
   Float_t ymore  = 0.5*nmore*gDy+fYoffset*gYsize;
   Int_t dxpixels = gPad->XtoAbsPixel(gLabdx) - gPad->XtoAbsPixel(0);
   Int_t dypixels = gPad->YtoAbsPixel(0)     - gPad->YtoAbsPixel(gLabdy);
   gCsize  = dxpixels/(10.*dypixels);
   gCsize = std::max(gCsize,Float_t(0.75));
   gCsize = std::min(gCsize,Float_t(1.1));
   // draw classes level 0
   for (i=0;i<fNclasses;i++) {
      if (fCstatus[i] == 0) continue;
      if (fCparent[i] < 0) {
         y -= gDy+0.5*gNtsons[i]*gDy;
         if (!fCnames[i]->CompareTo("TObject")) y += ymore;
         PaintClass(i,xleft,y);
         y -= 0.5*gNtsons[i]*gDy;
      }
   }

   // show all types of links corresponding to selected options
   if (fShowCod) ShowCod();
   if (fShowHas) ShowHas();
   if (fShowMul) ShowMul();
   if (fShowRef) ShowRef();

   nch      = strlen(GetClasses());
   xmax = 0.3;
   if (nch > 20) xmax = 0.5;
   if (nch > 50) xmax = 0.7;
   if (nch > 70) xmax = 0.9;
   TPaveClass *ptitle = new TPaveClass(xmin +0.1*gXsize/26.
                                      ,ymin+gYsize-0.9*gYsize/20.
                                      ,xmin+xmax*gXsize
                                      ,ymin+gYsize-0.1*gYsize/26.
                                      ,GetClasses(),this);
   ptitle->SetFillColor(42);
   ptitle->SetBit(kIsClassTree);
   ptitle->Draw();

   //cleanup
   delete [] classes;
   delete [] gNsons;
   delete [] gNtsons;
}


//______________________________________________________________________________
void TClassTree::PaintClass(Int_t iclass, Float_t xleft, Float_t y)
{
   // Paint one class level

   Float_t u[2],yu=0,yl=0;
   Int_t ns = gNsons[iclass];
   u[0] = xleft;
   u[1] = u[0]+gDxx;
   if(ns != 0) u[1] = u[0]+gDx;
   TLine *line = new TLine(u[0],y,u[1],y);
   line->SetBit(kIsClassTree);
   line->Draw();
   Int_t icobject = FindClass("TObject");
   TPaveClass *label = new TPaveClass(xleft+gDxx,y-gLabdy,xleft+gLabdx,y+gLabdy,fCnames[iclass]->Data(),this);
   char *derived = fDerived[iclass];
   if (icobject >= 0 && !derived[icobject]) label->SetFillColor(30);
   if (fCstatus[iclass] > 1) label->SetFillColor(kYellow);
   label->SetTextSize(gCsize);
   label->SetBit(kIsClassTree);
   label->SetToolTipText(fCtitles[iclass]->Data(),500);
   label->Draw();
   if (ns == 0) return;

   // drawing sons
   y +=  0.5*gNtsons[iclass]*gDy;
   Int_t first =0;
   for (Int_t i=0;i<fNclasses;i++) {
      if(fCparent[i] != iclass) continue;
      if (gNtsons[i] > 1) y -= 0.5*gNtsons[i]*gDy;
      else               y -= 0.5*gDy;
      if (!first) {first=1; yu = y;}
      PaintClass(i,u[1],y);
      yl = y;
      if (gNtsons[i] > 1) y -= 0.5*gNtsons[i]*gDy;
      else               y -= 0.5*gDy;
   }
   if (ns == 1) return;
   line = new TLine(u[1],yl,u[1],yu);
   line->SetBit(kIsClassTree);
   line->Draw();
}


//______________________________________________________________________________
void TClassTree::SaveAs(const char *filename, Option_t *option) const
{
   // save current configuration in a Root file
   // if filename is blank, the name of the file will be the current objectname.root
   // all the current settings are preserved
   // the Root file produced can be looked at by a another Root session
   // with no access to the original classes.
   // By default a message is printed. Specify option "Q" to remove the message

   if (gDirectory) gDirectory->SaveObjectAs(this,filename,option);
}


//______________________________________________________________________________
void TClassTree::ScanClasses(Int_t iclass)
{
   //  Select all classes used by/referenced/referencing the class number iclass
   //  and build the list of these classes

   Int_t ic, icl;
   TList *los = fLinks[iclass];
   TList *losref = 0;
   TObjString *os;

   // scan list of data members
   // =========================
   TClass *cl = fCpointer[iclass];
   TDataMember *dm;
   TList *lm = cl->GetListOfDataMembers();
   if (lm) {
      TIter      next(lm);
      Int_t imember = 0;
      while ((dm = (TDataMember *) next())) {
         imember++;
         ic = FindClass(dm->GetTypeName());
         if (ic < 0 || ic == iclass) continue;
         losref = fLinks[ic];
         os = Mark(fCnames[ic]->Data(),los,kUsedByData);
         os->SetBit(kIsaPointer,dm->IsaPointer());
         os->SetBit(kIsBasic,dm->IsBasic());
         os->SetUniqueID(imember);
         Mark(fCnames[iclass]->Data(),losref,kUsingData);
      }
   }

   // scan base classes
   // =================
   char *derived = fDerived[iclass];
   TBaseClass *clbase;
   Int_t numb = 0;
   TList *lb = fCpointer[iclass]->GetListOfBases();
   if (lb) {
      TIter nextb(lb);
      while ((clbase = (TBaseClass*)nextb())) {
         numb++;
         if (numb == 1) continue;
         ic = FindClass(clbase->GetName());
         derived[ic] = 2;
      }
      for (ic=0;ic<fNclasses;ic++) {
         if (ic == iclass) continue;
         if (derived[ic]) {
            losref = fLinks[ic];
            Mark(fCnames[ic]->Data(),los,kUsedByClass);
            Mark(fCnames[iclass]->Data(),losref,kUsingClass);
         }
      }
   }

   // scan member functions
   // =====================
   char *star, *cref;
   TMethod *method;
   TMethodArg *methodarg;
   TList *lf = cl->GetListOfMethods();
   if (lf) {
      TIter nextm(lf);
      char name[1000];
      while ((method = (TMethod*) nextm())) {
         // check return type
         strcpy(name,method->GetReturnTypeName());
         star = strstr(name,"*");
         if (star) *star = 0;
         cref = strstr(name,"&");
         if (cref) *cref = 0;
         ic = FindClass(name);
         if (ic < 0 || ic == iclass) continue;
         losref = fLinks[ic];
         Mark(fCnames[ic]->Data(),los,kUsedByFunc);
         Mark(fCnames[iclass]->Data(),losref,kUsingFunc);

         // now loop on all method arguments
         // ================================
         TIter nexta(method->GetListOfMethodArgs());
         while ((methodarg = (TMethodArg*) nexta())) {
            strcpy(name,methodarg->GetTypeName());
            star = strstr(name,"*");
            if (star) *star = 0;
            cref = strstr(name,"&");
            if (cref) *cref = 0;
            ic = FindClass(name);
            if (ic < 0 || ic == iclass) continue;
            losref = fLinks[ic];
            Mark(fCnames[ic]->Data(),los,kUsedByFunc);
            Mark(fCnames[iclass]->Data(),losref,kUsingFunc);
         }
      }
   }

   // Look into the source code to search the list of includes
   // here we assume that include file names are classes file names
   // we stop reading the code when
   //   - a class member function is found
   //   - any class constructor is found
   if (!cl->GetImplFileName() || !cl->GetImplFileName()[0])
      return;

   const char *source = gSystem->BaseName( gSystem->UnixPathName(cl->GetImplFileName()));
   char *sourceName = gSystem->Which( fSourceDir.Data(), source , kReadPermission );
   if (!sourceName) return;
   char cname[1000];
   sprintf(cname,"%s::",fCnames[iclass]->Data());
   Int_t ncn = strlen(cname);
       // open source file
   ifstream sourceFile;
   sourceFile.open( sourceName, ios::in );
   Int_t nlines = 0;
   if( sourceFile.good() ) {
      const Int_t kMAXLEN=1500;
      char line[kMAXLEN];
      while( !sourceFile.eof() ) {
         sourceFile.getline( line, kMAXLEN-1 );
         if( sourceFile.eof() ) break;
         Int_t nblank = strspn(line," ");
         if (!strncmp(&line[nblank],"//",2)) continue;
         char *cc = strstr(line,"::");
         if (cc) {
            *cc = 0;
            if (!strncmp(&line[nblank],cname,ncn)) break;  //reach class member function
            Int_t nl = strlen(&line[nblank]);
            if (!strncmp(&line[nblank],cc+2,nl))   break;  //reach any class constructor
         }
         nlines++; if (nlines > 1000) break;
         char *inc = strstr(line,"#include");
         if (inc) {
            char *ch = strstr(line,".h");
            if (!ch) continue;
            *ch = 0;
            char *start = strstr(line,"<");
            if (!start) start = strstr(line,"\"");
            if (!start) continue;
            start++;
            while ((start < ch) && (*start == ' ')) start++;
            icl = FindClass(start);
            if (icl < 0 || icl == iclass) continue;
            // mark this include being used by this class
            losref = fLinks[icl];
            Mark(fCnames[icl]->Data(),los,kUsedByCode1);
            Mark(fCnames[icl]->Data(),los,kUsedByCode);
            Mark(fCnames[iclass]->Data(),losref,kUsingCode);
            // and also the base classes of the class in the include
            derived = fDerived[icl];
            for (ic=0;ic<fNclasses;ic++) {
               if (ic == icl) continue;
               if (derived[ic]) {
                  losref = fLinks[ic];
                  Mark(fCnames[ic]->Data(),los,kUsedByCode);
                  Mark(fCnames[iclass]->Data(),losref,kUsingCode);
               }
            }
         }
      }
   }
   sourceFile.close();
}


//______________________________________________________________________________
void TClassTree::SetClasses(const char *classes, Option_t *)
{
   // Set the list of classes for which the hierarchy is to be drawn
   // See Paint for the syntax

   if (classes == 0) return;
   fClasses = classes;
   for (Int_t i=0;i<fNclasses;i++) {
      fCstatus[i]  = 0;
      fCparent[i] = -1;
   }
   if (gPad) Paint();
}


//______________________________________________________________________________
void TClassTree::SetLabelDx(Float_t labeldx)
{
   // Set the size along x of the TPavellabel showing the class name

   fLabelDx = labeldx;
   if (gPad) Paint();
}


//______________________________________________________________________________
void TClassTree::SetYoffset(Float_t offset)
{
   // Set the offset at the top of the picture
   // The default offset is computed automatically taking into account
   // classes not inheriting from TObject.

   fYoffset = offset;
   if (gPad) Paint();
}


//______________________________________________________________________________
void TClassTree::ShowClassesUsedBy(const char *classes)
{
   // mark classes used by the list of classes in classes

   Int_t i,j;
   Int_t nch = strlen(classes);
   char *ptr = new char[nch+1];
   strcpy(ptr,classes);
   if (ptr[0] == '*') {
      i = FindClass(&ptr[1]);
      if (i >= 0) {
         char *derived = fDerived[i];
         for (j=0;j<fNclasses;j++) {
            if(derived[j]) FindClassesUsedBy(j);
         }
      }
   } else if (ptr[nch-1] == '*') {
      ptr[nch-1] = 0;
      for (j=0;j<fNclasses;j++) {
         if(fCnames[j]->Contains(ptr)) FindClassesUsedBy(j);
      }
   } else {
      for (j=0;j<fNclasses;j++) {
         if(!fCnames[j]->CompareTo(ptr)) FindClassesUsedBy(j);
      }
   }
   delete [] ptr;
   if (gPad) Paint();
}


//______________________________________________________________________________
void TClassTree::ShowClassesUsing(const char *classes)
{
   // mark classes using any class in the list of classes in classes

   Int_t i,j;
   Int_t nch = strlen(classes);
   char *ptr = new char[nch+1];
   strcpy(ptr,classes);
   if (ptr[0] == '*') {
      i = FindClass(&ptr[1]);
      if (i >= 0) {
         char *derived = fDerived[i];
         for (j=0;j<fNclasses;j++) {
            if(derived[j]) FindClassesUsing(j);
         }
      }
   } else if (ptr[nch-1] == '*') {
      ptr[nch-1] = 0;
      for (j=0;j<fNclasses;j++) {
         if(fCnames[j]->Contains(ptr)) FindClassesUsing(j);
      }
   } else {
      for (j=0;j<fNclasses;j++) {
         if(!fCnames[j]->CompareTo(ptr)) FindClassesUsing(j);
      }
   }
   delete [] ptr;
   if (gPad) Paint();
}


//______________________________________________________________________________
void TClassTree::ShowCod()
{
   // Draw the Code References relationships

   TIter next(gPad->GetListOfPrimitives());
   TObject *obj;
   TObjString *os;
   TPaveClass *pave;
   Int_t ic,icl;
   Float_t x,y,x1,y1;
   //iterate on all TPaveClass objects in the pad
   while((obj=next())) {
      if (obj->InheritsFrom(TPaveClass::Class())) {
         pave = (TPaveClass*)obj;
         icl = FindClass(pave->GetLabel());
         if (icl < 0) continue;
         char *derived = fDerived[icl];
         x  = 0.5*(pave->GetX1() + pave->GetX2());
         y  = 0.5*(pave->GetY1() + pave->GetY2());
         TIter nextos(fLinks[icl]);
         //iterate on all classes in the list of classes of this class
         while((os=(TObjString*)nextos())) {
            if (!os->TestBit(kUsedByCode1)) continue;
            ic = FindClass(os->GetName());
            if (derived[ic]) continue;
            FindClassPosition(os->GetName(),x1,y1);
            if (x1 == 0 || y1 == 0) continue; //may be pointed class was not drawn
            TArrow *arrow = new TArrow(x,y,x1,y1,0.008,"|>");
            arrow->SetLineColor(kGreen);
            arrow->SetFillColor(kGreen);
            arrow->SetBit(kIsClassTree);
            arrow->Draw();
         }
      }
   }
}


//______________________________________________________________________________
void TClassTree::ShowHas()
{
   // Draw the "Has a" relationships

   TIter next(gPad->GetListOfPrimitives());
   TObject *obj;
   TObjString *os;
   TPaveClass *pave;
   Int_t icl;
   Float_t y,x1,y1,dx;
   //iterate on all TPaveClass objects in the pad
   while((obj=next())) {
      if (obj->InheritsFrom(TPaveClass::Class())) {
         pave = (TPaveClass*)obj;
         icl = FindClass(pave->GetLabel());
         if (icl < 0) continue;
         y  = 0.5*(pave->GetY1() + pave->GetY2());
         Int_t nmembers = fNdata[icl];
         if (nmembers == 0) continue;
         dx = (pave->GetX2() - pave->GetX1())/nmembers;
         TIter nextos(fLinks[icl]);
         //iterate on all classes in the list of classes of this class
         while((os=(TObjString*)nextos())) {
            if (!os->TestBit(kUsedByData)) continue;
            if (os->TestBit(kIsaPointer)) continue;
            if (os->TestBit(kIsBasic)) continue;
            FindClassPosition(os->GetName(),x1,y1);
            if (x1 == 0 || y1 == 0) continue; //may be base class was not drawn
            Int_t imember = os->GetUniqueID();
            TLine *line = new TLine(pave->GetX1()+(imember+0.5)*dx,y,x1,y1);
            line->SetLineStyle(3);
            line->SetLineColor(6);
            line->SetBit(kIsClassTree);
            line->Draw();
         }
      }
   }
}


//______________________________________________________________________________
void TClassTree::ShowLinks(Option_t *option)
{
   // Set link options in the ClassTree object
   //
   //   "C"  show References from code
   //   "H"  show Has a relations
   //   "M"  show Multiple Inheritance
   //   "R"  show References from data members

   TString opt = option;
   opt.ToUpper();
   fShowCod = fShowHas = fShowMul = fShowRef = 0;
   if (opt.Contains("C")) fShowCod = 1;
   if (opt.Contains("H")) fShowHas = 1;
   if (opt.Contains("M")) fShowMul = 1;
   if (opt.Contains("R")) fShowRef = 1;
   if (gPad) Paint();
}


//______________________________________________________________________________
void TClassTree::ShowMul()
{
   // Draw the Multiple inheritance relationships

   TIter next(gPad->GetListOfPrimitives());
   TObject *obj;
   TObjString *os;
   TPaveClass *pave;
   Int_t ic,icl;
   Float_t x,y,x1,y1;
   //iterate on all TPaveClass objects in the pad
   while((obj=next())) {
      if (obj->InheritsFrom(TPaveClass::Class())) {
         pave = (TPaveClass*)obj;
         icl = FindClass(pave->GetLabel());
         if (icl < 0) continue;
         char *derived = fDerived[icl];
         x = 0.5*(pave->GetX1() + pave->GetX2());
         y = 0.5*(pave->GetY1() + pave->GetY2());
         TIter nextos(fLinks[icl]);
         //iterate on all classes in the list of classes of this class
         while((os=(TObjString*)nextos())) {
            if (!os->TestBit(kUsedByClass)) continue;
            ic = FindClass(os->GetName());
            if (derived[ic] != 2) continue; //keep only multiple inheritance
            FindClassPosition(os->GetName(),x1,y1);
            if (x1 == 0 || y1 == 0) continue; //may be base class was not drawn
            TLine *line = new TLine(x,y,x1,y1);
            line->SetBit(kIsClassTree);
            line->SetLineStyle(2);
            line->SetLineColor(kBlue);
            line->Draw();
         }
      }
   }
}


//______________________________________________________________________________
void TClassTree::ShowRef()
{
   // Draw the References relationships (other than inheritance or composition)

   TIter next(gPad->GetListOfPrimitives());
   TObject *obj;
   TObjString *os;
   TPaveClass *pave;
   Int_t ic,icl;
   Float_t y,x1,y1,dx;
   Int_t icc = FindClass("TClass");
   //iterate on all TPaveClass objects in the pad
   while((obj=next())) {
      if (obj->InheritsFrom(TPaveClass::Class())) {
         pave = (TPaveClass*)obj;
         icl = FindClass(pave->GetLabel());
         if (icl < 0) continue;
         y  = 0.5*(pave->GetY1() + pave->GetY2());
         Int_t nmembers = fNdata[icl];
         if (nmembers == 0) continue;
         dx = (pave->GetX2() - pave->GetX1())/nmembers;
         TIter nextos(fLinks[icl]);
         //iterate on all classes in the list of classes of this class
         while((os=(TObjString*)nextos())) {
            if (!os->TestBit(kUsedByData)) continue;
            ic = FindClass(os->GetName());
            if (!os->TestBit(kIsaPointer)) continue;
            if (os->TestBit(kIsBasic)) continue;
            if (ic == icc) continue; // do not show relations with TClass
            FindClassPosition(os->GetName(),x1,y1);
            if (x1 == 0 || y1 == 0) continue; //may be pointed class was not drawn
            Int_t imember = os->GetUniqueID();
            TArrow *arrow = new TArrow(pave->GetX1()+(imember+0.5)*dx,y,x1,y1,0.008,"|>");
            arrow->SetLineColor(kRed);
            arrow->SetFillColor(kRed);
            arrow->SetBit(kIsClassTree);
            arrow->Draw();
         }
      }
   }
}


//______________________________________________________________________________
void TClassTree::Streamer(TBuffer &R__b)
{
   // Stream an object of class TClassTree.
   // the status of the object is saved and can be replayed in a subsequent session

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