Logo ROOT  
Reference Guide
rootgeom.C
Go to the documentation of this file.
1/// \file
2/// \ingroup tutorial_geom
3/// Definition of a simple geometry (the 4 ROOT characters)
4///
5/// \macro_image
6/// \macro_code
7///
8/// \author Andrei Gheata
9
10void rootgeom(bool vis = true)
11{
12 // gStyle->SetCanvasPreferGL(true);
13
14 TGeoManager *geom = new TGeoManager("simple1", "Simple geometry");
15
16 //--- define some materials
17 TGeoMaterial *matVacuum = new TGeoMaterial("Vacuum", 0,0,0);
18 TGeoMaterial *matAl = new TGeoMaterial("Al", 26.98,13,2.7);
19// //--- define some media
20 TGeoMedium *Vacuum = new TGeoMedium("Vacuum",1, matVacuum);
21 TGeoMedium *Al = new TGeoMedium("Root Material",2, matAl);
22
23 //--- define the transformations
24 TGeoTranslation *tr1 = new TGeoTranslation(20., 0, 0.);
25 TGeoTranslation *tr2 = new TGeoTranslation(10., 0., 0.);
26 TGeoTranslation *tr3 = new TGeoTranslation(10., 20., 0.);
27 TGeoTranslation *tr4 = new TGeoTranslation(5., 10., 0.);
28 TGeoTranslation *tr5 = new TGeoTranslation(20., 0., 0.);
29 TGeoTranslation *tr6 = new TGeoTranslation(-5., 0., 0.);
30 TGeoTranslation *tr7 = new TGeoTranslation(7.5, 7.5, 0.);
31 TGeoRotation *rot1 = new TGeoRotation("rot1", 90., 0., 90., 270., 0., 0.);
32 TGeoCombiTrans *combi1 = new TGeoCombiTrans(7.5, -7.5, 0., rot1);
33 TGeoTranslation *tr8 = new TGeoTranslation(7.5, -5., 0.);
34 TGeoTranslation *tr9 = new TGeoTranslation(7.5, 20., 0.);
35 TGeoTranslation *tr10 = new TGeoTranslation(85., 0., 0.);
36 TGeoTranslation *tr11 = new TGeoTranslation(35., 0., 0.);
37 TGeoTranslation *tr12 = new TGeoTranslation(-15., 0., 0.);
38 TGeoTranslation *tr13 = new TGeoTranslation(-65., 0., 0.);
39
40 TGeoTranslation *tr14 = new TGeoTranslation(0,0,-100);
41 TGeoCombiTrans *combi2 = new TGeoCombiTrans(0,0,100,
42 new TGeoRotation("rot2",90,180,90,90,180,0));
43 TGeoCombiTrans *combi3 = new TGeoCombiTrans(100,0,0,
44 new TGeoRotation("rot3",90,270,0,0,90,180));
45 TGeoCombiTrans *combi4 = new TGeoCombiTrans(-100,0,0,
46 new TGeoRotation("rot4",90,90,0,0,90,0));
47 TGeoCombiTrans *combi5 = new TGeoCombiTrans(0,100,0,
48 new TGeoRotation("rot5",0,0,90,180,90,270));
49 TGeoCombiTrans *combi6 = new TGeoCombiTrans(0,-100,0,
50 new TGeoRotation("rot6",180,0,90,180,90,90));
51
52 //--- make the top container volume
53 Double_t worldx = 110.;
54 Double_t worldy = 50.;
55 Double_t worldz = 5.;
56 TGeoVolume *top = geom->MakeBox("TOP", Vacuum, 270., 270., 120.);
57 geom->SetTopVolume(top);
58 TGeoVolume *replica = geom->MakeBox("REPLICA", Vacuum,120,120,120);
59 replica->SetVisibility(kFALSE);
60 TGeoVolume *rootbox = geom->MakeBox("ROOT", Vacuum, 110., 50., 5.);
61 rootbox->SetVisibility(kFALSE);
62
63 //--- make letter 'R'
64 TGeoVolume *R = geom->MakeBox("R", Vacuum, 25., 25., 5.);
65 R->SetVisibility(kFALSE);
66 TGeoVolume *bar1 = geom->MakeBox("bar1", Al, 5., 25, 5.);
67 bar1->SetLineColor(kRed);
68 R->AddNode(bar1, 1, tr1);
69 TGeoVolume *bar2 = geom->MakeBox("bar2", Al, 5., 5., 5.);
70 bar2->SetLineColor(kRed);
71 R->AddNode(bar2, 1, tr2);
72 R->AddNode(bar2, 2, tr3);
73 TGeoVolume *tub1 = geom->MakeTubs("tub1", Al, 5., 15., 5., 90., 270.);
74 tub1->SetLineColor(kRed);
75 R->AddNode(tub1, 1, tr4);
76 TGeoVolume *bar3 = geom->MakeArb8("bar3", Al, 5.);
77 bar3->SetLineColor(kRed);
78 TGeoArb8 *arb = (TGeoArb8*)bar3->GetShape();
79 arb->SetVertex(0, 15., -5.);
80 arb->SetVertex(1, 0., -25.);
81 arb->SetVertex(2, -10., -25.);
82 arb->SetVertex(3, 5., -5.);
83 arb->SetVertex(4, 15., -5.);
84 arb->SetVertex(5, 0., -25.);
85 arb->SetVertex(6, -10., -25.);
86 arb->SetVertex(7, 5., -5.);
87 R->AddNode(bar3, 1, gGeoIdentity);
88
89 //--- make letter 'O'
90 TGeoVolume *O = geom->MakeBox("O", Vacuum, 25., 25., 5.);
92 TGeoVolume *bar4 = geom->MakeBox("bar4", Al, 5., 7.5, 5.);
93 bar4->SetLineColor(kYellow);
94 O->AddNode(bar4, 1, tr5);
95 O->AddNode(bar4, 2, tr6);
96 TGeoVolume *tub2 = geom->MakeTubs("tub1", Al, 7.5, 17.5, 5., 0., 180.);
97 tub2->SetLineColor(kYellow);
98 O->AddNode(tub2, 1, tr7);
99 O->AddNode(tub2, 2, combi1);
100
101 //--- make letter 'T'
102 TGeoVolume *T = geom->MakeBox("T", Vacuum, 25., 25., 5.);
103 T->SetVisibility(kFALSE);
104 TGeoVolume *bar5 = geom->MakeBox("bar5", Al, 5., 20., 5.);
105 bar5->SetLineColor(kBlue);
106 T->AddNode(bar5, 1, tr8);
107 TGeoVolume *bar6 = geom->MakeBox("bar6", Al, 17.5, 5., 5.);
108 bar6->SetLineColor(kBlue);
109 T->AddNode(bar6, 1, tr9);
110
111
112
113 rootbox->AddNode(R, 1, tr10);
114 rootbox->AddNode(O, 1, tr11);
115 rootbox->AddNode(O, 2, tr12);
116 rootbox->AddNode(T, 1, tr13);
117
118 replica->AddNode(rootbox, 1, tr14);
119 replica->AddNode(rootbox, 2, combi2);
120 replica->AddNode(rootbox, 3, combi3);
121 replica->AddNode(rootbox, 4, combi4);
122 replica->AddNode(rootbox, 5, combi5);
123 replica->AddNode(rootbox, 6, combi6);
124
125 top->AddNode(replica, 1, new TGeoTranslation(-150, -150, 0));
126 top->AddNode(replica, 2, new TGeoTranslation(150, -150, 0));
127 top->AddNode(replica, 3, new TGeoTranslation(150, 150, 0));
128 top->AddNode(replica, 4, new TGeoTranslation(-150, 150, 0));
129
130 //--- close the geometry
131 geom->CloseGeometry();
132
133 //--- draw the ROOT box.
134 // by default the picture will appear in the standard ROOT TPad.
135 //if you have activated the following line in system.rootrc,
136 //it will appear in the GL viewer
137 //#Viewer3D.DefaultDrawOption: ogl
138
139 geom->SetVisLevel(4);
140 if (vis) top->Draw("ogle");
141}
142
const Bool_t kFALSE
Definition: RtypesCore.h:90
double Double_t
Definition: RtypesCore.h:57
@ kRed
Definition: Rtypes.h:64
@ kBlue
Definition: Rtypes.h:64
@ kYellow
Definition: Rtypes.h:64
R__EXTERN TGeoIdentity * gGeoIdentity
Definition: TGeoMatrix.h:478
An arbitrary trapezoid with less than 8 vertices standing on two parallel planes perpendicular to Z a...
Definition: TGeoArb8.h:18
virtual void SetVertex(Int_t vnum, Double_t x, Double_t y)
Set values for a given vertex.
Definition: TGeoArb8.cxx:1255
Class describing rotation + translation.
Definition: TGeoMatrix.h:292
The manager class for any TGeo geometry.
Definition: TGeoManager.h:43
TGeoVolume * MakeArb8(const char *name, TGeoMedium *medium, Double_t dz, Double_t *vertices=0)
Make an TGeoArb8 volume.
void SetVisLevel(Int_t level=3)
set default level down to which visualization is performed
void CloseGeometry(Option_t *option="d")
Closing geometry implies checking the geometry validity, fixing shapes with negative parameters (run-...
TGeoVolume * MakeBox(const char *name, TGeoMedium *medium, Double_t dx, Double_t dy, Double_t dz)
Make in one step a volume pointing to a box shape with given medium.
void SetTopVolume(TGeoVolume *vol)
Set the top volume and corresponding node as starting point of the geometry.
TGeoVolume * MakeTubs(const char *name, TGeoMedium *medium, Double_t rmin, Double_t rmax, Double_t dz, Double_t phi1, Double_t phi2)
Make in one step a volume pointing to a tube segment shape with given medium.
Base class describing materials.
Definition: TGeoMaterial.h:31
Media are used to store properties related to tracking and which are useful only when using geometry ...
Definition: TGeoMedium.h:24
Class describing rotations.
Definition: TGeoMatrix.h:175
Class describing translations.
Definition: TGeoMatrix.h:122
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Definition: TGeoVolume.h:47
virtual void SetVisibility(Bool_t vis=kTRUE)
set visibility of this volume
TGeoShape * GetShape() const
Definition: TGeoVolume.h:186
virtual void Draw(Option_t *option="")
draw top volume according to option
virtual void SetLineColor(Color_t lcolor)
Set the line color.
virtual void AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=0, Option_t *option="")
Add a TGeoNode to the list of nodes.
Definition: TGeoVolume.cxx:931
double T(double x)
Definition: ChebyshevPol.h:34