{ // // This macro displays the Tree data structures //Author: Rene Brun gROOT->Reset(); c1 = new TCanvas("c1","Tree Data Structure",200,10,750,940); c1->Range(0,-0.1,1,1.15); gBenchmark->Start("tree"); Int_t branchcolor = 26; Int_t leafcolor = 30; Int_t basketcolor = 42; Int_t offsetcolor = 43; TPaveLabel title(.3,1.05,.8,1.13,c1->GetTitle()); title.SetFillColor(16); title.Draw(); TPaveText tree(.01,.75,.15,1.00); tree.SetFillColor(18); tree.SetTextAlign(12); TText *tnt = tree.AddText("Tree"); tnt.SetTextAlign(22); tnt.SetTextSize(0.030); tree.AddText("fScanField"); tree.AddText("fMaxEventLoop"); tree.AddText("fMaxVirtualSize"); tree.AddText("fEntries"); tree.AddText("fDimension"); tree.AddText("fSelectedRows"); tree.Draw(); TPavesText farm(.01,1.02,.15,1.1,9,"tr"); TText *tfarm = farm.AddText("CHAIN"); tfarm.SetTextSize(0.024); farm.AddText("Collection"); farm.AddText("of Trees"); farm.Draw(); TLine link(.15,.92,.80,.92); link.SetLineWidth(2); link.SetLineColor(1); link.Draw(); link.DrawLine(.21,.87,.21,.275); link.DrawLine(.23,.87,.23,.375); link.DrawLine(.25,.87,.25,.775); link.DrawLine(.41,.25,.41,-.025); link.DrawLine(.43,.25,.43,.075); link.DrawLine(.45,.25,.45,.175); TPaveLabel branch0(.20,.87,.35,.97,"Branch 0"); branch0.SetTextSize(0.35); branch0.SetFillColor(branchcolor); branch0.Draw(); TPaveLabel branch1(.40,.87,.55,.97,"Branch 1"); branch1.SetTextSize(0.35); branch1.SetFillColor(branchcolor); branch1.Draw(); TPaveLabel branch2(.60,.87,.75,.97,"Branch 2"); branch2.SetTextSize(0.35); branch2.SetFillColor(branchcolor); branch2.Draw(); TPaveLabel branch3(.80,.87,.95,.97,"Branch 3"); branch3.SetTextSize(0.35); branch3.SetFillColor(branchcolor); branch3.Draw(); TPaveLabel leaf0(.4,.75,.5,.8,"Leaf 0"); leaf0.SetFillColor(leafcolor); leaf0.Draw(); TPaveLabel leaf1(.6,.75,.7,.8,"Leaf 1"); leaf1.SetFillColor(leafcolor); leaf1.Draw(); TPaveLabel leaf2(.8,.75,.9,.8,"Leaf 2"); leaf2.SetFillColor(leafcolor); leaf2.Draw(); TPaveText firstevent(.4,.35,.9,.4); firstevent.AddText("First event of each basket"); firstevent.AddText("Array of fMaxBaskets Integers"); firstevent.SetFillColor(basketcolor); firstevent.Draw(); TPaveLabel basket0(.4,.25,.5,.3,"Basket 0"); basket0.SetFillColor(basketcolor); basket0.Draw(); TPaveLabel basket1(.6,.25,.7,.3,"Basket 1"); basket1.SetFillColor(basketcolor); basket1.Draw(); TPaveLabel basket2(.8,.25,.9,.3,"Basket 2"); basket2.SetFillColor(basketcolor); basket2.Draw(); TPaveText offset(.55,.15,.9,.2); offset.AddText("Offset of events in fBuffer"); offset.AddText("Array of fEventOffsetLen Integers"); offset.AddText("(if variable length structure)"); offset.SetFillColor(offsetcolor); offset.Draw(); TPaveText buffer(.55,.05,.9,.1); buffer.AddText("Basket buffer"); buffer.AddText("Array of fBasketSize chars"); buffer.SetFillColor(offsetcolor); buffer.Draw(); TPaveText zipbuffer(.55,-.05,.75,.0); zipbuffer.AddText("Basket compressed buffer"); zipbuffer.AddText("(if compression)"); zipbuffer.SetFillColor(offsetcolor); zipbuffer.Draw(); TArrow ar1; ar1.SetLineWidth(2); ar1.SetLineColor(1); ar1.SetFillStyle(1001); ar1.SetFillColor(1); ar1.DrawArrow(.21,.275,.39,.275,0.015,"|>"); ar1.DrawArrow(.23,.375,.39,.375,0.015,"|>"); ar1.DrawArrow(.25,.775,.39,.775,0.015,"|>"); ar1.DrawArrow(.50,.775,.59,.775,0.015,"|>"); ar1.DrawArrow(.70,.775,.79,.775,0.015,"|>"); ar1.DrawArrow(.50,.275,.59,.275,0.015,"|>"); ar1.DrawArrow(.70,.275,.79,.275,0.015,"|>"); ar1.DrawArrow(.45,.175,.54,.175,0.015,"|>"); ar1.DrawArrow(.43,.075,.54,.075,0.015,"|>"); ar1.DrawArrow(.41,-.025,.54,-.025,0.015,"|>"); TLine ldot(.95,.92,.99,.92); ldot.SetLineStyle(3); ldot.Draw(); ldot.DrawLine(.9,.775,.99,.775); ldot.DrawLine(.9,.275,.99,.275); ldot.DrawLine(.55,.05,.55,0); ldot.DrawLine(.9,.05,.75,0); TText pname(.46,.21,"fEventOffset"); pname.SetTextFont(72); pname.SetTextSize(0.018); pname.Draw(); pname.DrawText(.44,.11,"fBuffer"); pname.DrawText(.42,.01,"fZipBuffer"); pname.DrawText(.26,.81,"fLeaves = TObjArray of TLeaf"); pname.DrawText(.24,.40,"fBasketEvent"); pname.DrawText(.22,.31,"fBaskets = TObjArray of TBasket"); pname.DrawText(.20,1.0,"fBranches = TObjArray of TBranch"); TPaveText ntleaf(0.30,.42,.62,.7); ntleaf.SetTextSize(0.014); ntleaf.SetFillColor(leafcolor); ntleaf.SetTextAlign(12); ntleaf.AddText("fLen: number of fixed elements"); ntleaf.AddText("fLenType: number of bytes of data type"); ntleaf.AddText("fOffset: relative to Leaf0-fAddress"); ntleaf.AddText("fNbytesIO: number of bytes used for I/O"); ntleaf.AddText("fIsPointer: True if pointer"); ntleaf.AddText("fIsRange: True if leaf has a range"); ntleaf.AddText("fIsUnsigned: True if unsigned"); ntleaf.AddText("*fLeafCount: points to Leaf counter"); ntleaf.AddText(" "); ntleaf.AddLine(0,0,0,0); ntleaf.AddText("fName = Leaf name"); ntleaf.AddText("fTitle = Leaf type (see Type codes)"); ntleaf.Draw(); TPaveText type(.65,.42,.95,.7); type.SetTextAlign(12); type.SetFillColor(leafcolor); type.AddText(" "); type.AddText("C : a character string"); type.AddText("B : an 8 bit signed integer"); type.AddText("b : an 8 bit unsigned integer"); type.AddText("S : a 16 bit signed short integer"); type.AddText("s : a 16 bit unsigned short integer"); type.AddText("I : a 32 bit signed integer"); type.AddText("i : a 32 bit unsigned integer"); type.AddText("F : a 32 bit floating point"); type.AddText("D : a 64 bit floating point"); type.AddText("TXXXX : a class name TXXXX"); type.Draw(); TPaveLabel typecode(.7,.68,.9,.72,"fType codes"); typecode.SetFillColor(leafcolor); typecode.Draw(); ldot.DrawLine(.4,.75,.30,.7); ldot.DrawLine(.5,.75,.62,.7); TPaveText ntbasket(0.02,-0.07,0.35,.25); ntbasket.SetFillColor(basketcolor); ntbasket.SetTextSize(0.014); ntbasket.SetTextAlign(12); ntbasket.AddText("fNbytes: Size of compressed Basket"); ntbasket.AddText("fObjLen: Size of uncompressed Basket"); ntbasket.AddText("fDatime: Date/Time when written to store"); ntbasket.AddText("fKeylen: Number of bytes for the key"); ntbasket.AddText("fCycle : Cycle number"); ntbasket.AddText("fSeekKey: Pointer to Basket on file"); ntbasket.AddText("fSeekPdir: Pointer to directory on file"); ntbasket.AddText("fClassName: 'TBasket'"); ntbasket.AddText("fName: Branch name"); ntbasket.AddText("fTitle: Tree name"); ntbasket.AddText(" "); ntbasket.AddLine(0,0,0,0); ntbasket.AddText("fNevBuf: Number of events in Basket"); ntbasket.AddText("fLast: pointer to last used byte in Basket"); ntbasket.Draw(); ldot.DrawLine(.4,.3,0.02,0.25); ldot.DrawLine(.5,.25,0.35,-.07); ldot.DrawLine(.5,.3,0.35,0.25); TPaveText ntbranch(0.02,0.40,0.18,0.68); ntbranch.SetFillColor(branchcolor); ntbranch.SetTextSize(0.015); ntbranch.SetTextAlign(12); ntbranch.AddText("fBasketSize"); ntbranch.AddText("fEventOffsetLen"); ntbranch.AddText("fMaxBaskets"); ntbranch.AddText("fEntries"); ntbranch.AddText("fAddress of Leaf0"); ntbranch.AddText(" "); ntbranch.AddLine(0,0,0,0); ntbranch.AddText("fName: Branchname"); ntbranch.AddText("fTitle: leaflist"); ntbranch.Draw(); ldot.DrawLine(.2,.97,.02,.68); ldot.DrawLine(.35,.97,.18,.68); ldot.DrawLine(.35,.87,.18,.40); TPavesText basketstore(.8,-0.088,0.952,-0.0035,7,"tr"); basketstore.SetFillColor(28); basketstore.AddText("Baskets"); basketstore.AddText("Stores"); basketstore.Draw(); c1->Update(); gBenchmark->Show("tree"); }