summaryrefslogtreecommitdiff
path: root/solids
diff options
context:
space:
mode:
Diffstat (limited to 'solids')
-rw-r--r--solids/__init__.py6
-rw-r--r--solids/pmts.py22
2 files changed, 24 insertions, 4 deletions
diff --git a/solids/__init__.py b/solids/__init__.py
index 479bacd..46f3119 100644
--- a/solids/__init__.py
+++ b/solids/__init__.py
@@ -1,6 +1,6 @@
import numpy as np
-from pmts import build_pmt, build_light_collector, build_light_collector_from_file
+from pmts import build_pmt, build_light_collector, build_light_collector_from_file, build_pmt_shell
import os
import sys
@@ -15,6 +15,10 @@ from view import buildable
def build_12inch_pmt(outer_material=water, theta=np.pi/8):
return build_pmt(dir + '/hamamatsu_12inch.txt', 0.003, outer_material, theta)
+@buildable('12inch_pmt_shell')
+def build_12inch_pmt_shell(outer_material=water, theta=np.pi/8):
+ return build_pmt_shell(dir + '/hamamatsu_12inch.txt')
+
# from Jelena Maricic
lc_12inch_a = 0.16597
lc_12inch_b = 0.584525
diff --git a/solids/pmts.py b/solids/pmts.py
index 22d9d67..a30d007 100644
--- a/solids/pmts.py
+++ b/solids/pmts.py
@@ -27,7 +27,24 @@ def build_light_collector(pmt, a, b, d, rmin, rmax, npoints=10):
lc_mesh = rotate_extrude(lc_radii, lc_profile + lc_offset, pmt.theta)
- return Solid(lc_mesh, pmt.outer_material, pmt.outer_material, color=0xff0000, surface=shiny_surface)
+ return Solid(lc_mesh, pmt.outer_material, pmt.outer_material, surface=shiny_surface)
+
+def build_pmt_shell(filename, outer_material=water, theta=np.pi/8):
+ profile = read_csv(filename)
+
+ # slice profile in half
+ profile = profile[profile[:,0] < 0]
+ profile[:,0] = -profile[:,0]
+ # order profile from base to face
+ profile = profile[np.argsort(profile[:,1])]
+ # set x coordinate to 0.0 for first and last profile along the profile
+ # so that the mesh is closed
+ profile[0,0] = 0.0
+ profile[-1,0] = 0.0
+ # convert mm -> m
+ profile /= 1000.0
+
+ return Solid(rotate_extrude(profile[:,0], profile[:,1], theta), glass, outer_material, color=0xeeffffff)
def build_pmt(filename, glass_thickness, outer_material=water, theta=np.pi/8):
profile = read_csv(filename)
@@ -72,6 +89,5 @@ def build_light_collector_from_file(filename, outer_material, theta=np.pi/24):
profile /= 1000.0
mesh = rotate_extrude(profile[:,0], profile[:,1], theta)
- solid = Solid(mesh, outer_material, outer_material, color=0xFF0000,
- surface=shiny_surface)
+ solid = Solid(mesh, outer_material, outer_material, surface=shiny_surface)
return solid