Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
CEPCSW
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
maxt@ihep.ac.cn
CEPCSW
Commits
10e7d6ba
Commit
10e7d6ba
authored
4 years ago
by
myliu@ihep.ac.cn
Browse files
Options
Downloads
Patches
Plain Diff
first
parent
089d48db
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp
+56
-29
56 additions, 29 deletions
Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp
with
56 additions
and
29 deletions
Detector/DetDriftChamber/src/driftchamber/DriftChamber.cpp
+
56
−
29
View file @
10e7d6ba
...
@@ -3,6 +3,7 @@
...
@@ -3,6 +3,7 @@
//--------------------------------------------------------------------
//--------------------------------------------------------------------
//
//
// Author: Tao Lin
// Author: Tao Lin
// Mengyao Liu
//
//
//====================================================================
//====================================================================
...
@@ -12,12 +13,16 @@
...
@@ -12,12 +13,16 @@
#include
"DDRec/DetectorData.h"
#include
"DDRec/DetectorData.h"
#include
"DDSegmentation/Segmentation.h"
#include
"DDSegmentation/Segmentation.h"
using
namespace
dd4hep
;
using
namespace
dd4hep
::
detail
;
using
namespace
dd4hep
::
rec
;
#define MYDEBUG(x) std::cout << __FILE__ << ":" << __LINE__ << ": " << x << std::endl;
#define MYDEBUG(x) std::cout << __FILE__ << ":" << __LINE__ << ": " << x << std::endl;
#define MYDEBUGVAL(x) std::cout << __FILE__ << ":" << __LINE__ << ": " << #x << ": " << x << std::endl;
#define MYDEBUGVAL(x) std::cout << __FILE__ << ":" << __LINE__ << ": " << #x << ": " << x << std::endl;
static
dd4hep
::
Ref_t
create_detector
(
dd4hep
::
Detector
&
theDetector
,
static
dd4hep
::
Ref_t
create_detector
(
dd4hep
::
Detector
&
theDetector
,
xml_h
e
,
xml_h
e
,
dd4hep
::
SensitiveDetector
sens
)
{
dd4hep
::
SensitiveDetector
sens
)
{
// =======================================================================
// =======================================================================
// Parameter Definition
// Parameter Definition
// =======================================================================
// =======================================================================
...
@@ -27,7 +32,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
...
@@ -27,7 +32,7 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
std
::
string
det_name
=
x_det
.
nameStr
();
std
::
string
det_name
=
x_det
.
nameStr
();
std
::
string
det_type
=
x_det
.
typeStr
();
std
::
string
det_type
=
x_det
.
typeStr
();
// - global
// - global
double
chamber_radius_min
=
theDetector
.
constant
<
double
>
(
"SDT_radius_min"
);
double
chamber_radius_min
=
theDetector
.
constant
<
double
>
(
"SDT_radius_min"
);
double
chamber_radius_max
=
theDetector
.
constant
<
double
>
(
"SDT_radius_max"
);
double
chamber_radius_max
=
theDetector
.
constant
<
double
>
(
"SDT_radius_max"
);
double
chamber_length
=
theDetector
.
constant
<
double
>
(
"SDT_length"
);
double
chamber_length
=
theDetector
.
constant
<
double
>
(
"SDT_length"
);
...
@@ -42,6 +47,11 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
...
@@ -42,6 +47,11 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
double
outer_chamber_radius_max
=
theDetector
.
constant
<
double
>
(
"SDT_outer_chamber_radius_max"
);
double
outer_chamber_radius_max
=
theDetector
.
constant
<
double
>
(
"SDT_outer_chamber_radius_max"
);
double
outer_chamber_length
=
theDetector
.
constant
<
double
>
(
"SDT_outer_chamber_length"
);
double
outer_chamber_length
=
theDetector
.
constant
<
double
>
(
"SDT_outer_chamber_length"
);
// - layer
int
inner_chamber_layer_number
=
theDetector
.
constant
<
int
>
(
"SDT_inner_chamber_layer_number"
);
int
outer_chamber_layer_number
=
theDetector
.
constant
<
int
>
(
"SDT_outer_chamber_layer_number"
);
double
chamber_layer_width
=
theDetector
.
constant
<
double
>
(
"SDT_chamber_layer_width"
);
// =======================================================================
// =======================================================================
// Detector Construction
// Detector Construction
// =======================================================================
// =======================================================================
...
@@ -51,8 +61,8 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
...
@@ -51,8 +61,8 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
dd4hep
::
Volume
motherVol
=
theDetector
.
pickMotherVolume
(
sdet
);
dd4hep
::
Volume
motherVol
=
theDetector
.
pickMotherVolume
(
sdet
);
dd4hep
::
Material
det_mat
(
theDetector
.
material
(
"Air"
));
dd4hep
::
Material
det_mat
(
theDetector
.
material
(
"Air"
));
// - global
// - global
dd4hep
::
Tube
det_solid
(
chamber_radius_min
,
chamber_radius_max
,
chamber_length
*
0.5
);
dd4hep
::
Tube
det_solid
(
chamber_radius_min
,
chamber_radius_max
,
chamber_length
*
0.5
);
dd4hep
::
Volume
det_vol
(
det_name
+
"_vol"
,
det_solid
,
det_mat
);
dd4hep
::
Volume
det_vol
(
det_name
+
"_vol"
,
det_solid
,
det_mat
);
...
@@ -60,39 +70,56 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
...
@@ -60,39 +70,56 @@ static dd4hep::Ref_t create_detector(dd4hep::Detector& theDetector,
dd4hep
::
Tube
det_inner_chamber_solid
(
inner_chamber_radius_min
,
inner_chamber_radius_max
,
inner_chamber_length
*
0.5
);
dd4hep
::
Tube
det_inner_chamber_solid
(
inner_chamber_radius_min
,
inner_chamber_radius_max
,
inner_chamber_length
*
0.5
);
dd4hep
::
Volume
det_inner_chamber_vol
(
det_name
+
"_inner_chamber_vol"
,
det_inner_chamber_solid
,
det_mat
);
dd4hep
::
Volume
det_inner_chamber_vol
(
det_name
+
"_inner_chamber_vol"
,
det_inner_chamber_solid
,
det_mat
);
dd4hep
::
Transform3D
transform_inner_chamber
(
dd4hep
::
Rotation3D
(),
dd4hep
::
Position
(
0
,
0
,
0
));
dd4hep
::
PlacedVolume
det_inner_chamber_phy
=
det_vol
.
placeVolume
(
det_inner_chamber_vol
,
transform_inner_chamber
);
det_inner_chamber_phy
.
addPhysVolID
(
"chamber"
,
0
);
if
(
x_det
.
isSensitive
()
)
{
dd4hep
::
SensitiveDetector
sd
=
sens
;
det_inner_chamber_vol
.
setSensitiveDetector
(
sens
);
sd
.
setType
(
"tracker"
);
}
// - outer
// - outer
dd4hep
::
Tube
det_outer_chamber_solid
(
outer_chamber_radius_min
,
outer_chamber_radius_max
,
outer_chamber_length
*
0.5
);
dd4hep
::
Tube
det_outer_chamber_solid
(
outer_chamber_radius_min
,
outer_chamber_radius_max
,
outer_chamber_length
*
0.5
);
dd4hep
::
Volume
det_outer_chamber_vol
(
det_name
+
"_outer_chamber_vol"
,
det_outer_chamber_solid
,
det_mat
);
dd4hep
::
Volume
det_outer_chamber_vol
(
det_name
+
"_outer_chamber_vol"
,
det_outer_chamber_solid
,
det_mat
);
// - layer
for
(
int
layer_id
=
0
;
layer_id
<
(
inner_chamber_layer_number
+
outer_chamber_layer_number
-
1
);
layer_id
++
)
{
double
rmin
,
rmax
;
std
::
string
layer_name
;
dd4hep
::
Volume
*
current_vol_ptr
=
nullptr
;
if
(
layer_id
<
inner_chamber_layer_number
){
current_vol_ptr
=
&
det_inner_chamber_vol
;
rmin
=
inner_chamber_radius_min
+
(
layer_id
*
chamber_layer_width
)
+
0.01
;
rmax
=
rmin
+
9.99
;
layer_name
=
det_name
+
"_inner_chamber_vol"
+
_toString
(
layer_id
,
"_layer%d"
);
}
else
{
current_vol_ptr
=
&
det_outer_chamber_vol
;
rmin
=
outer_chamber_radius_min
+
((
layer_id
-
inner_chamber_layer_number
)
*
chamber_layer_width
)
+
0.01
;
rmax
=
rmin
+
9.99
;
layer_name
=
det_name
+
"_outer_chamber_vol"
+
_toString
(
layer_id
,
"_layer%d"
);
}
dd4hep
::
Tube
layer_solid
(
rmin
,
rmax
,
chamber_length
*
0.5
);
dd4hep
::
Volume
layer_vol
(
layer_name
,
layer_solid
,
det_mat
);
dd4hep
::
Transform3D
transform_layer
(
dd4hep
::
Rotation3D
(),
dd4hep
::
Position
(
0.
,
0.
,
0.
));
dd4hep
::
PlacedVolume
layer_phy
=
(
*
current_vol_ptr
).
placeVolume
(
layer_vol
,
transform_layer
);
layer_phy
.
addPhysVolID
(
"layer"
,
layer_id
);
dd4hep
::
SensitiveDetector
sd
=
sens
;
layer_vol
.
setSensitiveDetector
(
sens
);
sd
.
setType
(
"tracker"
);
}
// - place in det
// inner
dd4hep
::
Transform3D
transform_inner_chamber
(
dd4hep
::
Rotation3D
(),
dd4hep
::
Position
(
0
,
0
,
0
));
dd4hep
::
PlacedVolume
det_inner_chamber_phy
=
det_vol
.
placeVolume
(
det_inner_chamber_vol
,
transform_inner_chamber
);
det_inner_chamber_phy
.
addPhysVolID
(
"chamber"
,
0
);
// outer
dd4hep
::
Transform3D
transform_outer_chamber
(
dd4hep
::
Rotation3D
(),
dd4hep
::
Transform3D
transform_outer_chamber
(
dd4hep
::
Rotation3D
(),
dd4hep
::
Position
(
0
,
0
,
0
));
dd4hep
::
Position
(
0
,
0
,
0
));
dd4hep
::
PlacedVolume
det_outer_chamber_phy
=
det_vol
.
placeVolume
(
det_outer_chamber_vol
,
dd4hep
::
PlacedVolume
det_outer_chamber_phy
=
det_vol
.
placeVolume
(
det_outer_chamber_vol
,
transform_outer_chamber
);
transform_inner_chamber
);
det_outer_chamber_phy
.
addPhysVolID
(
"chamber"
,
1
);
det_inner_chamber_phy
.
addPhysVolID
(
"chamber"
,
1
);
if
(
x_det
.
isSensitive
()
)
{
dd4hep
::
SensitiveDetector
sd
=
sens
;
det_outer_chamber_vol
.
setSensitiveDetector
(
sens
);
sd
.
setType
(
"tracker"
);
}
// - place in world
// - place in world
dd4hep
::
Transform3D
transform
(
dd4hep
::
Rotation3D
(),
dd4hep
::
Transform3D
transform
(
dd4hep
::
Rotation3D
(),
dd4hep
::
Position
(
0
,
0
,
0
));
dd4hep
::
Position
(
0
,
0
,
0
));
dd4hep
::
PlacedVolume
phv
=
motherVol
.
placeVolume
(
det_vol
,
transform
);
dd4hep
::
PlacedVolume
phv
=
motherVol
.
placeVolume
(
det_vol
,
transform
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment