Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
athena
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container 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
Zhiwen Zhao
athena
Commits
bb9e63e0
Commit
bb9e63e0
authored
3 years ago
by
Alexander Kiselev
Browse files
Options
Downloads
Patches
Plain Diff
SiPM sensor geometry for dRICH implemented
parent
094eee76
Branches
irt-init-v01
No related tags found
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
compact/drich.xml
+10
-8
10 additions, 8 deletions
compact/drich.xml
compact/erich.xml
+14
-11
14 additions, 11 deletions
compact/erich.xml
src/DRich_geo.cpp
+5
-5
5 additions, 5 deletions
src/DRich_geo.cpp
src/ERich_geo.cpp
+11
-1
11 additions, 1 deletion
src/ERich_geo.cpp
with
40 additions
and
25 deletions
compact/drich.xml
+
10
−
8
View file @
bb9e63e0
...
...
@@ -18,9 +18,11 @@
<constant
name=
"DRICH_rmax1"
value=
"DRICH_SnoutSlope * ( DRICH_zmin + DRICH_SnoutLength)"
/>
<!-- additional parameters -->
<constant
name=
"DRICH_aerogel_thickness"
value=
"4.0*cm"
/>
<!-- aerogel thickness -->
<constant
name=
"DRICH_sensor_size"
value=
"48.0*mm"
/>
<!-- sensor side length -->
<constant
name=
"DRICH_sensor_thickness"
value=
"35.0*mm"
/>
<!-- sensor thickness -->
<constant
name=
"DRICH_num_px"
value=
"16"
/>
<!-- number of pixels along one side of the sensor -->
<constant
name=
"DRICH_sensor_size"
value=
"25.8*mm"
/>
<!-- sensor side length -->
<constant
name=
"DRICH_sensor_thickness"
value=
"0.5*mm"
/>
<!-- sensor thickness -->
<constant
name=
"DRICH_num_px"
value=
"8"
/>
<!-- number of pixels along one side of the sensor -->
<constant
name=
"DRICH_sensor_pixel_pitch"
value=
"3.2*mm"
/>
<!-- center-to-center distance between SiPMs in a 8x8 panel -->
<constant
name=
"DRICH_sensor_pixel_size"
value=
"3.0*mm"
/>
<!-- a single SiPM pixel size -->
<!-- debugging switches -->
<comment>
- `DRICH_debug_optics`: 1 = all components become vacuum, except for mirrors; test opticalphotons from IP
...
...
@@ -183,7 +185,7 @@
vis=
"DRICH_sensor_vis"
side=
"DRICH_sensor_size"
thickness=
"DRICH_sensor_thickness"
gap=
"0.
5*(52-48)*mm +
2*mm"
gap=
"0.2*mm"
/>
...
...
@@ -244,10 +246,10 @@
<readout
name=
"DRICHHits"
>
<segmentation
type=
"CartesianGridXY"
grid_size_x=
"DRICH_sensor_
size/(DRICH_num_px-1)
"
grid_size_y=
"DRICH_sensor_
size/(DRICH_num_px-1)
"
offset_x=
"-DRICH_sensor_
size
/2.0"
offset_y=
"-DRICH_sensor_
size
/2.0"
grid_size_x=
"DRICH_sensor_
pixel_pitch
"
grid_size_y=
"DRICH_sensor_
pixel_pitch
"
offset_x=
"-DRICH_sensor_
pixel_pitch*DRICH_num_px
/2.0"
offset_y=
"-DRICH_sensor_
pixel_pitch*DRICH_num_px
/2.0"
/>
<id>
system:8,sector:3,module:12,x:23:16,y:16
</id>
</readout>
...
...
This diff is collapsed.
Click to expand it.
compact/erich.xml
+
14
−
11
View file @
bb9e63e0
...
...
@@ -13,11 +13,13 @@
<constant
name=
"ERICH_window_thickness"
value=
"0.1*cm"
/>
<!-- thickness of entrance and exit walls -->
<!-- additional parameters -->
<constant
name=
"ERICH_aerogel_thickness"
value=
"3.0*cm"
/>
<!-- aerogel thickness -->
<constant
name=
"ERICH_sensor_active_size"
value=
"24.0*mm"
/>
<!-- sensor side length (effective area) -->
<constant
name=
"ERICH_sensor_
full_
size"
value=
"25.8*mm"
/>
<!-- sensor side length (full size, with enclosure) -->
<constant
name=
"ERICH_sensor_thickness"
value=
"
1
.5*mm"
/>
<!-- sensor thickness -->
<
!--
constant name="ERICH_sensor_active_size" value="24.0*mm"/
--
>
<!-- sensor side length (effective area) -->
<constant
name=
"ERICH_sensor_size"
value=
"25.8*mm"
/>
<!-- sensor side length (full size, with enclosure) -->
<constant
name=
"ERICH_sensor_thickness"
value=
"
0
.5*mm"
/>
<!-- sensor thickness -->
<constant
name=
"ERICH_sensor_dist"
value=
"40*cm"
/>
<!-- distance between aerogel exit plane and sensor entrance plane -->
<constant
name=
"ERICH_num_px"
value=
"8"
/>
<!-- number of pixels along one side of the sensor -->
<constant
name=
"ERICH_sensor_pixel_pitch"
value=
"3.2*mm"
/>
<!-- center-to-center distance between SiPMs in a 8x8 panel -->
<constant
name=
"ERICH_sensor_pixel_size"
value=
"3.0*mm"
/>
<!-- a single SiPM pixel size -->
<!-- debugging switches -->
<comment>
- `ERICH_debug_optics`: 1 = all components become vacuum; test opticalphotons from IP
...
...
@@ -117,8 +119,7 @@
<documentation
level=
"10"
>
##### Sensor module
- based on Hamamatsu S13361-3050AE-08
- effective area: 24.0 x 24.0 mm
- enclosure size: 25.8 x 25.8 mm
- sensor assembly size: 25.8 x 25.8 mm
- pixel size: 3x3 mm (8x8 matrix)
- thickness: 1.5 mm
- dimensions:
...
...
@@ -132,9 +133,9 @@
material=
"AirOptical"
surface=
"SensorSurface_ERICH"
vis=
"ERICH_sensor_vis"
side=
"ERICH_sensor_
active_
size"
side=
"ERICH_sensor_size"
thickness=
"ERICH_sensor_thickness"
gap=
"0.
5*(ERICH_sensor_full_size-ERICH_sensor_active_size) + 0.1
*mm"
gap=
"0.
2
*mm"
/>
...
...
@@ -184,15 +185,17 @@
| x pixel | 20 | 16 |
| y pixel | 36 | 16 |
- offset assignment needs to be validated; presently IRTAlgorithm Juggler plugin
does digitization on its own
</documentation>
<readouts>
<readout
name=
"ERICHHits"
>
<segmentation
type=
"CartesianGridXY"
grid_size_x=
"ERICH_sensor_
active_size/(ERICH_num_px-1)
"
grid_size_y=
"ERICH_sensor_
active_size/(ERICH_num_px-1)"
offset_x=
"-ERICH_sensor_
active_size
/2.0"
offset_y=
"-ERICH_sensor_
active_size
/2.0"
grid_size_x=
"ERICH_sensor_
pixel_pitch
"
grid_size_y=
"ERICH_sensor_
pixel_pitch"
offset_x=
"-ERICH_sensor_
pixel_pitch*ERICH_num_px
/2.0"
offset_y=
"-ERICH_sensor_
pixel_pitch*ERICH_num_px
/2.0"
/>
<id>
system:8,module:12,x:20:16,y:16
</id>
</readout>
...
...
This diff is collapsed.
Click to expand it.
src/DRich_geo.cpp
+
5
−
5
View file @
bb9e63e0
...
...
@@ -285,7 +285,7 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
Volume
motherVol
=
desc
.
pickMotherVolume
(
det
);
// FIXME: usage of this translation assumes gasvolume2vessel translation is (0,0,0);
auto
gasvolume2master
=
Position
(
0
,
0
,
vesselZmin
)
-
originFront
;
printf
(
"@@@ %7.1f %7.1f %7.1f
\n
"
,
gasvolume2master
.
x
()
/
mm
,
gasvolume2master
.
y
()
/
mm
,
gasvolume2master
.
z
()
/
mm
);
//
printf("@@@ %7.1f %7.1f %7.1f\n", gasvolume2master.x()/mm, gasvolume2master.y()/mm, gasvolume2master.z()/mm);
PlacedVolume
vesselPV
=
motherVol
.
placeVolume
(
vesselVol
,
gasvolume2master
);
vesselPV
.
addPhysVolID
(
"system"
,
detID
);
det
.
setPlacement
(
vesselPV
);
...
...
@@ -325,7 +325,7 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
// aerogel placement and surface properties
// TODO [low-priority]: define skin properties for aerogel and filter
auto
radiatorPos
=
Position
(
0.
,
0.
,
radiatorFrontplane
)
+
originFront
;
printf
(
"@@@ %f
\n
"
,
(
1
/
mm
)
*
radiatorPos
.
z
());
//
printf("@@@ %f\n", (1/mm)*radiatorPos.z());
auto
aerogelPV
=
gasvolVol
.
placeVolume
(
aerogelVol
,
Translation3D
(
radiatorPos
.
x
(),
radiatorPos
.
y
(),
radiatorPos
.
z
())
// re-center to originFront
*
RotationY
(
radiatorPitch
)
// change polar angle to specified pitch // FIXME: probably broken (not yet in use anyway)
...
...
@@ -335,7 +335,7 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
//SkinSurface aerogelSkin(desc, aerogelDE, "mirror_optical_surface", aerogelSurf, aerogelVol);
//aerogelSkin.isValid();
{
printf
(
"@@@ %f
\n
"
,
(
1
/
mm
)
*
(
gasvolume2master
.
z
()
+
aerogelPV
.
position
().
z
()));
//+aerogelThickness/2));
//
printf("@@@ %f\n", (1/mm)*(gasvolume2master.z() + aerogelPV.position().z()));//+aerogelThickness/2));
//auto surface = new FlatSurface((1/mm)*TVector3(0,0,vesselOffset+aerogelPV.position().z()+aerogelThickness/2), nx, ny);
auto
surface
=
new
FlatSurface
((
1
/
mm
)
*
TVector3
(
0
,
0
,
gasvolume2master
.
z
()
+
aerogelPV
.
position
().
z
()),
nx
,
ny
);
//printf("@M@ aerogel %7.2f\n", (vesselOffset+aerogelPV.position().z()+aerogelThickness/2)/mm);
...
...
@@ -364,7 +364,7 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
{
// FIXME: create a small air gap in the geometry as well;
printf
(
"@@@ %f
\n
"
,
(
1
/
mm
)
*
(
gasvolume2master
.
z
()
+
filterPV
.
position
().
z
()));
//
printf("@@@ %f\n", (1/mm)*(gasvolume2master.z() + filterPV.position().z()));
auto
surface
=
new
FlatSurface
((
1
/
mm
)
*
TVector3
(
0
,
0
,
gasvolume2master
.
z
()
+
filterPV
.
position
().
z
()),
nx
,
ny
);
for
(
int
isec
=
0
;
isec
<
nmax
/*nSectors*/
;
isec
++
)
{
auto
radiator
=
geometry
->
AddFlatRadiator
(
detector
,
"Filter"
,
isec
,
...
...
@@ -504,7 +504,7 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
//localToGlobal.LocalToMaster(l, g);
double
xx
,
yy
,
zz
;
translation
.
GetComponents
(
xx
,
yy
,
zz
);
printf
(
"@@@ %10.5f %10.5f %10.5f
\n
"
,
xx
/
mm
,
yy
/
mm
,
zz
/
mm
);
//
printf("@@@ %10.5f %10.5f %10.5f\n", xx/mm, yy/mm, zz/mm);
auto
surface
=
new
SphericalSurface
((
1
/
mm
)
*
TVector3
(
xx
+
gasvolume2master
.
x
(),
...
...
This diff is collapsed.
Click to expand it.
src/ERich_geo.cpp
+
11
−
1
View file @
bb9e63e0
...
...
@@ -331,7 +331,17 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
));
// Assume that photosensors can have different 3D surface parameterizations;
auto
surface
=
new
FlatSurface
((
1
/
mm
)
*
TVector3
(
0.0
,
0
,
vesselOffset
+
sensorPV
.
position
().
z
()),
nx
,
ny
);
//+auto surface = new FlatSurface((1/mm)*TVector3(0.0, 0, vesselOffset+sensorPV.position().z()), nx, ny);
// FIXME: unify with dRICH;
double
xxl
[
3
]
=
{
0.0
,
0.0
,
0.0
},
bff
[
3
],
xxg
[
3
],
nxl
[
3
]
=
{
1.0
,
0.0
,
0.0
},
nyl
[
3
]
=
{
0.0
,
1.0
,
0.0
},
nxg
[
3
],
nyg
[
3
];
sensorPV
.
ptr
()
->
LocalToMaster
(
xxl
,
bff
);
vesselPV
.
ptr
()
->
LocalToMaster
(
bff
,
xxg
);
//printf("@G@ %10.5f %10.5f %10.5f\n", xxg[0]/mm, xxg[1]/mm, xxg[2]/mm);
// Assume vessel transformation is a pure translation;
sensorPV
.
ptr
()
->
LocalToMasterVect
(
nxl
,
nxg
);
sensorPV
.
ptr
()
->
LocalToMasterVect
(
nyl
,
nyg
);
auto
surface
=
new
FlatSurface
((
1
/
mm
)
*
TVector3
(
xxg
),
TVector3
(
nxg
),
TVector3
(
nyg
));
uint64_t
imodsec
=
(
uint64_t
(
imod
)
<<
moffset
)
&
msmask
;
detector
->
CreatePhotonDetectorInstance
(
0
,
pd
,
imodsec
,
surface
);
...
...
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