Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
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, new TGeoRotation("rot2", 90, 180, 90, 90, 180, 0));
42 TGeoCombiTrans *combi3 = new TGeoCombiTrans(100, 0, 0, new TGeoRotation("rot3", 90, 270, 0, 0, 90, 180));
43 TGeoCombiTrans *combi4 = new TGeoCombiTrans(-100, 0, 0, new TGeoRotation("rot4", 90, 90, 0, 0, 90, 0));
44 TGeoCombiTrans *combi5 = new TGeoCombiTrans(0, 100, 0, new TGeoRotation("rot5", 0, 0, 90, 180, 90, 270));
45 TGeoCombiTrans *combi6 = new TGeoCombiTrans(0, -100, 0, new TGeoRotation("rot6", 180, 0, 90, 180, 90, 90));
46
47 //--- make the top container volume
48 Double_t worldx = 110.;
49 Double_t worldy = 50.;
50 Double_t worldz = 5.;
51 TGeoVolume *top = geom->MakeBox("TOP", Vacuum, 270., 270., 120.);
52 geom->SetTopVolume(top);
53 TGeoVolume *replica = geom->MakeBox("REPLICA", Vacuum, 120, 120, 120);
54 replica->SetVisibility(kFALSE);
55 TGeoVolume *rootbox = geom->MakeBox("ROOT", Vacuum, 110., 50., 5.);
56 rootbox->SetVisibility(kFALSE);
57
58 //--- make letter 'R'
59 TGeoVolume *R = geom->MakeBox("R", Vacuum, 25., 25., 5.);
60 R->SetVisibility(kFALSE);
61 TGeoVolume *bar1 = geom->MakeBox("bar1", Al, 5., 25, 5.);
62 bar1->SetLineColor(kRed);
63 R->AddNode(bar1, 1, tr1);
64 TGeoVolume *bar2 = geom->MakeBox("bar2", Al, 5., 5., 5.);
65 bar2->SetLineColor(kRed);
66 R->AddNode(bar2, 1, tr2);
67 R->AddNode(bar2, 2, tr3);
68 TGeoVolume *tub1 = geom->MakeTubs("tub1", Al, 5., 15., 5., 90., 270.);
69 tub1->SetLineColor(kRed);
70 R->AddNode(tub1, 1, tr4);
71 TGeoVolume *bar3 = geom->MakeArb8("bar3", Al, 5.);
72 bar3->SetLineColor(kRed);
73 TGeoArb8 *arb = (TGeoArb8 *)bar3->GetShape();
74 arb->SetVertex(0, 15., -5.);
75 arb->SetVertex(1, 0., -25.);
76 arb->SetVertex(2, -10., -25.);
77 arb->SetVertex(3, 5., -5.);
78 arb->SetVertex(4, 15., -5.);
79 arb->SetVertex(5, 0., -25.);
80 arb->SetVertex(6, -10., -25.);
81 arb->SetVertex(7, 5., -5.);
82 R->AddNode(bar3, 1, gGeoIdentity);
83
84 //--- make letter 'O'
85 TGeoVolume *O = geom->MakeBox("O", Vacuum, 25., 25., 5.);
87 TGeoVolume *bar4 = geom->MakeBox("bar4", Al, 5., 7.5, 5.);
88 bar4->SetLineColor(kYellow);
89 O->AddNode(bar4, 1, tr5);
90 O->AddNode(bar4, 2, tr6);
91 TGeoVolume *tub2 = geom->MakeTubs("tub1", Al, 7.5, 17.5, 5., 0., 180.);
92 tub2->SetLineColor(kYellow);
93 O->AddNode(tub2, 1, tr7);
94 O->AddNode(tub2, 2, combi1);
95
96 //--- make letter 'T'
97 TGeoVolume *T = geom->MakeBox("T", Vacuum, 25., 25., 5.);
98 T->SetVisibility(kFALSE);
99 TGeoVolume *bar5 = geom->MakeBox("bar5", Al, 5., 20., 5.);
100 bar5->SetLineColor(kBlue);
101 T->AddNode(bar5, 1, tr8);
102 TGeoVolume *bar6 = geom->MakeBox("bar6", Al, 17.5, 5., 5.);
103 bar6->SetLineColor(kBlue);
104 T->AddNode(bar6, 1, tr9);
105
106 rootbox->AddNode(R, 1, tr10);
107 rootbox->AddNode(O, 1, tr11);
108 rootbox->AddNode(O, 2, tr12);
109 rootbox->AddNode(T, 1, tr13);
110
111 replica->AddNode(rootbox, 1, tr14);
112 replica->AddNode(rootbox, 2, combi2);
113 replica->AddNode(rootbox, 3, combi3);
114 replica->AddNode(rootbox, 4, combi4);
115 replica->AddNode(rootbox, 5, combi5);
116 replica->AddNode(rootbox, 6, combi6);
117
118 top->AddNode(replica, 1, new TGeoTranslation(-150, -150, 0));
119 top->AddNode(replica, 2, new TGeoTranslation(150, -150, 0));
120 top->AddNode(replica, 3, new TGeoTranslation(150, 150, 0));
121 top->AddNode(replica, 4, new TGeoTranslation(-150, 150, 0));
122
123 //--- close the geometry
124 geom->CloseGeometry();
125
126 //--- draw the ROOT box.
127 // by default the picture will appear in the standard ROOT TPad.
128 // if you have activated the following line in system.rootrc,
129 // it will appear in the GL viewer
130 // #Viewer3D.DefaultDrawOption: ogl
131
132 geom->SetVisLevel(4);
133 if (vis)
134 top->Draw("ogle");
135}
constexpr Bool_t kFALSE
Definition RtypesCore.h:94
double Double_t
Definition RtypesCore.h:59
@ kRed
Definition Rtypes.h:66
@ kBlue
Definition Rtypes.h:66
@ kYellow
Definition Rtypes.h:66
R__EXTERN TGeoIdentity * gGeoIdentity
Definition TGeoMatrix.h:537
virtual void SetVertex(Int_t vnum, Double_t x, Double_t y)
Class describing rotation + translation.
Definition TGeoMatrix.h:317
The manager class for any TGeo geometry.
Definition TGeoManager.h:44
TGeoVolume * MakeArb8(const char *name, TGeoMedium *medium, Double_t dz, Double_t *vertices=nullptr)
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.
Media are used to store properties related to tracking and which are useful only when using geometry ...
Definition TGeoMedium.h:23
Class describing rotations.
Definition TGeoMatrix.h:168
Class describing translations.
Definition TGeoMatrix.h:116
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Definition TGeoVolume.h:43
void SetVisibility(Bool_t vis=kTRUE) override
set visibility of this volume
virtual TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="")
Add a TGeoNode to the list of nodes.
void Draw(Option_t *option="") override
draw top volume according to option
void SetLineColor(Color_t lcolor) override
Set the line color.
TGeoShape * GetShape() const
Definition TGeoVolume.h:190
TGeoNode * rootgeom()
double T(double x)