summaryrefslogtreecommitdiff
path: root/optics.py
blob: 23a096f899a846d3e5390200ae3e2ed575ecd17a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import numpy as np
from geometry import Material, Surface

vacuum = Material('vacuum')
vacuum.set('refractive_index', 1.0)
vacuum.set('absorption_length', np.inf)
vacuum.set('scattering_length', np.inf)

lambertian_surface = Surface('lambertian_surface')
lambertian_surface.set('reflect_diffuse', 1)

black_surface = Surface('black_surface')
black_surface.set('absorb', 1)

shiny_surface = Surface('shiny_surface')
shiny_surface.set('reflect_specular', 1)

glossy_surface = Surface('glossy_surface')
glossy_surface.set('reflect_diffuse', 0.5)
glossy_surface.set('reflect_specular', 0.5)

# r7081hqe photocathode material surface
# source: hamamatsu supplied datasheet for r7081hqe pmt serial number zd0062
r7081hqe_photocathode = Surface('r7081hqe_photocathode')
r7081hqe_photocathode.detect = \
    np.array([(260.0,  0.00),
              (270.0,  0.04), (280.0,  0.07), (290.0,  0.77), (300.0,  4.57),
              (310.0, 11.80), (320.0, 17.70), (330.0, 23.50), (340.0, 27.54),
              (350.0, 30.52), (360.0, 31.60), (370.0, 31.90), (380.0, 32.20),
              (390.0, 32.00), (400.0, 31.80), (410.0, 30.80), (420.0, 30.16),
              (430.0, 29.24), (440.0, 28.31), (450.0, 27.41), (460.0, 26.25),
              (470.0, 24.90), (480.0, 23.05), (490.0, 21.58), (500.0, 19.94),
              (510.0, 18.48), (520.0, 17.01), (530.0, 15.34), (540.0, 12.93),
              (550.0, 10.17), (560.0,  7.86), (570.0,  6.23), (580.0,  5.07),
              (590.0,  4.03), (600.0,  3.18), (610.0,  2.38), (620.0,  1.72),
              (630.0,  0.95), (640.0,  0.71), (650.0,  0.44), (660.0,  0.25),
              (670.0,  0.14), (680.0,  0.07), (690.0,  0.03), (700.0,  0.02),
              (710.0,  0.00)])
# convert percent -> fraction
r7081hqe_photocathode.detect[:,1] /= 100.0
# photons not detected are absorbed
r7081hqe_photocathode.set('absorb', 1.0 - r7081hqe_photocathode.detect[:,1], wavelengths=r7081hqe_photocathode.detect[:,0])

# water data comes from 'lightwater_sno' material in the SNO+ optics database
water = Material('water')
water.absorption_length = \
    np.array([[ 200. ,   57.51539993],
              [ 220. ,   64.22219849],
              [ 240. ,   72.6996994 ],
              [ 260. ,   83.75559998],
              [ 280. ,   98.77729797],
              [ 300. ,  120.36499786],
              [ 320. ,  154.0269928 ],
              [ 340. ,  213.82899475],
              [ 360. ,  349.5369873 ],
              [ 380. ,  105.87799835],
              [ 400. ,   50.35989761],
              [ 420. ,   32.56269836],
              [ 440. ,   26.70409966],
              [ 460. ,   22.63209915],
              [ 480. ,   19.63769913],
              [ 500. ,   17.34300041],
              [ 520. ,   11.84370041],
              [ 540. ,    8.99226952],
              [ 560. ,    7.24743032],
              [ 580. ,    6.06968021],
              [ 600. ,    5.22121   ],
              [ 620. ,    4.58085012],
              [ 640. ,    4.08041   ],
              [ 660. ,    3.67853999],
              [ 680. ,    3.3487401 ],
              [ 700. ,    3.07319999],
              [ 720. ,    2.83956003],
              [ 740. ,    2.63893986],
              [ 760. ,    2.46479011],
              [ 780. ,    2.31220984],
              [ 800. ,    2.1774199 ]], dtype=np.float32)
water.scattering_length = \
    np.array([[  200.        ,    11.36030006],
              [  220.        ,    16.63280106],
              [  240.        ,    23.55719948],
              [  260.        ,    32.44709778],
              [  280.        ,    43.64310074],
              [  300.        ,    57.51350021],
              [  320.        ,    74.45359802],
              [  340.        ,    94.88600159],
              [  360.        ,   119.26100159],
              [  380.        ,   148.05499268],
              [  400.        ,   181.77200317],
              [  420.        ,   220.94500732],
              [  440.        ,   266.13299561],
              [  460.        ,   317.92098999],
              [  480.        ,   376.92300415],
              [  500.        ,   443.78100586],
              [  520.        ,   519.16101074],
              [  540.        ,   603.75897217],
              [  560.        ,   698.29797363],
              [  580.        ,   803.52697754],
              [  600.        ,   920.22399902],
              [  620.        ,  1049.18994141],
              [  640.        ,  1191.27001953],
              [  660.        ,  1347.30004883],
              [  680.        ,  1518.18005371],
              [  700.        ,  1704.82995605],
              [  720.        ,  1908.18005371],
              [  740.        ,  2129.19995117],
              [  760.        ,  2368.87988281],
              [  780.        ,  2628.25      ],
              [  800.        ,  2908.36010742]], dtype=np.float32)
water.refractive_index = \
    np.array([[ 200.        ,    1.41614997],
              [ 220.        ,    1.39726996],
              [ 240.        ,    1.38395   ],
              [ 260.        ,    1.37414002],
              [ 280.        ,    1.36667001],
              [ 300.        ,    1.36082006],
              [ 320.        ,    1.35615003],
              [ 340.        ,    1.35232997],
              [ 360.        ,    1.34915996],
              [ 380.        ,    1.34650004],
              [ 400.        ,    1.34423006],
              [ 420.        ,    1.34227002],
              [ 440.        ,    1.34057999],
              [ 460.        ,    1.33908999],
              [ 480.        ,    1.33778   ],
              [ 500.        ,    1.33660996],
              [ 520.        ,    1.33556998],
              [ 540.        ,    1.33463001],
              [ 560.        ,    1.33378005],
              [ 580.        ,    1.33300996],
              [ 600.        ,    1.33230996],
              [ 620.        ,    1.33167005],
              [ 640.        ,    1.33107996],
              [ 660.        ,    1.33053994],
              [ 680.        ,    1.33003998],
              [ 700.        ,    1.32957006],
              [ 720.        ,    1.32913995],
              [ 740.        ,    1.32874   ],
              [ 760.        ,    1.32835996],
              [ 780.        ,    1.32800996],
              [ 800.        ,    1.32767999]], dtype=np.float32)

# glass data comes from 'glass_sno' material in SNO+ optics database
glass = Material('glass')
glass.set('refractive_index', 1.49)
glass.absorption_length = \
    np.array([(200, 0.1e-6), (300, 0.1e-6), (330, 1.0), (500, 2.0), (600, 1.0), (770, 0.5), (800, 0.1e-6)])
glass.set('scattering_length', np.inf)