forked from jiaqi-jiang/GLOnet_for_thin_film
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmaterial_database.py
56 lines (42 loc) · 1.49 KB
/
material_database.py
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
import numpy as np
import pandas as pd
import torch
class MatDatabase(object):
"""docstring for MatDatabase
Parameters:
material_key: list of material names
"""
def __init__(self, material_key):
super(MatDatabase, self).__init__()
self.material_key = material_key
self.num_materials = len(material_key)
self.mat_database = self.build_database()
def build_database(self):
mat_database = {}
#%% Read in the dispersion data of each material
for i in range(self.num_materials):
file_name = './material_database/mat_' + self.material_key[i] + '.xlsx'
try:
A = np.array(pd.read_excel(file_name))
mat_database[self.material_key[i]] = (A[:, 0], A[:, 1], A[:, 2])
except NameError:
print('The material database does not contain', self.material_key[i])
return mat_database
def interp_wv(self, wv_in, material_key, ignoreloss = False):
'''
parameters
wv_in (tensor) : number of wavelengths
material_key (list) : number of materials
return
refractive indices (tensor or tuple of tensor) : number of materials x number of wavelengths
'''
n_data = np.zeros((len(material_key), wv_in.size(0)))
k_data = np.zeros((len(material_key), wv_in.size(0)))
for i in range(len(material_key)):
mat = self.mat_database[material_key[i]]
n_data[i, :] = np.interp(wv_in, mat[0], mat[1])
k_data[i, :] = np.interp(wv_in, mat[0], mat[2])
if ignoreloss:
return torch.tensor(n_data)
else:
return (torch.tensor(n_data), torch.tensor(k_data))