-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsample.py
100 lines (86 loc) · 3.51 KB
/
sample.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
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
from dataclasses import dataclass, field
import numpy as np
import scanning_tools
import json
import os
import settings
@dataclass
class Sample:
"""Class containing information for the sample currently being analysed. Also contains some class methods
that are specific to the current dataset."""
path: str = ""
gisaxs_data: np.ndarray = field(default_factory=list)
vertical_scan_x: list = field(default_factory=list)
vertical_scan_y: list = field(default_factory=list)
horizontal_scan_x: list = field(default_factory=list)
horizontal_scan_y: list = field(default_factory=list)
average_bg: int = 0
def __init__(self):
config_path = settings.get_path()
os.chdir(config_path)
with open("config.json", 'r') as f:
config = json.load(f)
self.mapping = config["mapping"]
self.ai = config["ai"]
self.vertical_scan_y = []
self.vertical_scan_x = []
self.horizontal_scan_y = []
self.horizontal_scan_x = []
def remove_background(self, heigth = 1, horizontal = True):
if horizontal:
self.horizontal_scan_y = [data - self.average_bg * heigth for data in self.horizontal_scan_y]
else:
self.vertical_scan_y = [data - self.average_bg*heigth for data in self.vertical_scan_y]
def remove_zeroes(self):
new_list = []
new_coordinatelist = []
for index in range(len(self.vertical_scan_y)):
if self.vertical_scan_y[index] > 0:
new_list.append(self.vertical_scan_y[index])
new_coordinatelist.append(self.vertical_scan_x[index])
self.vertical_scan_y = new_list
self.vertical_scan_x = new_coordinatelist
new_list = []
new_coordinatelist = []
for index in range(len(self.horizontal_scan_y)):
if self.horizontal_scan_y[index] > 0:
new_list.append(self.horizontal_scan_y[index])
new_coordinatelist.append(self.horizontal_scan_x[index])
self.horizontal_scan_y = new_list
self.horizontal_scan_x = new_coordinatelist
def get_x_pixels(self):
x_array = list(range(0, len(self.gisaxs_data[0])))
return x_array
def get_y_pixels(self):
data = self.gisaxs_data[::-1]
y_array = list(range(0, len(data)))
return y_array
def get_wavelength(self):
config_path = settings.get_path()
os.chdir(config_path)
with open("config.json", 'r') as f:
config = json.load(f)
return float(config["wavelength"])
def get_x_angular(self):
x_array = list(range(0, len(self.gisaxs_data[0])))
x_theta_f = scanning_tools.convert_x(x_array)
return x_theta_f
def get_y_angular(self):
data = self.gisaxs_data[::-1]
y_array = list(range(0, len(data)))
y_alpha_f = scanning_tools.convert_y(y_array)
return y_alpha_f
def get_y_qspace(self):
ttheta_f = self.get_x_angular()
alpha_f = self.get_y_angular()
wavelength = self.get_wavelength()
q_y = [(2*np.pi) / wavelength * (np.cos(np.deg2rad(alpha_f)) * np.sin(np.deg2rad(ttheta_f)))
for alpha_f, ttheta_f in zip(alpha_f, ttheta_f)]
return q_y
def get_z_qspace(self):
alpha_f = self.get_y_angular()
alpha_i = self.ai
wavelength = self.get_wavelength()
q_y = [(2*np.pi) / wavelength * (np.sin(np.deg2rad(alpha_f)) + np.sin(np.deg2rad(alpha_i))) for alpha_f in
alpha_f]
return q_y