ROOT logo

From $ROOTSYS/tutorials/geom/rootgeom.C

void rootgeom()
{
//Definition of a simple geometry (the 4 ROOT characters)
//Author: Andrei Gheata
   
   // gStyle->SetCanvasPreferGL(true);
   gSystem->Load("libGeom");
   TGeoManager *geom = new TGeoManager("simple1", "Simple geometry");
   
   //--- define some materials
   TGeoMaterial *matVacuum = new TGeoMaterial("Vacuum", 0,0,0);
   TGeoMaterial *matAl = new TGeoMaterial("Al", 26.98,13,2.7);
//   //--- define some media
   TGeoMedium *Vacuum = new TGeoMedium("Vacuum",1, matVacuum);
   TGeoMedium *Al = new TGeoMedium("Root Material",2, matAl);

   //--- define the transformations
   TGeoTranslation *tr1 = new TGeoTranslation(20., 0, 0.);
   TGeoTranslation *tr2 = new TGeoTranslation(10., 0., 0.);
   TGeoTranslation *tr3 = new TGeoTranslation(10., 20., 0.);
   TGeoTranslation *tr4 = new TGeoTranslation(5., 10., 0.);
   TGeoTranslation *tr5 = new TGeoTranslation(20., 0., 0.);
   TGeoTranslation *tr6 = new TGeoTranslation(-5., 0., 0.);
   TGeoTranslation *tr7 = new TGeoTranslation(7.5, 7.5, 0.);
   TGeoRotation   *rot1 = new TGeoRotation("rot1", 90., 0., 90., 270., 0., 0.);
   TGeoCombiTrans *combi1 = new TGeoCombiTrans(7.5, -7.5, 0., rot1);
   TGeoTranslation *tr8 = new TGeoTranslation(7.5, -5., 0.);
   TGeoTranslation *tr9 = new TGeoTranslation(7.5, 20., 0.);
   TGeoTranslation *tr10 = new TGeoTranslation(85., 0., 0.);
   TGeoTranslation *tr11 = new TGeoTranslation(35., 0., 0.);
   TGeoTranslation *tr12 = new TGeoTranslation(-15., 0., 0.);
   TGeoTranslation *tr13 = new TGeoTranslation(-65., 0., 0.);
   
   TGeoTranslation  *tr14 = new TGeoTranslation(0,0,-100);
   TGeoCombiTrans *combi2 = new TGeoCombiTrans(0,0,100, 
                                   new TGeoRotation("rot2",90,180,90,90,180,0));
   TGeoCombiTrans *combi3 = new TGeoCombiTrans(100,0,0, 
                                   new TGeoRotation("rot3",90,270,0,0,90,180));
   TGeoCombiTrans *combi4 = new TGeoCombiTrans(-100,0,0, 
                                   new TGeoRotation("rot4",90,90,0,0,90,0));
   TGeoCombiTrans *combi5 = new TGeoCombiTrans(0,100,0, 
                                   new TGeoRotation("rot5",0,0,90,180,90,270));
   TGeoCombiTrans *combi6 = new TGeoCombiTrans(0,-100,0, 
                                   new TGeoRotation("rot6",180,0,90,180,90,90));
   
   //--- make the top container volume
   Double_t worldx = 110.;
   Double_t worldy = 50.;
   Double_t worldz = 5.;
   TGeoVolume *top = geom->MakeBox("TOP", Vacuum, 270., 270., 120.);
   geom->SetTopVolume(top);
   TGeoVolume *replica = geom->MakeBox("REPLICA", Vacuum,120,120,120);
   replica->SetVisibility(kFALSE);
   TGeoVolume *rootbox = geom->MakeBox("ROOT", Vacuum, 110., 50., 5.);
   rootbox->SetVisibility(kFALSE);
   
   //--- make letter 'R'
   TGeoVolume *R = geom->MakeBox("R", Vacuum, 25., 25., 5.);
   R->SetVisibility(kFALSE);
   TGeoVolume *bar1 = geom->MakeBox("bar1", Al, 5., 25, 5.);
   bar1->SetLineColor(kRed);
   R->AddNode(bar1, 1, tr1);
   TGeoVolume *bar2 = geom->MakeBox("bar2", Al, 5., 5., 5.);
   bar2->SetLineColor(kRed);
   R->AddNode(bar2, 1, tr2);
   R->AddNode(bar2, 2, tr3);
   TGeoVolume *tub1 = geom->MakeTubs("tub1", Al, 5., 15., 5., 90., 270.);
   tub1->SetLineColor(kRed);
   R->AddNode(tub1, 1, tr4);
   TGeoVolume *bar3 = geom->MakeArb8("bar3", Al, 5.);
   bar3->SetLineColor(kRed);
   TGeoArb8 *arb = (TGeoArb8*)bar3->GetShape();
   arb->SetVertex(0, 15., -5.);
   arb->SetVertex(1, 0., -25.);
   arb->SetVertex(2, -10., -25.);
   arb->SetVertex(3, 5., -5.);
   arb->SetVertex(4, 15., -5.);
   arb->SetVertex(5, 0., -25.);
   arb->SetVertex(6, -10., -25.);
   arb->SetVertex(7, 5., -5.);
   R->AddNode(bar3, 1, gGeoIdentity);
   
   //--- make letter 'O'
   TGeoVolume *O = geom->MakeBox("O", Vacuum, 25., 25., 5.);
   O->SetVisibility(kFALSE);
   TGeoVolume *bar4 = geom->MakeBox("bar4", Al, 5., 7.5, 5.);
   bar4->SetLineColor(kYellow);
   O->AddNode(bar4, 1, tr5);
   O->AddNode(bar4, 2, tr6);
   TGeoVolume *tub2 = geom->MakeTubs("tub1", Al, 7.5, 17.5, 5., 0., 180.);
   tub2->SetLineColor(kYellow);
   O->AddNode(tub2, 1, tr7);
   O->AddNode(tub2, 2, combi1);
   
   //--- make letter 'T'
   TGeoVolume *T = geom->MakeBox("T", Vacuum, 25., 25., 5.);
   T->SetVisibility(kFALSE);
   TGeoVolume *bar5 = geom->MakeBox("bar5", Al, 5., 20., 5.);
   bar5->SetLineColor(kBlue);
   T->AddNode(bar5, 1, tr8);
   TGeoVolume *bar6 = geom->MakeBox("bar6", Al, 17.5, 5., 5.);
   bar6->SetLineColor(kBlue);
   T->AddNode(bar6, 1, tr9);
      
   

   rootbox->AddNode(R, 1, tr10);
   rootbox->AddNode(O, 1, tr11);
   rootbox->AddNode(O, 2, tr12);
   rootbox->AddNode(T, 1, tr13);
   
   replica->AddNode(rootbox, 1, tr14);
   replica->AddNode(rootbox, 2, combi2);
   replica->AddNode(rootbox, 3, combi3);
   replica->AddNode(rootbox, 4, combi4);
   replica->AddNode(rootbox, 5, combi5);
   replica->AddNode(rootbox, 6, combi6);
   
   top->AddNode(replica, 1, new TGeoTranslation(-150, -150, 0));
   top->AddNode(replica, 2, new TGeoTranslation(150, -150, 0));
   top->AddNode(replica, 3, new TGeoTranslation(150, 150, 0));
   top->AddNode(replica, 4, new TGeoTranslation(-150, 150, 0));

   //--- close the geometry
   geom->CloseGeometry();
   
   //--- draw the ROOT box.
   // by default the picture will appear in the standard ROOT TPad.
   //if you have activated the following line in system.rootrc, 
   //it will appear in the GL viewer
   //#Viewer3D.DefaultDrawOption:   ogl
   
   geom->SetVisLevel(4);
   top->Draw("ogle");
}   
   
 rootgeom.C:1
 rootgeom.C:2
 rootgeom.C:3
 rootgeom.C:4
 rootgeom.C:5
 rootgeom.C:6
 rootgeom.C:7
 rootgeom.C:8
 rootgeom.C:9
 rootgeom.C:10
 rootgeom.C:11
 rootgeom.C:12
 rootgeom.C:13
 rootgeom.C:14
 rootgeom.C:15
 rootgeom.C:16
 rootgeom.C:17
 rootgeom.C:18
 rootgeom.C:19
 rootgeom.C:20
 rootgeom.C:21
 rootgeom.C:22
 rootgeom.C:23
 rootgeom.C:24
 rootgeom.C:25
 rootgeom.C:26
 rootgeom.C:27
 rootgeom.C:28
 rootgeom.C:29
 rootgeom.C:30
 rootgeom.C:31
 rootgeom.C:32
 rootgeom.C:33
 rootgeom.C:34
 rootgeom.C:35
 rootgeom.C:36
 rootgeom.C:37
 rootgeom.C:38
 rootgeom.C:39
 rootgeom.C:40
 rootgeom.C:41
 rootgeom.C:42
 rootgeom.C:43
 rootgeom.C:44
 rootgeom.C:45
 rootgeom.C:46
 rootgeom.C:47
 rootgeom.C:48
 rootgeom.C:49
 rootgeom.C:50
 rootgeom.C:51
 rootgeom.C:52
 rootgeom.C:53
 rootgeom.C:54
 rootgeom.C:55
 rootgeom.C:56
 rootgeom.C:57
 rootgeom.C:58
 rootgeom.C:59
 rootgeom.C:60
 rootgeom.C:61
 rootgeom.C:62
 rootgeom.C:63
 rootgeom.C:64
 rootgeom.C:65
 rootgeom.C:66
 rootgeom.C:67
 rootgeom.C:68
 rootgeom.C:69
 rootgeom.C:70
 rootgeom.C:71
 rootgeom.C:72
 rootgeom.C:73
 rootgeom.C:74
 rootgeom.C:75
 rootgeom.C:76
 rootgeom.C:77
 rootgeom.C:78
 rootgeom.C:79
 rootgeom.C:80
 rootgeom.C:81
 rootgeom.C:82
 rootgeom.C:83
 rootgeom.C:84
 rootgeom.C:85
 rootgeom.C:86
 rootgeom.C:87
 rootgeom.C:88
 rootgeom.C:89
 rootgeom.C:90
 rootgeom.C:91
 rootgeom.C:92
 rootgeom.C:93
 rootgeom.C:94
 rootgeom.C:95
 rootgeom.C:96
 rootgeom.C:97
 rootgeom.C:98
 rootgeom.C:99
 rootgeom.C:100
 rootgeom.C:101
 rootgeom.C:102
 rootgeom.C:103
 rootgeom.C:104
 rootgeom.C:105
 rootgeom.C:106
 rootgeom.C:107
 rootgeom.C:108
 rootgeom.C:109
 rootgeom.C:110
 rootgeom.C:111
 rootgeom.C:112
 rootgeom.C:113
 rootgeom.C:114
 rootgeom.C:115
 rootgeom.C:116
 rootgeom.C:117
 rootgeom.C:118
 rootgeom.C:119
 rootgeom.C:120
 rootgeom.C:121
 rootgeom.C:122
 rootgeom.C:123
 rootgeom.C:124
 rootgeom.C:125
 rootgeom.C:126
 rootgeom.C:127
 rootgeom.C:128
 rootgeom.C:129
 rootgeom.C:130
 rootgeom.C:131
 rootgeom.C:132
 rootgeom.C:133
 rootgeom.C:134
 rootgeom.C:135
 rootgeom.C:136
 rootgeom.C:137
thumb