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 
10 void 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 
gGeoIdentity
R__EXTERN TGeoIdentity * gGeoIdentity
Definition: TGeoMatrix.h:478
TGeoVolume::GetShape
TGeoShape * GetShape() const
Definition: TGeoVolume.h:188
TGeoManager::SetVisLevel
void SetVisLevel(Int_t level=3)
set default level down to which visualization is performed
Definition: TGeoManager.cxx:2248
TGeoCombiTrans
Class describing rotation + translation.
Definition: TGeoMatrix.h:292
TGeoManager::MakeBox
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.
Definition: TGeoManager.cxx:2918
TGeoManager::MakeArb8
TGeoVolume * MakeArb8(const char *name, TGeoMedium *medium, Double_t dz, Double_t *vertices=0)
Make an TGeoArb8 volume.
Definition: TGeoManager.cxx:2909
TGeoManager::CloseGeometry
void CloseGeometry(Option_t *option="d")
Closing geometry implies checking the geometry validity, fixing shapes with negative parameters (run-...
Definition: TGeoManager.cxx:1359
TGeoArb8
An arbitrary trapezoid with less than 8 vertices standing on two parallel planes perpendicular to Z a...
Definition: TGeoArb8.h:18
TGeoVolume::AddNode
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:932
TGeoTranslation
Class describing translations.
Definition: TGeoMatrix.h:122
TGeoMaterial
Base class describing materials.
Definition: TGeoMaterial.h:36
R
#define R(a, b, c, d, e, f, g, h, i)
Definition: RSha256.hxx:110
TGeoManager::SetTopVolume
void SetTopVolume(TGeoVolume *vol)
Set the top volume and corresponding node as starting point of the geometry.
Definition: TGeoManager.cxx:3397
TGeoVolume::Draw
virtual void Draw(Option_t *option="")
draw top volume according to option
Definition: TGeoVolume.cxx:1146
TGeoRotation
Class describing rotations.
Definition: TGeoMatrix.h:175
kFALSE
const Bool_t kFALSE
Definition: RtypesCore.h:92
kRed
@ kRed
Definition: Rtypes.h:66
TGeoArb8::SetVertex
virtual void SetVertex(Int_t vnum, Double_t x, Double_t y)
Set values for a given vertex.
Definition: TGeoArb8.cxx:1255
Double_t
double Double_t
Definition: RtypesCore.h:59
ROOT::Math::Chebyshev::T
double T(double x)
Definition: ChebyshevPol.h:34
kBlue
@ kBlue
Definition: Rtypes.h:66
TGeoManager::MakeTubs
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.
Definition: TGeoManager.cxx:2966
TGeoMedium
Media are used to store properties related to tracking and which are useful only when using geometry ...
Definition: TGeoMedium.h:24
TGeoVolume::SetLineColor
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Definition: TGeoVolume.cxx:2036
TGeoManager
The manager class for any TGeo geometry.
Definition: TGeoManager.h:45
kYellow
@ kYellow
Definition: Rtypes.h:66
TGeoVolume::SetVisibility
virtual void SetVisibility(Bool_t vis=kTRUE)
set visibility of this volume
Definition: TGeoVolume.cxx:2198
TGeoVolume
TGeoVolume, TGeoVolumeMulti, TGeoVolumeAssembly are the volume classes.
Definition: TGeoVolume.h:49