Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
solid
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
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
EIC
detectors
solid
Commits
d442744e
Commit
d442744e
authored
May 17, 2024
by
Chao Peng
Browse files
Options
Downloads
Patches
Plain Diff
update LGC
parent
11f72a14
Branches
Branches containing commit
No related tags found
No related merge requests found
Pipeline
#92486
passed with warnings
May 17, 2024
Stage: build
Stage: test
Changes
3
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
compact/LGC.xml
+10
-4
10 additions, 4 deletions
compact/LGC.xml
compact/optics.xml
+2
-2
2 additions, 2 deletions
compact/optics.xml
src/GasCherenkov_geo.cpp
+30
-39
30 additions, 39 deletions
src/GasCherenkov_geo.cpp
with
42 additions
and
45 deletions
compact/LGC.xml
+
10
−
4
View file @
d442744e
...
...
@@ -19,7 +19,10 @@
vis=
"RedVis"
>
<placement
x=
"0*cm"
y=
"0*cm"
z=
"260*cm"
/>
<dimensions
numsides=
"30"
rmin=
"10*cm"
rmax1=
"80*cm"
rmax2=
"120*cm"
zmin=
"20*cm"
zmax=
"220*cm"
/>
<dimensions
numsides=
"30"
>
<main
rmin1=
"71*cm"
rmax1=
"265*cm"
rmin2=
"85*cm"
rmax2=
"265*cm"
length=
"155*cm"
/>
<snout
rmin1=
"58*cm"
rmax1=
"127*cm"
rmin2=
"58*cm"
rmax2=
"144*cm"
length=
"107*cm"
/>
</dimensions>
<radiator
material=
"N2Optical"
/>
<comment>
...
...
@@ -27,12 +30,12 @@
</comment>
<mirrors>
<support
material=
"Copper"
/>
<piece
id=
"1"
material=
"
PyrexGlassOptical
"
>
<piece
id=
"1"
material=
"
N2Optical"
surface=
"MirrorOpticalSurface
"
>
<dimensions
radius=
"277.51*cm"
length=
"114.53*cm"
width1=
"16.26*cm"
width2=
"36.03*cm"
thickness=
"2.0*mm"
/>
<placement
x=
"0*cm"
y=
"129.9*cm"
z=
"30.3125*cm"
/>
<rotation
x=
"135.0*degree"
y=
"180*degree"
z=
"180*degree"
/>
</piece>
<piece
id=
"2"
material=
"PyrexGlassOptical"
>
<piece
id=
"2"
material=
"PyrexGlassOptical"
surface=
"MirrorOpticalSurface"
>
<dimensions
radius=
"157.99*cm"
length=
"59.260*cm"
width1=
"37.06*cm"
width2=
"45.95*cm"
thickness=
"2.0*mm"
/>
<placement
x=
"0*cm"
y=
"211.411*cm"
z=
"50.6678*cm"
/>
<rotation
x=
"85.0*degree"
y=
"180*degree"
z=
"180*degree"
/>
...
...
@@ -42,13 +45,16 @@
<comment>
Light Gas Cherenkov: Winston cones
</comment>
<winston_cone
material=
"PyrexGlassOptical"
>
<winston_cone
material=
"PyrexGlassOptical"
surface=
"MirrorOpticalSurface"
>
<placement
x=
"0*cm"
y=
"255*cm"
z=
"-40*cm"
/>
<rotation
x=
"55.0*degree"
y=
"0"
z=
"0"
/>
<cone_dimensions
thickness=
"4*mm"
length=
"30.*cm"
radius1=
"7.0*cm"
radius2=
"21.0*cm"
/>
<cone_dimensions
thickness=
"4*mm"
length=
"30.*cm"
radius1=
"7.0*cm"
radius2=
"15.0*cm"
/>
<tube_dimensions
radius=
"11.28*cm"
length=
"30.*cm"
/>
</winston_cone>
<pmt_array
surface=
"PMTOpticalSurface"
>
<dimensions
x=
"20*cm"
y=
"20*cm"
/>
</pmt_aarray>
<comment>
Light Gas Cherenkov End
...
...
This diff is collapsed.
Click to expand it.
compact/optics.xml
+
2
−
2
View file @
d442744e
...
...
@@ -45,7 +45,7 @@
</comment>
<matrix
name=
"REFLECTIVITY_
LGC
Mirror"
coldim=
"2"
values=
"
<matrix
name=
"REFLECTIVITY_Mirror"
coldim=
"2"
values=
"
1.0*eV 0.8
4.0*eV 0.8
5.1*eV 0.8
...
...
@@ -147,7 +147,7 @@
</materials>
<surfaces>
<opticalsurface
finish=
"polished"
model=
"glisur"
name=
"MirrorOpticalSurface"
type=
"dielectric_metal"
value=
"0"
>
<property
name=
"REFLECTIVITY"
ref=
"REFLECTIVITY_
LGC
Mirror"
/>
<property
name=
"REFLECTIVITY"
ref=
"REFLECTIVITY_Mirror"
/>
<property
name=
"RINDEX"
coldim=
"2"
values=
"1.034*eV 1.5 4.136*eV 1.5"
/>
<!--<property name="EFFICIENCY" ref="EFFICIENCY0x8b77240"/>-->
</opticalsurface>
...
...
This diff is collapsed.
Click to expand it.
src/GasCherenkov_geo.cpp
+
30
−
39
View file @
d442744e
...
...
@@ -33,31 +33,15 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
sens
.
setType
(
"tracker"
);
auto
dims
=
x_det
.
dimensions
();
auto
r0
=
dims
.
rmin
();
auto
r1
=
dims
.
rmax1
();
auto
r2
=
dims
.
rmax2
();
auto
zmin
=
dims
.
zmin
();
auto
zmax
=
dims
.
zmax
();
int
nsec
=
dims
.
numsides
();
xml_dim_t
dims_tank
=
dims
.
child
(
_Unicode
(
main
));
xml_dim_t
dims_snout
=
dims
.
child
(
_Unicode
(
snout
));
xml_dim_t
x_place
=
x_det
.
child
(
_U
(
placement
));
auto
pos_x
=
x_place
.
x
();
auto
pos_y
=
x_place
.
y
();
auto
pos_z
=
x_place
.
z
();
double
LGC_inner_radius1
=
71.0
*
cm
;
double
LGC_inner_radius2
=
85.0
*
cm
;
double
LGC_outer_radius1
=
265.0
*
cm
;
double
LGC_main_length
=
105.0
*
cm
;
double
LGC_snout_length
=
107.0
*
cm
;
double
LGC_snout_inner_radius1
=
58.0
*
cm
;
double
LGC_snout_inner_radius2
=
LGC_inner_radius1
;
double
LGC_snout_outer_radius1
=
127.0
*
cm
;
double
LGC_snout_outer_radius2
=
144.0
*
cm
;
double
LGC_entrance_window_thickness
=
0.05
*
mm
;
// something tells this might be 5 mil, not mm
double
LGC_exit_window_thickness
=
0.1
*
mm
;
// same here
double
LGC_pmt_array_size
=
20.0
*
cm
;
// Everything that goes in the tank will be copies of the sector assembly volume
Assembly
v_sector
(
"cherenkov_sector_1"
);
DetElement
de_sector
(
"de_sector"
+
std
::
to_string
(
1
),
1
);
...
...
@@ -65,11 +49,9 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
// gas tank
auto
x_rad
=
x_det
.
child
(
_U
(
radiator
));
auto
rad_mat
=
desc
.
material
(
x_rad
.
attr
<
std
::
string
>
(
_U
(
material
)));
ConeSegment
tank_main
(
0.5
*
LGC_main_length
,
LGC_inner_radius1
,
LGC_outer_radius1
,
LGC_inner_radius2
,
LGC_outer_radius1
);
ConeSegment
tank_snout
(
0.5
*
LGC_snout_length
,
LGC_snout_inner_radius1
,
LGC_snout_outer_radius1
,
LGC_snout_inner_radius2
,
LGC_snout_outer_radius2
);
UnionSolid
tank_solid
(
tank_main
,
tank_snout
,
Position
(
0
,
0
,
-
0.5
*
LGC_main_length
-
0.5
*
LGC_snout_length
));
ConeSegment
tank_main
(
dims_tank
.
length
()
/
2.
,
dims_tank
.
rmin1
(),
dims_tank
.
rmax1
(),
dims_tank
.
rmin2
(),
dims_tank
.
rmax2
());
ConeSegment
tank_snout
(
dims_snout
.
length
()
/
2.
,
dims_snout
.
rmin1
(),
dims_snout
.
rmax1
(),
dims_snout
.
rmin2
(),
dims_snout
.
rmax2
());
UnionSolid
tank_solid
(
tank_main
,
tank_snout
,
Position
(
0
,
0
,
-
(
dims_tank
.
length
()
+
dims_snout
.
length
())
/
2.
));
Volume
v_tank
(
"vol_gas_tank"
,
tank_solid
,
rad_mat
);
v_tank
.
setVisAttributes
(
desc
,
dd4hep
::
getAttrOrDefault
<
std
::
string
>
(
x_det
,
_Unicode
(
vis
),
"BlueVis"
));
Volume
motherVol
=
desc
.
pickMotherVolume
(
det
);
...
...
@@ -77,10 +59,8 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
envPV
.
addPhysVolID
(
"system"
,
det_id
);
det
.
setPlacement
(
envPV
);
// optical surface
s
// optical surface
manager
OpticalSurfaceManager
surfMgr
=
desc
.
surfaceManager
();
OpticalSurface
mirrorSurf
=
surfMgr
.
opticalSurface
(
"MirrorOpticalSurface"
);
OpticalSurface
pmtSurf
=
surfMgr
.
opticalSurface
(
"PMTOpticalSurface"
);
// mirrors
auto
x_mirrors
=
x_det
.
child
(
_Unicode
(
mirrors
));
...
...
@@ -96,17 +76,20 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
Trd1
mir_cutout
(
mdim
.
attr
<
double
>
(
_Unicode
(
width1
))
/
2.
,
mdim
.
attr
<
double
>
(
_Unicode
(
width2
))
/
2.
,
mdim
.
length
()
/
2.
,
mdim
.
length
()
/
2.
);
auto
mir_trans
=
RotationX
(
M_PI
/
2.
)
*
Transform3D
(
Position
(
0.
,
0.
,
-
mdim
.
radius
()));
Volume
v_mir
(
"vol_mirror_"
+
std
::
to_string
(
i
),
IntersectionSolid
(
mir_cutout
,
mir_shell
,
mir_trans
),
mmat
);
auto
mir_trans2
=
Transform3D
(
Position
(
mloc
.
x
(),
mloc
.
y
(),
mloc
.
z
()))
*
RotationZYX
(
mrot
.
z
(),
mrot
.
y
(),
mrot
.
x
());
PlacedVolume
pv_mir
=
v_sector
.
placeVolume
(
v_mir
,
mir_trans2
);
DetElement
de_mir
(
det
,
"de_mirror"
+
std
::
to_string
(
i
),
i
);
pv_mir
.
addPhysVolID
(
"mirror"
,
i
);
de_mir
.
setPlacement
(
pv_mir
);
v_mir
.
setSensitiveDetector
(
sens
);
// v_mir.setSensitiveDetector(sens);
auto
surface
=
surfMgr
.
opticalSurface
(
x_mir
.
attr
<
std
::
string
>
(
_Unicode
(
surface
)));
// optical surface
//
SkinSurface mirror
Border_Surf
(desc, de_mir, "
LGC
mirror
", mirrorSurf
, v_mir);
//
mirror
Border_Surf
.isValid();
SkinSurface
mirror
_skin
(
desc
,
de_mir
,
"mirror
_surface_"
+
std
::
to_string
(
i
),
surface
,
v_mir
);
mirror
_skin
.
isValid
();
i
++
;
}
...
...
@@ -152,13 +135,20 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
Transform3D
(
Position
(
0
,
0
,
tube_length
/
2.0
+
5.0
*
mm
)));
de_winston_cone
.
setPlacement
(
pv_winston_cone_solid
);
// optical surface
SkinSurface
winstonBorder_Surf
(
desc
,
de_winston_cone
,
"LGCWinstonCone"
,
mirrorSurf
,
v_winston_cone_solid
);
winstonBorder_Surf
.
isValid
();
auto
surface
=
surfMgr
.
opticalSurface
(
x_winston
.
attr
<
std
::
string
>
(
_Unicode
(
surface
)));
SkinSurface
winston_skin
(
desc
,
de_winston_cone
,
"winston_surface"
,
surface
,
v_winston_cone_solid
);
winston_skin
.
isValid
();
// ---------------
// Dummy PMT surface
auto
x_pmt
=
x_det
.
child
(
_Unicode
(
pmt_array
));
xml_dim_t
dims_pmt
=
x_pmt
.
child
(
_Unicode
(
dimensions
));
auto
pmt_x
=
dims_pmt
.
x
();
auto
pmt_y
=
dims_pmt
.
y
();
auto
pmt_surf
=
surfMgr
.
opticalSurface
(
x_pmt
.
attr
<
std
::
string
>
(
_Unicode
(
surface
)));
//// ---------------
//// Dummy PMT surface
DetElement
de_pmt_array
(
det
,
"PMT_DE"
,
1
);
Box
pmt_array
(
LGC_pmt_array_size
/
2.
0
,
LGC_pmt_array_size
/
2.
0
,
5
*
mm
/
2.0
);
Box
pmt_array
(
pmt_x
/
2.
,
pmt_y
/
2.
,
5
*
mm
/
2.0
);
Volume
v_pmt_array
(
"v_pmt_array"
,
pmt_array
,
rad_mat
);
PlacedVolume
pv_pmt_array
=
v_sector
.
placeVolume
(
v_pmt_array
,
Transform3D
(
Position
(
wpl
.
x
(),
wpl
.
y
(),
wpl
.
z
()))
*
...
...
@@ -169,14 +159,15 @@ static Ref_t createDetector(Detector& desc, xml::Handle_t handle, SensitiveDetec
v_pmt_array
.
setSensitiveDetector
(
sens
);
// optical surface
SkinSurface
pmt
Border_Surf
(
desc
,
de_pmt_array
,
"LGCPMTsurface"
,
pmt
S
urf
,
v_pmt_array
);
pmt
Border_Surf
.
isValid
();
SkinSurface
pmt
_skin
(
desc
,
de_pmt_array
,
"LGCPMTsurface"
,
pmt
_s
urf
,
v_pmt_array
);
pmt
_skin
.
isValid
();
// copper layer inside to stop photons
Box
pmt_array_backing
(
LGC_pmt_array_size
/
2.
0
,
LGC_pmt_array_size
/
2.
0
,
1
*
mm
/
2.0
);
Box
pmt_array_backing
(
pmt_x
/
2.
,
pmt_y
/
2.
,
1
*
mm
/
2.0
);
auto
Copper
=
desc
.
material
(
"Copper"
);
Volume
v_pmt_array_backing
(
"v_pmt_array_backing"
,
pmt_array_backing
,
Copper
);
PlacedVolume
pv_pmt_array_backing
=
v_pmt_array
.
placeVolume
(
v_pmt_array_backing
,
Position
(
0
,
0
,
0
));
// PlacedVolume pv_pmt_array_backing =
v_pmt_array
.
placeVolume
(
v_pmt_array_backing
,
Position
(
0
,
0
,
0
));
return
det
;
}
...
...
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