From $ROOTSYS/tutorials/graphics/archi.C

void archi() {
   //
   // This macro displays the ROOT architecture
   //Author: Rene Brun

   TCanvas *c1 = new TCanvas("c1","Dictionary Architecture",20,10,750,930);
   c1->SetBorderSize(0);
   c1->Range(0,0,20.5,26);


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

   TPavesText *dll = new TPavesText(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 = new TPaveLabel(1.5,22.6,3.5,23.3,"DLLs");
   dlltitle->SetFillColor(28);
   dlltitle->Draw();

   TPavesText *cpp = new TPavesText(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 = new TPaveLabel(6.5,22.6,8.5,23.3,"C++");
   cpptitle->SetFillColor(28);
   cpptitle->Draw();

   TPavesText *odl = new TPavesText(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 = new TPaveLabel(11.5,22.6,13.5,23.3,"ODL");
   odltitle->SetFillColor(28);
   odltitle->Draw();

   TPavesText *idl = new TPavesText(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 = new TPaveLabel(16.5,22.6,18.5,23.3,"IDL");
   idltitle->SetFillColor(28);
   idltitle->Draw();

   TWbox *p1 = new TWbox(7.8,10,13.2,17,11,12,1);
   p1->Draw();
   TText *pro1 = new TText(10.5,15.8,"Process 1");
   pro1->SetTextAlign(21);
   pro1->SetTextSize(0.03);
   pro1->Draw();
   TPaveText *p1dict = new TPaveText(8.8,13.8,12.2,15.6);
   p1dict->SetTextSize(0.023);
   p1dict->AddText("Dictionary");
   p1dict->AddText("in memory");
   p1dict->Draw();
   TPavesText *p1object = new TPavesText(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 = new TWbox(15.5,10,20,17,11,12,1);
   p2->Draw();
   TText *pro2 = new TText(17.75,15.8,"Process 2");
   pro2->SetTextAlign(21);
   pro2->SetTextSize(0.03);
   pro2->Draw();
   TPaveText *p2dict = new TPaveText(16,13.8,19.5,15.6);
   p2dict->SetTextSize(0.023);
   p2dict->AddText("Dictionary");
   p2dict->AddText("in memory");
   p2dict->Draw();
   TPavesText *p2object = new TPavesText(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 = new TWbox(12.9,11.5,13.6,15.5,49,3,1);
   stub1->Draw();
   TText *tstub1 = new TText(13.25,13.5,"Stub1");
   tstub1->SetTextSize(0.025);
   tstub1->SetTextAlign(22);
   tstub1->SetTextAngle(90);
   tstub1->Draw();
   TWbox *stub2 = new TWbox(15.1,11.5,15.8,15.5,49,3,1);
   stub2->Draw();
   TText *tstub2 = new TText(15.45,13.5,"Stub2");
   tstub2->SetTextSize(0.025);
   tstub2->SetTextAlign(22);
   tstub2->SetTextAngle(-90);
   tstub2->Draw();
   TArrow *ar1 = new TArrow();
   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 = new TPaveText(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 = new TPaveText(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 = new TPavesText(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 = new TPavesText(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 = new TPaveLabel(1.5,8.1,5.0,8.8,"HTML Files");
   webtitle->SetFillColor(28);
   webtitle->Draw();

   TPavesText *printed = new TPavesText(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 = new TPaveLabel(1.5,3.6,5.0,4.3,"Printed Docs");
   printedtitle->SetFillColor(28);
   printedtitle->Draw();

   TBox *box1 = new TBox(0.2,9.2,14.25,17.8);
   box1->SetFillStyle(0);
   box1->SetLineStyle(2);
   box1->Draw();

   TBox *box2 = new TBox(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 = new TPaveLabel(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 = new TPavesText(0.5,1,2.5,6,7,"tr");
   raw->Draw();
   TPavesText *dst1 = new TPavesText(4,1,5,3,7,"tr");
   dst1->Draw();
   TPavesText *dst2 = new TPavesText(6,1,7,3,7,"tr");
   dst2->Draw();
   TPavesText *dst3 = new TPavesText(4,4,5,6,7,"tr");
   dst3->Draw();
   TPavesText *dst4 = new TPavesText(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 = new TText();
   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();
}
 archi.C:1
 archi.C:2
 archi.C:3
 archi.C:4
 archi.C:5
 archi.C:6
 archi.C:7
 archi.C:8
 archi.C:9
 archi.C:10
 archi.C:11
 archi.C:12
 archi.C:13
 archi.C:14
 archi.C:15
 archi.C:16
 archi.C:17
 archi.C:18
 archi.C:19
 archi.C:20
 archi.C:21
 archi.C:22
 archi.C:23
 archi.C:24
 archi.C:25
 archi.C:26
 archi.C:27
 archi.C:28
 archi.C:29
 archi.C:30
 archi.C:31
 archi.C:32
 archi.C:33
 archi.C:34
 archi.C:35
 archi.C:36
 archi.C:37
 archi.C:38
 archi.C:39
 archi.C:40
 archi.C:41
 archi.C:42
 archi.C:43
 archi.C:44
 archi.C:45
 archi.C:46
 archi.C:47
 archi.C:48
 archi.C:49
 archi.C:50
 archi.C:51
 archi.C:52
 archi.C:53
 archi.C:54
 archi.C:55
 archi.C:56
 archi.C:57
 archi.C:58
 archi.C:59
 archi.C:60
 archi.C:61
 archi.C:62
 archi.C:63
 archi.C:64
 archi.C:65
 archi.C:66
 archi.C:67
 archi.C:68
 archi.C:69
 archi.C:70
 archi.C:71
 archi.C:72
 archi.C:73
 archi.C:74
 archi.C:75
 archi.C:76
 archi.C:77
 archi.C:78
 archi.C:79
 archi.C:80
 archi.C:81
 archi.C:82
 archi.C:83
 archi.C:84
 archi.C:85
 archi.C:86
 archi.C:87
 archi.C:88
 archi.C:89
 archi.C:90
 archi.C:91
 archi.C:92
 archi.C:93
 archi.C:94
 archi.C:95
 archi.C:96
 archi.C:97
 archi.C:98
 archi.C:99
 archi.C:100
 archi.C:101
 archi.C:102
 archi.C:103
 archi.C:104
 archi.C:105
 archi.C:106
 archi.C:107
 archi.C:108
 archi.C:109
 archi.C:110
 archi.C:111
 archi.C:112
 archi.C:113
 archi.C:114
 archi.C:115
 archi.C:116
 archi.C:117
 archi.C:118
 archi.C:119
 archi.C:120
 archi.C:121
 archi.C:122
 archi.C:123
 archi.C:124
 archi.C:125
 archi.C:126
 archi.C:127
 archi.C:128
 archi.C:129
 archi.C:130
 archi.C:131
 archi.C:132
 archi.C:133
 archi.C:134
 archi.C:135
 archi.C:136
 archi.C:137
 archi.C:138
 archi.C:139
 archi.C:140
 archi.C:141
 archi.C:142
 archi.C:143
 archi.C:144
 archi.C:145
 archi.C:146
 archi.C:147
 archi.C:148
 archi.C:149
 archi.C:150
 archi.C:151
 archi.C:152
 archi.C:153
 archi.C:154
 archi.C:155
 archi.C:156
 archi.C:157
 archi.C:158
 archi.C:159
 archi.C:160
 archi.C:161
 archi.C:162
 archi.C:163
 archi.C:164
 archi.C:165
 archi.C:166
 archi.C:167
 archi.C:168
 archi.C:169
 archi.C:170
 archi.C:171
 archi.C:172
 archi.C:173
 archi.C:174
 archi.C:175
 archi.C:176
 archi.C:177
 archi.C:178
 archi.C:179
 archi.C:180
 archi.C:181
 archi.C:182
 archi.C:183
 archi.C:184
 archi.C:185
 archi.C:186
 archi.C:187
 archi.C:188
 archi.C:189
 archi.C:190
 archi.C:191
 archi.C:192
 archi.C:193
 archi.C:194
 archi.C:195
 archi.C:196
 archi.C:197
 archi.C:198
 archi.C:199
 archi.C:200
 archi.C:201
 archi.C:202
 archi.C:203
 archi.C:204
 archi.C:205
 archi.C:206
 archi.C:207
 archi.C:208
 archi.C:209
 archi.C:210
 archi.C:211
 archi.C:212
 archi.C:213
 archi.C:214
 archi.C:215
 archi.C:216
 archi.C:217
 archi.C:218
 archi.C:219
 archi.C:220
 archi.C:221
 archi.C:222
 archi.C:223
 archi.C:224
 archi.C:225
 archi.C:226
 archi.C:227