{
   //
   // This macro displays the ROOT architecture
   //Author: Rene Brun
   
   gROOT->Reset();
   c1 = new TCanvas("c1","Dictionary Architecture",20,10,750,930);
   c1->SetBorderSize(0);
   c1->Range(0,0,20.5,26);


   TPaveLabel title(4,24,16,25.5,c1->GetTitle());
   title.SetFillColor(46);
   title.Draw();

   TPavesText dll(0.5,19,4.5,23,5,"tr");
   dll.SetFillColor(39);
   dll.SetTextSize(0.023);
   dll.AddText(" ");
   dll.AddText("Dynamically");
   dll.AddText("Linked");
   dll.AddText("Libraries");
   dll.Draw();
   TPaveLabel dlltitle(1.5,22.6,3.5,23.3,"DLLs");
   dlltitle.SetFillColor(28);
   dlltitle.Draw();

   TPavesText cpp(5.5,19,9.5,23,5,"tr");
   cpp.SetTextSize(0.023);
   cpp.AddText(" ");
   cpp.AddText("Commented");
   cpp.AddText("Header");
   cpp.AddText("Files");
   cpp.Draw();
   TPaveLabel cpptitle(6.5,22.6,8.5,23.3,"C++");
   cpptitle.SetFillColor(28);
   cpptitle.Draw();

   TPavesText odl(10.5,19,14.5,23,5,"tr");
   odl.SetTextSize(0.023);
   odl.AddText(" ");
   odl.AddText("Objects");
   odl.AddText("Description");
   odl.AddText("Files");
   odl.Draw();
   TPaveLabel odltitle(11.5,22.6,13.5,23.3,"ODL");
   odltitle.SetFillColor(28);
   odltitle.Draw();

   TPavesText idl(15.5,19,19.5,23,5,"tr");
   idl.SetTextSize(0.023);
   idl.AddText(" ");
   idl.AddText("Interface");
   idl.AddText("Definition");
   idl.AddText("Language");
   idl.Draw();
   TPaveLabel idltitle(16.5,22.6,18.5,23.3,"IDL");
   idltitle.SetFillColor(28);
   idltitle.Draw();

   TWbox p1(7.8,10,13.2,17,11,12,1);
   p1.Draw();
   TText pro1(10.5,15.8,"Process 1");
   pro1.SetTextAlign(21);
   pro1.SetTextSize(0.03);
   pro1.Draw();
   TPaveText p1dict(8.8,13.8,12.2,15.6);
   p1dict.SetTextSize(0.023);
   p1dict.AddText("Dictionary");
   p1dict.AddText("in memory");
   p1dict.Draw();
   TPavesText p1object(8.6,10.6,12.1,13.0,5,"tr");
   p1object.SetTextSize(0.023);
   p1object.AddText("Objects");
   p1object.AddText("in memory");
   p1object.Draw();
   TWbox p2(15.5,10,20,17,11,12,1);
   p2.Draw();
   TText pro2(17.75,15.8,"Process 2");
   pro2.SetTextAlign(21);
   pro2.SetTextSize(0.03);
   pro2.Draw();
   TPaveText p2dict(16,13.8,19.5,15.6);
   p2dict.SetTextSize(0.023);
   p2dict.AddText("Dictionary");
   p2dict.AddText("in memory");
   p2dict.Draw();
   TPavesText p2object(16.25,10.6,19.25,13.0,5,"tr");
   p2object.SetTextSize(0.023);
   p2object.AddText("Objects");
   p2object.AddText("in memory");
   p2object.Draw();
   TWbox stub1(12.9,11.5,13.6,15.5,49,3,1);
   stub1.Draw();
   TText tstub1(13.25,13.5,"Stub1");
   tstub1.SetTextSize(0.025);
   tstub1.SetTextAlign(22);
   tstub1.SetTextAngle(90);
   tstub1.Draw();
   TWbox stub2(15.1,11.5,15.8,15.5,49,3,1);
   stub2.Draw();
   TText tstub2(15.45,13.5,"Stub2");
   tstub2.SetTextSize(0.025);
   tstub2.SetTextAlign(22);
   tstub2.SetTextAngle(-90);
   tstub2.Draw();
   TArrow ar1;
   ar1.SetLineWidth(6);
   ar1.SetLineColor(1);
   ar1.SetFillStyle(1001);
   ar1.SetFillColor(1);
   ar1.DrawArrow(13.5,14,15,14,0.012,"|>");
   ar1.DrawArrow(15.1,13,13.51,13,0.012,"|>");

   TPaveText cint(1.0,15.0,8.0,17.5);
   cint.SetFillColor(39);
   cint.SetBorderSize(1);
   cint.SetTextSize(0.023);
   cint.AddText("C++ Interpreter");
   cint.AddText("and program builder");
   cint.Draw();
   TPaveText command(2.5,13.4,8.0,14.5);
   command.SetTextSize(0.023);
   command.SetFillColor(39);
   command.SetBorderSize(1);
   command.AddText("Command Thread");
   command.Draw();
   TPavesText view(1.0,9.5,7.7,12.6,3,"tr");
   view.SetFillColor(39);
   view.SetBorderSize(2);
   view.SetTextSize(0.023);
   view.AddText("Viewer Thread(s)");
   view.AddText("Picking");
   view.AddText("Context Menus");
   view.AddText("Inspector/Browser");
   view.Draw();

   TPavesText web(0.5,5,6,8.5,5,"tr");
   web.SetTextSize(0.023);
   web.AddText(" ");
   web.AddText("generated");
   web.AddText("automatically");
   web.AddText("from dictionary");
   web.AddText("and source files");
   web.Draw();
   TPaveLabel webtitle(1.5,8.1,5.0,8.8,"HTML Files");
   webtitle.SetFillColor(28);
   webtitle.Draw();

   TPavesText printed(0.5,1.0,6,4,5,"tr");
   printed.SetTextSize(0.023);
   printed.AddText(" ");
   printed.AddText("generated");
   printed.AddText("automatically");
   printed.AddText("from HTML files");
   printed.Draw();
   TPaveLabel printedtitle(1.5,3.6,5.0,4.3,"Printed Docs");
   printedtitle.SetFillColor(28);
   printedtitle.Draw();

   TBox box1(0.2,9.2,14.25,17.8);
   box1.SetFillStyle(0);
   box1.SetLineStyle(2);
   box1.Draw();

   TBox box2(10.2,18.7,20.2,23.6);
   box2.SetFillStyle(0);
   box2.SetLineStyle(3);
   box2.Draw();

   ar1.DrawArrow(2.5,17.5,2.5,18.9,0.012,"|>");
   ar1.DrawArrow(5.5,9.2,5.5,8.7,0.012,"|>");
   ar1.DrawArrow(5.5,5,5.5,4.2,0.012,"|>");
   ar1.DrawArrow(8.5,9.2,8.5,8.2,0.012,"|>");
   ar1.DrawArrow(9.5,8.1,9.5,9.0,0.012,"|>");
   ar1.DrawArrow(6.5,19,6.5,17.6,0.012,"|>");
   ar1.DrawArrow(8.5,19,8.5,17.1,0.012,"|>");
   ar1.DrawArrow(11.5,19,11.5,17.1,0.012,"|>");


   TPaveLabel ootitle(10.5,7.8,17,8.8,"Objects Data Base");
   ootitle.SetFillColor(28);
   ootitle.Draw();

   TPad *pio = new TPad("pio","pio",0.37,0.02,0.95,0.31,49);
   pio->Range(0,0,12,8);
   pio->Draw();
   pio->cd();
   TPavesText raw(0.5,1,2.5,6,7,"tr");
   raw.Draw();
   TPavesText dst1(4,1,5,3,7,"tr");
   dst1.Draw();
   TPavesText dst2(6,1,7,3,7,"tr");
   dst2.Draw();
   TPavesText dst3(4,4,5,6,7,"tr");
   dst3.Draw();
   TPavesText dst4(6,4,7,6,7,"tr");
   dst4.Draw();
   Float_t xlow = 8.5;
   Float_t ylow = 1;
   Float_t dx   = 0.5;
   Float_t dy   = 0.5;
   for (Int_t j=1;j<9;j++) {
      Float_t y0 = ylow + (j-1)*0.7;
      Float_t y1 = y0 + dy;
      for (Int_t i=1;i<5;i++) {
         Float_t x0 = xlow +(i-1)*0.6;
         Float_t x1 = x0 + dx;
         TPavesText *anal = new TPavesText(x0,y0,x1,y1,7,"tr");
         anal.Draw();
      }
   }
   TText daq;
   daq.SetTextSize(0.07);
   daq.SetTextAlign(22);
   daq.DrawText(1.5,7.3,"DAQ");
   daq.DrawText(6,7.3,"DST");
   daq.DrawText(10.,7.3,"Physics Analysis");
   daq.DrawText(1.5,0.7,"Events");
   daq.DrawText(1.5,0.3,"Containers");
   daq.DrawText(6,0.7,"Tracks/Hits");
   daq.DrawText(6,0.3,"Containers");
   daq.DrawText(10.,0.7,"Attributes");
   daq.DrawText(10.,0.3,"Containers");

   c1.cd();
}
