|
4 | 4 |
|
5 | 5 |
|
6 | 6 | class DBRMirror:
|
7 | | - def __init__(self, ni, nbr): # ni - refractive indices as array, nbr - number of layers (must be even!) |
8 | | - if nbr % 2 != 0: print("Number must be even! Program will give wrong results") |
9 | | - self.nbr = nbr |
10 | | - self.n = array(concatenate(([1], tile(ni, (self.nbr-2)//2), [ni[0]]))) |
| 7 | + def __init__(self, data): |
| 8 | + if isinstance (data, str): |
| 9 | + data = loadtxt(data) |
| 10 | + self.n = data[:, 0] |
| 11 | + self.d = data[:, 1] |
11 | 12 |
|
12 | | - def reflection_coeff(self, incidentwavelength, braggwavelength): |
| 13 | + |
| 14 | + def reflection_coeff(self, incidentwavelength): |
13 | 15 | nm = (self.n[:-1] / self.n[1:])
|
14 | 16 | R = array([])
|
15 | | - for value in braggwavelength: |
16 | | - d = array(concatenate(([0], 0.25 * value/self.n[1:-1], [0]))) |
17 | | - phi = 2j*pi*self.n[:-1]*d[:-1]/incidentwavelength |
| 17 | + for wavelength in incidentwavelength: |
| 18 | + phi = 2j*pi*self.n[:-1]*self.d[:-1]/wavelength |
18 | 19 | transition_matrix = array([[0.5*(1+nm)*exp(-phi), 0.5*(1-nm)*exp(phi)],
|
19 | 20 | [0.5*(1-nm)*exp(-phi), 0.5*(1+nm)*exp(phi)]])
|
20 | 21 |
|
21 | 22 | general_transition_matrix = 1
|
22 | | - for k in range(self.nbr - 2,-1,-1): |
| 23 | + for k in range(self.n.size - 2,-1,-1): |
23 | 24 | general_transition_matrix = dot(general_transition_matrix, transition_matrix[:, :, k])
|
24 | 25 |
|
25 | | - # print(general_transition_matrix) |
26 | 26 | r = - general_transition_matrix.item(2) / general_transition_matrix.item(3)
|
27 | 27 | R = append(R, abs(r)**2)
|
28 | 28 |
|
29 | | - # t = linalg.det(general_transition_matrix) / general_transition_matrix.item(3) |
30 | | - # T = n.item(N-1)/n.item(0) * abs(t)**2 |
31 | | - # |
32 | | - # print(R) |
33 | | - # print(T) |
34 | | - # print(R+T) |
35 | 29 | return R
|
36 | 30 |
|
37 | 31 |
|
38 | 32 | start = timeit.default_timer()
|
39 | | -wave_length = 0.98 * 10 ** (-6) |
40 | | -NewMirror = DBRMirror([3.0, 3.5], 42) |
41 | | -braggwavelength = array(linspace(0.68,1.28,100000)*10**(-6)) |
42 | | -R = NewMirror.reflection_coeff(wave_length,braggwavelength) |
| 33 | + |
| 34 | +data = np.array([ |
| 35 | + [1.0, 0], |
| 36 | + [3.5, 74.0], |
| 37 | + [3.0, 92.5], |
| 38 | + [3.5, 74.0], |
| 39 | + [3.0, 92.5], |
| 40 | + [3.5, 74.0], |
| 41 | + [3.0, 92.5], |
| 42 | + [3.5, 0] |
| 43 | +]) |
| 44 | + |
| 45 | +NewMirror = DBRMirror(data) |
| 46 | + |
| 47 | +wavelength = array(linspace(600,2000,100000)) |
| 48 | + |
| 49 | +R = NewMirror.reflection_coeff(wavelength) |
43 | 50 |
|
44 | 51 | stop = timeit.default_timer()
|
45 | 52 | print(stop - start)
|
46 | 53 |
|
47 | | -plot(braggwavelength, R) |
| 54 | +plot(wavelength, R) |
48 | 55 | xlabel("$\lambda$")
|
49 | 56 | ylabel("R")
|
50 | 57 | show()
|
0 commit comments