-
Notifications
You must be signed in to change notification settings - Fork 5
/
settings.py
151 lines (124 loc) · 4.45 KB
/
settings.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
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
#!/usr/bin/env python
"""settings, constants and computed constants that all other modules use"""
from __future__ import annotations
from PyQt5.QtGui import QColor
class HARDWARE:
"""Hardware constants of the plastic scanner."""
# the HARDWARE.WAVELENGTHS of the LED's in nanometers
WAVELENGTHS = [940, 1050, 1200, 1300, 1450, 1550, 1650, 1720]
# the baud rate of the used microcontroller
BAUDRATE = 9600
class USER_INPUT:
DEFAULT_SAMPLE_MATERIALS = [
"PET",
"HDPE",
"PVC",
"LDPE",
"PP",
"PS",
"reference",
"unknown",
]
class DATAFRAME:
"""settings for working with and loading dataframes."""
# for the dataframe
DATASET_URL = "https://raw.githubusercontent.com/Plastic-Scanner/data/main/data/20230117_DB2.1_second_dataset/measurement.csv"
# the headers for the dataframe:
# | Reading | the how many'th measurement |
# | Name | name or id of the piece |
# | PlasticType | type of the plastic |
# | Color | physical color of the piece of plastic |
# | MeasurementType | if the measurement was a calibration or not | options: regular, calibration
# | nm<wavelengths> | measured signal per wavelength |
# | nm<wavelengths>_norm | signal per wavelength after normalization |
HEADER = (
[
"Name",
"PlasticType",
"Color",
"MeasurementType",
"DateTime",
]
+ [f"nm{x}" for x in HARDWARE.WAVELENGTHS]
+ [f"nm{x}_norm" for x in HARDWARE.WAVELENGTHS]
+ [f"nm{x}_snv" for x in HARDWARE.WAVELENGTHS]
)
HEADER_DTYPES = (
{
"Name": str,
"PlasticType": str,
"Color": str,
"MeasurementType": str,
"DateTime": str,
}
| {f"nm{x}": float for x in HARDWARE.WAVELENGTHS}
| {f"nm{x}_norm": float for x in HARDWARE.WAVELENGTHS}
| {f"nm{x}_snv": float for x in HARDWARE.WAVELENGTHS}
)
class TABLE:
"""The table widget takes data from a pandas dataframe
It takes the data from the columns in DATAFRAME_SUBSET_HEADERS.
The columns of the table are also labelled, for this TABLE_HEADER is used.
"""
# the names of the columns of the table
HEADERS = ["name", "material", "color"] + [str(x) for x in HARDWARE.WAVELENGTHS]
# header to dataframe
HEAD_TO_DF = {
"name": "Name",
"material": "PlasticType",
"color": "Color",
}
# the columns of the dataframe that are represented in the table
DATAFRAME_SUBSET_HEADERS = [f"nm{x}" for x in HARDWARE.WAVELENGTHS]
# starting index of the columns that contain measurement data
N_NAMED_HEADERS = len(HEADERS) - len(DATAFRAME_SUBSET_HEADERS)
class CLASSIFIER:
"""Settings for the classifier model"""
# the columns of the dataframe that are used for the classifier model
PREDICTION_HEADERS = [f"nm{x}_norm" for x in HARDWARE.WAVELENGTHS]
# path to the model
# MODEL_TO_USE = "./resources/model.joblib"
MODEL_TO_USE = "./resources/model_PETHDPEPPPSOTHER.joblib"
class SCATTER3D:
"""Settings for the 3d scatter plot."""
AXIS_OPTIONS = (
[f"nm{x}" for x in HARDWARE.WAVELENGTHS]
+ [f"nm{x}_snv" for x in HARDWARE.WAVELENGTHS]
+ [f"nm{x}_norm" for x in HARDWARE.WAVELENGTHS]
)
AXIS_VAR_X_DEFAULT = "nm1050_norm"
AXIS_VAR_Y_DEFAULT = "nm1450_norm"
AXIS_VAR_Z_DEFAULT = "nm1650_norm"
# colorblind friendly colors taken and adjusted from https://projects.susielu.com/viz-palette
# ["#ffd700", "#ffb14e", "#fa8775", "#ea5f94",
# "#cd34b5", "#9d02d7", "#0000ff", "#2194F9"]
COLOR_TABLEAU = (
QColor(255, 215, 0),
QColor(255, 177, 78),
QColor(250, 135, 117),
QColor(234, 95, 148),
QColor(205, 52, 181),
QColor(157, 2, 215),
QColor(33, 148, 249),
QColor(0, 0, 255),
)
ALLOWED_MATERIALS = [
"PET",
"HDPE",
"PVC",
"LDPE",
"PP",
"PS",
"other",
"unknown",
]
COLOR_MAP = dict(
zip(
ALLOWED_MATERIALS,
COLOR_TABLEAU,
)
)
class GUI:
"""settings used for the main window"""
# path to the icon
WINDOW_LOGO = "./resources/ps_logo.png"