BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
create_fd_root_run9.C
Go to the documentation of this file.
1
#include "
TGeoCompositeShape.h
"
2
#include "
TGeoCone.h
"
3
#include "
TGeoManager.h
"
4
#include "
TGeoPara.h
"
5
#include "
TGeoTrd2.h
"
6
#include "
TGeoTube.h
"
7
8
#include <iomanip>
9
#include <iostream>
10
11
R__ADD_INCLUDE_PATH
($VMCWORKDIR)
12
//---------------------------
13
//---------------------------
14
15
TGeoManager
*
gGeoMan
= NULL;
16
17
const
Double_t
FD_Xpos
= 0.0;
18
const
Double_t
FD_Ypos
= 0.0;
19
const
Double_t
FD_Zpos
= 453.8;
// cm
20
21
const
Double_t
MaxRadFD
= 7.0;
22
const
Double_t
MinRadFD
= 0.;
23
const
Double_t
Zthick_FD
= 0.025;
24
25
const
Double_t
MaxRadtubeFD
= 12.5;
26
const
Double_t
MinRadtubeFD
= 12.35;
27
const
Double_t
Z_tube_FD
= 20.;
28
29
const
Double_t
MaxRadtubeFD2
= 10.5;
30
const
Double_t
MinRadtubeFD2
= 10.35;
31
const
Double_t
Z_tube_FD2
= 30.;
32
33
const
Double_t
MaxR
= 7.6;
34
const
Double_t
MinR
= 7.3;
35
const
Double_t
Zl
= 11.;
36
37
void
create_fd_root_run9
()
38
{
39
40
// ------- Load media from media file -----------------------------------
41
FairGeoLoader* geoLoad =
new
FairGeoLoader(
"TGeo"
,
"FairGeoLoader"
);
42
FairGeoInterface* geoFace = geoLoad->getGeoInterface();
43
TString
geoPath =
gSystem
->Getenv(
"VMCWORKDIR"
);
44
TString
medFile = geoPath +
"/geometry/media.geo"
;
45
geoFace->setMediaFile(medFile);
46
geoFace->readMedia();
47
gGeoMan
=
gGeoManager
;
48
// --------------------------------------------------------------------------
49
50
// ------- Geometry file name (output) ----------------------------------
51
const
TString
geoDetectorName =
"FD"
;
52
const
TString
geoDetectorVersion =
"run9"
;
53
TString
geoFileName = geoPath +
"/geometry/"
+ geoDetectorName +
"_"
+ geoDetectorVersion +
".root"
;
54
// --------------------------------------------------------------------------
55
56
// ----------------- Get and create the required media -----------------
57
FairGeoMedia* geoMedia = geoFace->getMedia();
58
FairGeoBuilder* geoBuild = geoLoad->getGeoBuilder();
59
60
FairGeoMedium* mAir = geoMedia->getMedium(
"air"
);
61
if
(!mAir)
62
Fatal
(
"Main"
,
"FairMedium air not found"
);
63
geoBuild->createMedium(mAir);
64
TGeoMedium
* pMedAir =
gGeoMan
->GetMedium(
"air"
);
65
if
(!pMedAir)
66
Fatal
(
"Main"
,
"Medium air not found"
);
67
68
FairGeoMedium* mBC408 = geoMedia->getMedium(
"BC408"
);
69
if
(!mBC408)
70
Fatal
(
"Main"
,
"FairMedium BC408 not found"
);
71
geoBuild->createMedium(mBC408);
72
TGeoMedium
* pMedBC408 =
gGeoMan
->GetMedium(
"BC408"
);
73
if
(!pMedBC408)
74
Fatal
(
"Main"
,
"Medium BC408 not found"
);
75
76
FairGeoMedium* msteel = geoMedia->getMedium(
"steel"
);
77
if
(!msteel)
78
Fatal
(
"Main"
,
"FairMedium steel not found"
);
79
geoBuild->createMedium(msteel);
80
TGeoMedium
* pMedsteel =
gGeoMan
->GetMedium(
"steel"
);
81
if
(!pMedsteel)
82
Fatal
(
"Main"
,
"Medium steel not found"
);
83
84
FairGeoMedium* maluminium = geoMedia->getMedium(
"aluminium"
);
85
if
(!maluminium)
86
Fatal
(
"Main"
,
"FairMedium aluminium not found"
);
87
geoBuild->createMedium(maluminium);
88
TGeoMedium
* pMedaluminium =
gGeoMan
->GetMedium(
"aluminium"
);
89
if
(!pMedaluminium)
90
Fatal
(
"Main"
,
"Medium aluminium not found"
);
91
92
FairGeoMedium* mVac = geoMedia->getMedium(
"vacuum"
);
93
if
(!mVac)
94
Fatal
(
"Main"
,
"FairMedium vacuum not found"
);
95
geoBuild->createMedium(mVac);
96
TGeoMedium
* pMedVac =
gGeoMan
->GetMedium(
"vacuum"
);
97
if
(!pMedVac)
98
Fatal
(
"Main"
,
"Medium vacuum not found"
);
99
100
// --------------------------------------------------------------------------
101
102
// -------------- Create geometry and top volume -------------------------
103
gGeoMan
= (
TGeoManager
*)
gROOT
->FindObject(
"FAIRGeom"
);
104
gGeoMan
->SetName(geoDetectorName +
"_geom"
);
105
TGeoVolume
* top =
new
TGeoVolumeAssembly
(
"TOP"
);
106
top->
SetMedium
(pMedAir);
107
gGeoMan
->SetTopVolume(top);
108
109
TGeoTranslation
* FD_Position =
new
TGeoTranslation
(
"FD_Position"
,
FD_Xpos
,
FD_Ypos
,
FD_Zpos
);
110
111
TGeoTranslation
* crystal_cord =
new
TGeoTranslation
(
"crystal_cord"
, 0, 0, 0);
112
crystal_cord->
RegisterYourself
();
113
114
TGeoTranslation
* sec_tube_cord =
new
TGeoTranslation
(
"sec_tube_cord"
, 0, 0, 0);
115
sec_tube_cord->
RegisterYourself
();
116
117
TGeoCombiTrans
* tube_cord =
new
TGeoCombiTrans
(
"tube_cord"
, 0, -17, 0,
new
TGeoRotation
(
"rot0"
, 0, 90, 0));
118
tube_cord->
RegisterYourself
();
119
120
TGeoCombiTrans
* tube_cord1 =
new
TGeoCombiTrans
(
"tube_cord1"
, 0, -5, 0,
new
TGeoRotation
(
"rot0"
, 0, 90, 0));
121
tube_cord1->
RegisterYourself
();
122
123
TGeoCombiTrans
* pmt_tube_cord =
new
TGeoCombiTrans
(
"pmt_tube_cord"
, 0, -38, 0,
new
TGeoRotation
(
"rot0"
, 0, 90, 0));
124
pmt_tube_cord->
RegisterYourself
();
125
126
TGeoTranslation
* ring_cord1 =
new
TGeoTranslation
(
"ring_cord1"
, 0, 0, -5.5);
127
ring_cord1->
RegisterYourself
();
128
129
TGeoTranslation
* ring_cord2 =
new
TGeoTranslation
(
"ring_cord2"
, 0, 0, 5.5);
130
ring_cord2->
RegisterYourself
();
131
132
// Define TOP Geometry
133
TGeoVolume
* FD =
new
TGeoVolumeAssembly
(
"FD"
);
134
FD->
SetMedium
(pMedVac);
135
136
TGeoTube
* fd_crystal =
new
TGeoTube
(
"fd_crystal"
,
MinRadFD
/ 2,
MaxRadFD
/ 2,
Zthick_FD
/ 2);
137
TGeoTube
* fd_section_tube =
new
TGeoTube
(
"fd_section_tube"
,
MinRadtubeFD
/ 2,
MaxRadtubeFD
/ 2,
Z_tube_FD
/ 2);
138
TGeoTube
* fd_tube =
new
TGeoTube
(
"fd_tube"
,
MinRadtubeFD2
/ 2,
MaxRadtubeFD2
/ 2,
Z_tube_FD2
/ 2);
139
140
TGeoTube
* P_tube =
new
TGeoTube
(
"P_tube"
, 0.,
MaxRadtubeFD
/ 2,
Z_tube_FD
/ 2);
141
TGeoTube
* P_tube1 =
new
TGeoTube
(
"P_tube1"
, 0.,
MaxRadtubeFD2
/ 2, 10 / 2);
142
143
TGeoTube
* pmt_tube =
new
TGeoTube
(
"pmt_tube"
,
MinR
/ 2,
MaxR
/ 2,
Zl
/ 2);
144
145
TGeoTube
* ring1 =
new
TGeoTube
(
"ring1"
, 5. / 2, 13. / 2, 1. / 2);
146
TGeoTube
* ring2 =
new
TGeoTube
(
"ring2"
, 7.6 / 2, 12. / 2, 1. / 2);
147
148
TGeoCompositeShape
* FD_tube_sh =
new
TGeoCompositeShape
(
"FD_tube_sh"
,
"fd_tube:tube_cord- P_tube:sec_tube_cord"
);
149
TGeoCompositeShape
* FD_tube_sh1 =
150
new
TGeoCompositeShape
(
"FD_tube_sh"
,
"fd_section_tube:sec_tube_cord- P_tube1:tube_cord1"
);
151
152
TGeoCompositeShape
* pmt_tube_comp =
153
new
TGeoCompositeShape
(
"pmt_tube_comp"
,
"pmt_tube:sec_tube_cord + ring1:ring_cord1 + ring2:ring_cord2"
);
154
155
TGeoVolume
* FDActiveVolumeV =
new
TGeoVolume
(
"FDActiveVolumeV"
, fd_crystal);
156
FDActiveVolumeV->
SetMedium
(pMedBC408);
157
FDActiveVolumeV->
SetLineColor
(
kCyan
- 2);
158
159
TGeoVolume
* FD_sec_tube_mat =
new
TGeoVolume
(
"FD_sec_tube_mat"
, FD_tube_sh1);
160
FD_sec_tube_mat->
SetMedium
(pMedaluminium);
161
FD_sec_tube_mat->
SetLineColor
(
kGray
);
162
163
TGeoVolume
* FD_sec_tube_mat2 =
new
TGeoVolume
(
"FD_sec_tube_mat2"
, FD_tube_sh);
164
FD_sec_tube_mat2->
SetMedium
(pMedaluminium);
165
FD_sec_tube_mat2->
SetLineColor
(
kGray
);
166
167
TGeoVolume
* FD_pmt_tube_mat =
new
TGeoVolume
(
"FD_pmt_tube_mat"
, pmt_tube_comp);
168
FD_pmt_tube_mat->
SetMedium
(pMedsteel);
169
FD_pmt_tube_mat->
SetLineColor
(
kGray
+ 3);
170
171
FD->
AddNode
(FDActiveVolumeV, 1, crystal_cord);
172
FD->
AddNode
(FD_sec_tube_mat, 2, sec_tube_cord);
173
FD->
AddNode
(FD_sec_tube_mat2, 3, sec_tube_cord);
174
FD->
AddNode
(FD_pmt_tube_mat, 4, pmt_tube_cord);
175
176
// Adding volumes to the TOP Volume
177
top->
AddNode
(FD, 1, FD_Position);
178
top->
SetVisContainers
(
kTRUE
);
179
180
// --------------- Finish -----------------------------------------------
181
gGeoMan
->CloseGeometry();
182
gGeoMan
->CheckOverlaps(0.001);
183
gGeoMan
->PrintOverlaps();
184
gGeoMan
->Test();
185
186
TFile
* geoFile =
new
TFile
(geoFileName,
"RECREATE"
);
187
top->
Write
();
188
geoFile->
Close
();
189
top->
Draw
(
"ogl"
);
190
// top->Draw("");
191
}
Double_t
double Double_t
kTRUE
constexpr Bool_t kTRUE
R__ADD_INCLUDE_PATH
#define R__ADD_INCLUDE_PATH(PATH)
kGray
kGray
kCyan
kCyan
Fatal
void Fatal(const char *location, const char *msgfmt,...)
TGeoCompositeShape.h
TGeoCone.h
TGeoManager.h
gGeoManager
R__EXTERN TGeoManager * gGeoManager
TGeoPara.h
TGeoTrd2.h
TGeoTube.h
gROOT
#define gROOT
gSystem
R__EXTERN TSystem * gSystem
TFile
TFile::Close
void Close(Option_t *option="") override
TGeoCombiTrans
TGeoCombiTrans::RegisterYourself
void RegisterYourself() override
TGeoCompositeShape
TGeoManager
TGeoMatrix::RegisterYourself
virtual void RegisterYourself()
TGeoMedium
TGeoRotation
TGeoTranslation
TGeoTube
TGeoVolumeAssembly
TGeoVolume
TGeoVolume::SetVisContainers
void SetVisContainers(Bool_t flag=kTRUE) override
TGeoVolume::AddNode
virtual TGeoNode * AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=nullptr, Option_t *option="")
TGeoVolume::Draw
void Draw(Option_t *option="") override
TGeoVolume::SetMedium
virtual void SetMedium(TGeoMedium *medium)
TGeoVolume::SetLineColor
void SetLineColor(Color_t lcolor) override
TObject::Write
virtual Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0)
TString
gGeoMan
TGeoManager * gGeoMan
Definition
create_fd_root_run9.C:15
MinRadtubeFD
const Double_t MinRadtubeFD
Definition
create_fd_root_run9.C:26
MinRadFD
const Double_t MinRadFD
Definition
create_fd_root_run9.C:22
MaxRadtubeFD
const Double_t MaxRadtubeFD
Definition
create_fd_root_run9.C:25
Zl
const Double_t Zl
Definition
create_fd_root_run9.C:35
FD_Xpos
const Double_t FD_Xpos
Definition
create_fd_root_run9.C:17
Zthick_FD
const Double_t Zthick_FD
Definition
create_fd_root_run9.C:23
FD_Ypos
const Double_t FD_Ypos
Definition
create_fd_root_run9.C:18
FD_Zpos
const Double_t FD_Zpos
Definition
create_fd_root_run9.C:19
MinR
const Double_t MinR
Definition
create_fd_root_run9.C:34
Z_tube_FD
const Double_t Z_tube_FD
Definition
create_fd_root_run9.C:27
create_fd_root_run9
void create_fd_root_run9()
Definition
create_fd_root_run9.C:37
MaxR
const Double_t MaxR
Definition
create_fd_root_run9.C:33
MinRadtubeFD2
const Double_t MinRadtubeFD2
Definition
create_fd_root_run9.C:30
Z_tube_FD2
const Double_t Z_tube_FD2
Definition
create_fd_root_run9.C:31
MaxRadFD
const Double_t MaxRadFD
Definition
create_fd_root_run9.C:21
MaxRadtubeFD2
const Double_t MaxRadtubeFD2
Definition
create_fd_root_run9.C:29
macro
geometry
create_fd_root_run9.C
Generated on
for BmnRoot by
1.17.0