primo commit refactory in python
This commit is contained in:
371
src/tilt/db_write.py
Normal file
371
src/tilt/db_write.py
Normal file
@@ -0,0 +1,371 @@
|
||||
"""
|
||||
Database writing functions for Tilt processed data.
|
||||
|
||||
Writes elaborated tilt sensor data back to database.
|
||||
"""
|
||||
|
||||
import numpy as np
|
||||
import logging
|
||||
from typing import Optional
|
||||
from ..common.database import DatabaseConnection
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def write_tilt_link_hr_data(
|
||||
conn: DatabaseConnection,
|
||||
control_unit_id: str,
|
||||
chain: str,
|
||||
x_global: np.ndarray,
|
||||
y_global: np.ndarray,
|
||||
z_global: np.ndarray,
|
||||
x_local: np.ndarray,
|
||||
y_local: np.ndarray,
|
||||
z_local: np.ndarray,
|
||||
temperature: np.ndarray,
|
||||
timestamps: np.ndarray,
|
||||
errors: Optional[np.ndarray] = None
|
||||
) -> None:
|
||||
"""
|
||||
Write Tilt Link HR elaborated data to database.
|
||||
|
||||
Converts MATLAB DBwriteTLHR.m function.
|
||||
|
||||
Args:
|
||||
conn: Database connection
|
||||
control_unit_id: Control unit identifier
|
||||
chain: Chain identifier
|
||||
x_global: X displacement in global coordinates
|
||||
y_global: Y displacement in global coordinates
|
||||
z_global: Z displacement in global coordinates
|
||||
x_local: X displacement in local coordinates
|
||||
y_local: Y displacement in local coordinates
|
||||
z_local: Z displacement in local coordinates
|
||||
temperature: Temperature data
|
||||
timestamps: Timestamp array
|
||||
errors: Error flags (optional)
|
||||
"""
|
||||
logger.info("Writing Tilt Link HR data to database")
|
||||
|
||||
query = """
|
||||
INSERT INTO elaborated_tlhr_data
|
||||
(IDcentralina, DTcatena, timestamp, nodeID,
|
||||
X_global, Y_global, Z_global,
|
||||
X_local, Y_local, Z_local,
|
||||
temperature, error_flag)
|
||||
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
X_global = VALUES(X_global),
|
||||
Y_global = VALUES(Y_global),
|
||||
Z_global = VALUES(Z_global),
|
||||
X_local = VALUES(X_local),
|
||||
Y_local = VALUES(Y_local),
|
||||
Z_local = VALUES(Z_local),
|
||||
temperature = VALUES(temperature),
|
||||
error_flag = VALUES(error_flag)
|
||||
"""
|
||||
|
||||
n_timestamps, n_sensors = x_global.shape
|
||||
data_rows = []
|
||||
|
||||
for t in range(n_timestamps):
|
||||
for s in range(n_sensors):
|
||||
error_flag = 0
|
||||
if errors is not None and s < errors.shape[1]:
|
||||
error_flag = int(errors[s, t])
|
||||
|
||||
data_rows.append((
|
||||
control_unit_id,
|
||||
chain,
|
||||
timestamps[t],
|
||||
s + 1,
|
||||
float(x_global[t, s]),
|
||||
float(y_global[t, s]),
|
||||
float(z_global[t, s]),
|
||||
float(x_local[t, s]),
|
||||
float(y_local[t, s]),
|
||||
float(z_local[t, s]),
|
||||
float(temperature[t, s]),
|
||||
error_flag
|
||||
))
|
||||
|
||||
if data_rows:
|
||||
conn.execute_many(query, data_rows)
|
||||
logger.info(f"Wrote {len(data_rows)} Tilt Link HR records")
|
||||
|
||||
|
||||
def write_tilt_link_data(
|
||||
conn: DatabaseConnection,
|
||||
control_unit_id: str,
|
||||
chain: str,
|
||||
x_disp: np.ndarray,
|
||||
y_disp: np.ndarray,
|
||||
z_disp: np.ndarray,
|
||||
temperature: np.ndarray,
|
||||
timestamps: np.ndarray,
|
||||
errors: Optional[np.ndarray] = None
|
||||
) -> None:
|
||||
"""
|
||||
Write Tilt Link elaborated data to database.
|
||||
|
||||
Converts MATLAB DBwriteTL.m function.
|
||||
"""
|
||||
logger.info("Writing Tilt Link data to database")
|
||||
|
||||
query = """
|
||||
INSERT INTO elaborated_tl_data
|
||||
(IDcentralina, DTcatena, timestamp, nodeID,
|
||||
X_displacement, Y_displacement, Z_displacement,
|
||||
temperature, error_flag)
|
||||
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
X_displacement = VALUES(X_displacement),
|
||||
Y_displacement = VALUES(Y_displacement),
|
||||
Z_displacement = VALUES(Z_displacement),
|
||||
temperature = VALUES(temperature),
|
||||
error_flag = VALUES(error_flag)
|
||||
"""
|
||||
|
||||
n_timestamps, n_sensors = x_disp.shape
|
||||
data_rows = []
|
||||
|
||||
for t in range(n_timestamps):
|
||||
for s in range(n_sensors):
|
||||
error_flag = 0
|
||||
if errors is not None:
|
||||
error_flag = int(errors[s, t]) if s < errors.shape[1] else 0
|
||||
|
||||
data_rows.append((
|
||||
control_unit_id,
|
||||
chain,
|
||||
timestamps[t],
|
||||
s + 1,
|
||||
float(x_disp[t, s]),
|
||||
float(y_disp[t, s]),
|
||||
float(z_disp[t, s]),
|
||||
float(temperature[t, s]),
|
||||
error_flag
|
||||
))
|
||||
|
||||
if data_rows:
|
||||
conn.execute_many(query, data_rows)
|
||||
logger.info(f"Wrote {len(data_rows)} Tilt Link records")
|
||||
|
||||
|
||||
def write_biaxial_link_data(
|
||||
conn: DatabaseConnection,
|
||||
control_unit_id: str,
|
||||
chain: str,
|
||||
x_disp: np.ndarray,
|
||||
y_disp: np.ndarray,
|
||||
z_disp: np.ndarray,
|
||||
temperature: np.ndarray,
|
||||
timestamps: np.ndarray,
|
||||
errors: Optional[np.ndarray] = None
|
||||
) -> None:
|
||||
"""
|
||||
Write Biaxial Link elaborated data to database.
|
||||
|
||||
Converts MATLAB DBwriteBL.m function.
|
||||
"""
|
||||
logger.info("Writing Biaxial Link data to database")
|
||||
|
||||
query = """
|
||||
INSERT INTO elaborated_bl_data
|
||||
(IDcentralina, DTcatena, timestamp, nodeID,
|
||||
X_displacement, Y_displacement, Z_displacement,
|
||||
temperature, error_flag)
|
||||
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
X_displacement = VALUES(X_displacement),
|
||||
Y_displacement = VALUES(Y_displacement),
|
||||
Z_displacement = VALUES(Z_displacement),
|
||||
temperature = VALUES(temperature),
|
||||
error_flag = VALUES(error_flag)
|
||||
"""
|
||||
|
||||
n_timestamps, n_sensors = x_disp.shape
|
||||
data_rows = []
|
||||
|
||||
for t in range(n_timestamps):
|
||||
for s in range(n_sensors):
|
||||
error_flag = 0
|
||||
if errors is not None:
|
||||
error_flag = int(errors[s, t]) if s < errors.shape[1] else 0
|
||||
|
||||
data_rows.append((
|
||||
control_unit_id,
|
||||
chain,
|
||||
timestamps[t],
|
||||
s + 1,
|
||||
float(x_disp[t, s]),
|
||||
float(y_disp[t, s]),
|
||||
float(z_disp[t, s]),
|
||||
float(temperature[t, s]),
|
||||
error_flag
|
||||
))
|
||||
|
||||
if data_rows:
|
||||
conn.execute_many(query, data_rows)
|
||||
logger.info(f"Wrote {len(data_rows)} Biaxial Link records")
|
||||
|
||||
|
||||
def write_pendulum_link_data(
|
||||
conn: DatabaseConnection,
|
||||
control_unit_id: str,
|
||||
chain: str,
|
||||
x_disp: np.ndarray,
|
||||
y_disp: np.ndarray,
|
||||
temperature: np.ndarray,
|
||||
timestamps: np.ndarray,
|
||||
errors: Optional[np.ndarray] = None
|
||||
) -> None:
|
||||
"""
|
||||
Write Pendulum Link elaborated data to database.
|
||||
|
||||
Converts MATLAB DBwritePL.m function.
|
||||
"""
|
||||
logger.info("Writing Pendulum Link data to database")
|
||||
|
||||
query = """
|
||||
INSERT INTO elaborated_pl_data
|
||||
(IDcentralina, DTcatena, timestamp, nodeID,
|
||||
X_displacement, Y_displacement,
|
||||
temperature, error_flag)
|
||||
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
X_displacement = VALUES(X_displacement),
|
||||
Y_displacement = VALUES(Y_displacement),
|
||||
temperature = VALUES(temperature),
|
||||
error_flag = VALUES(error_flag)
|
||||
"""
|
||||
|
||||
n_timestamps, n_sensors = x_disp.shape
|
||||
data_rows = []
|
||||
|
||||
for t in range(n_timestamps):
|
||||
for s in range(n_sensors):
|
||||
error_flag = 0
|
||||
if errors is not None:
|
||||
error_flag = int(errors[s, t]) if s < errors.shape[1] else 0
|
||||
|
||||
data_rows.append((
|
||||
control_unit_id,
|
||||
chain,
|
||||
timestamps[t],
|
||||
s + 1,
|
||||
float(x_disp[t, s]),
|
||||
float(y_disp[t, s]),
|
||||
float(temperature[t, s]),
|
||||
error_flag
|
||||
))
|
||||
|
||||
if data_rows:
|
||||
conn.execute_many(query, data_rows)
|
||||
logger.info(f"Wrote {len(data_rows)} Pendulum Link records")
|
||||
|
||||
|
||||
def write_kessler_link_data(
|
||||
conn: DatabaseConnection,
|
||||
control_unit_id: str,
|
||||
chain: str,
|
||||
x_disp: np.ndarray,
|
||||
y_disp: np.ndarray,
|
||||
temperature: np.ndarray,
|
||||
timestamps: np.ndarray,
|
||||
errors: Optional[np.ndarray] = None
|
||||
) -> None:
|
||||
"""
|
||||
Write Kessler Link elaborated data to database.
|
||||
|
||||
Converts MATLAB DBwriteKLHR.m function.
|
||||
"""
|
||||
logger.info("Writing Kessler Link data to database")
|
||||
|
||||
query = """
|
||||
INSERT INTO elaborated_klhr_data
|
||||
(IDcentralina, DTcatena, timestamp, nodeID,
|
||||
X_displacement, Y_displacement,
|
||||
temperature, error_flag)
|
||||
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
X_displacement = VALUES(X_displacement),
|
||||
Y_displacement = VALUES(Y_displacement),
|
||||
temperature = VALUES(temperature),
|
||||
error_flag = VALUES(error_flag)
|
||||
"""
|
||||
|
||||
n_timestamps, n_sensors = x_disp.shape
|
||||
data_rows = []
|
||||
|
||||
for t in range(n_timestamps):
|
||||
for s in range(n_sensors):
|
||||
error_flag = 0
|
||||
if errors is not None:
|
||||
error_flag = int(errors[s, t]) if s < errors.shape[1] else 0
|
||||
|
||||
data_rows.append((
|
||||
control_unit_id,
|
||||
chain,
|
||||
timestamps[t],
|
||||
s + 1,
|
||||
float(x_disp[t, s]),
|
||||
float(y_disp[t, s]),
|
||||
float(temperature[t, s]),
|
||||
error_flag
|
||||
))
|
||||
|
||||
if data_rows:
|
||||
conn.execute_many(query, data_rows)
|
||||
logger.info(f"Wrote {len(data_rows)} Kessler Link records")
|
||||
|
||||
|
||||
def write_temperature_data(
|
||||
conn: DatabaseConnection,
|
||||
control_unit_id: str,
|
||||
chain: str,
|
||||
temperature: np.ndarray,
|
||||
timestamps: np.ndarray,
|
||||
sensor_type: str = "ThL"
|
||||
) -> None:
|
||||
"""
|
||||
Write temperature sensor data to database.
|
||||
|
||||
For thermistors (ThL) or PT100 sensors.
|
||||
|
||||
Args:
|
||||
conn: Database connection
|
||||
control_unit_id: Control unit identifier
|
||||
chain: Chain identifier
|
||||
temperature: Temperature data
|
||||
timestamps: Timestamp array
|
||||
sensor_type: Sensor type ("ThL" or "PT100")
|
||||
"""
|
||||
logger.info(f"Writing {sensor_type} temperature data to database")
|
||||
|
||||
table_name = f"elaborated_{sensor_type.lower()}_data"
|
||||
|
||||
query = f"""
|
||||
INSERT INTO {table_name}
|
||||
(IDcentralina, DTcatena, timestamp, nodeID, temperature)
|
||||
VALUES (%s, %s, %s, %s, %s)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
temperature = VALUES(temperature)
|
||||
"""
|
||||
|
||||
n_timestamps, n_sensors = temperature.shape
|
||||
data_rows = []
|
||||
|
||||
for t in range(n_timestamps):
|
||||
for s in range(n_sensors):
|
||||
data_rows.append((
|
||||
control_unit_id,
|
||||
chain,
|
||||
timestamps[t],
|
||||
s + 1,
|
||||
float(temperature[t, s])
|
||||
))
|
||||
|
||||
if data_rows:
|
||||
conn.execute_many(query, data_rows)
|
||||
logger.info(f"Wrote {len(data_rows)} {sensor_type} temperature records")
|
||||
Reference in New Issue
Block a user