-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcernox.py
More file actions
31 lines (25 loc) · 1.14 KB
/
cernox.py
File metadata and controls
31 lines (25 loc) · 1.14 KB
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
from functools import partial
from dataclasses import dataclass
from pathlib import Path
import csv
import numpy as np
import numpy.typing as npt
default_cernox_id = "X160190"
calibration_data_dir = Path(__file__).resolve().parent / 'calibration-data'
@dataclass
class CernoxCalibration:
T_K: npt.NDArray[float]
R_Ohm: npt.NDArray[float]
def calibration(cernox_id: str = default_cernox_id,
calibration_data_dir: Path = calibration_data_dir) -> CernoxCalibration:
calibration_file = calibration_data_dir / f"{cernox_id}.dat"
with open(calibration_file, 'r') as f:
a = np.array([[float(row[0]), float(row[-1])]
for row in list(csv.reader(f, delimiter = ' '))[3:]])
return CernoxCalibration(T_K = a[:, 0], R_Ohm = a[:, 1])
def temperature(calibration: CernoxCalibration, R_Ohm: float) -> float:
# must flip so that arrays are increasing
return np.interp(-R_Ohm, -calibration.R_Ohm, calibration.T_K)
def temperature_for(cernox_id: str = default_cernox_id,
calibration_data_dir: Path = calibration_data_dir):
return partial(temperature, calibration(cernox_id))