primo commit refactory in python
This commit is contained in:
281
example_usage.py
Normal file
281
example_usage.py
Normal file
@@ -0,0 +1,281 @@
|
||||
"""
|
||||
Example usage of the sensor data processing system.
|
||||
|
||||
This file demonstrates how to use the converted Python modules.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import logging
|
||||
from pathlib import Path
|
||||
|
||||
# Add src to Python path
|
||||
sys.path.insert(0, str(Path(__file__).parent))
|
||||
|
||||
from src.rsn.main import process_rsn_chain
|
||||
from src.tilt.main import process_tilt_chain
|
||||
from src.atd.main import process_atd_chain
|
||||
|
||||
|
||||
def example_rsn_processing():
|
||||
"""
|
||||
Example: Process RSN chain data for a control unit.
|
||||
"""
|
||||
print("=" * 60)
|
||||
print("Example 1: RSN Chain Processing")
|
||||
print("=" * 60)
|
||||
|
||||
control_unit_id = "CU001" # Control unit identifier
|
||||
chain = "A" # Chain identifier
|
||||
|
||||
print(f"\nProcessing RSN data for unit {control_unit_id}, chain {chain}")
|
||||
|
||||
try:
|
||||
result = process_rsn_chain(control_unit_id, chain)
|
||||
|
||||
if result == 0:
|
||||
print("✓ RSN processing completed successfully")
|
||||
print(f"Check log file: LogFile_RSN-{control_unit_id}-{chain}-*.txt")
|
||||
else:
|
||||
print("✗ RSN processing failed")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"✗ Error: {e}")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def example_tilt_processing():
|
||||
"""
|
||||
Example: Process Tilt sensor data.
|
||||
"""
|
||||
print("\n" + "=" * 60)
|
||||
print("Example 2: Tilt Sensor Processing")
|
||||
print("=" * 60)
|
||||
|
||||
control_unit_id = "CU002"
|
||||
chain = "B"
|
||||
|
||||
print(f"\nProcessing Tilt data for unit {control_unit_id}, chain {chain}")
|
||||
|
||||
try:
|
||||
result = process_tilt_chain(control_unit_id, chain)
|
||||
|
||||
if result == 0:
|
||||
print("✓ Tilt processing completed successfully")
|
||||
else:
|
||||
print("✗ Tilt processing failed")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"✗ Error: {e}")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def example_atd_processing():
|
||||
"""
|
||||
Example: Process ATD sensor data (extensometers, crackmeters, etc.).
|
||||
"""
|
||||
print("\n" + "=" * 60)
|
||||
print("Example 3: ATD Sensor Processing")
|
||||
print("=" * 60)
|
||||
|
||||
control_unit_id = "CU003"
|
||||
chain = "C"
|
||||
|
||||
print(f"\nProcessing ATD data for unit {control_unit_id}, chain {chain}")
|
||||
|
||||
try:
|
||||
result = process_atd_chain(control_unit_id, chain)
|
||||
|
||||
if result == 0:
|
||||
print("✓ ATD processing completed successfully")
|
||||
else:
|
||||
print("✗ ATD processing failed")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"✗ Error: {e}")
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def example_database_connection():
|
||||
"""
|
||||
Example: Direct database connection and query.
|
||||
"""
|
||||
print("\n" + "=" * 60)
|
||||
print("Example 4: Direct Database Access")
|
||||
print("=" * 60)
|
||||
|
||||
from src.common.database import DatabaseConfig, DatabaseConnection
|
||||
|
||||
try:
|
||||
# Load configuration
|
||||
config = DatabaseConfig("DB.txt")
|
||||
print(f"✓ Configuration loaded for database: {config.config['database']}")
|
||||
|
||||
# Connect to database
|
||||
with DatabaseConnection(config) as conn:
|
||||
print("✓ Database connection established")
|
||||
|
||||
# Example query
|
||||
query = """
|
||||
SELECT IDcentralina, DTcatena, COUNT(*) as sensor_count
|
||||
FROM raw_rsn_data
|
||||
WHERE timestamp >= DATE_SUB(NOW(), INTERVAL 7 DAY)
|
||||
GROUP BY IDcentralina, DTcatena
|
||||
LIMIT 5
|
||||
"""
|
||||
|
||||
print("\nRecent sensor data (last 7 days):")
|
||||
results = conn.execute_query(query)
|
||||
|
||||
for row in results:
|
||||
print(f" Unit: {row['IDcentralina']}, "
|
||||
f"Chain: {row['DTcatena']}, "
|
||||
f"Records: {row['sensor_count']}")
|
||||
|
||||
print("\n✓ Database operations completed")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"✗ Error: {e}")
|
||||
return False
|
||||
|
||||
|
||||
def example_data_validation():
|
||||
"""
|
||||
Example: Data validation and filtering.
|
||||
"""
|
||||
print("\n" + "=" * 60)
|
||||
print("Example 5: Data Validation")
|
||||
print("=" * 60)
|
||||
|
||||
import numpy as np
|
||||
from src.common.validators import (
|
||||
validate_temperature,
|
||||
despike_data,
|
||||
check_acceleration_vector
|
||||
)
|
||||
|
||||
# Simulate sensor data
|
||||
temperature = np.array([
|
||||
[20.5, 21.3, 22.1],
|
||||
[20.8, 21.5, 95.0], # Invalid: > 80°C
|
||||
[20.9, 21.7, 22.3],
|
||||
[21.0, -35.0, 22.5], # Invalid: < -30°C
|
||||
])
|
||||
|
||||
print("\nOriginal temperature data:")
|
||||
print(temperature)
|
||||
|
||||
# Validate temperature
|
||||
invalid_mask, n_corrections = validate_temperature(temperature)
|
||||
print(f"\n✓ Temperature validation: {n_corrections} invalid values found")
|
||||
|
||||
# Simulate acceleration data with spikes
|
||||
acc_data = np.array([
|
||||
[1.0, 1.0, 1.0],
|
||||
[1.02, 1.01, 1.03],
|
||||
[1.04, 5.0, 1.02], # Spike in second sensor
|
||||
[1.03, 1.01, 1.04],
|
||||
[1.05, 1.02, 1.03],
|
||||
])
|
||||
|
||||
print("\nOriginal acceleration data:")
|
||||
print(acc_data)
|
||||
|
||||
# Remove spikes
|
||||
despiked, n_spikes = despike_data(acc_data, n_points=3, threshold=3.0)
|
||||
print(f"\n✓ Despiking: {n_spikes} spikes removed")
|
||||
print("Despiked data:")
|
||||
print(despiked)
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def example_logging_setup():
|
||||
"""
|
||||
Example: Logging configuration.
|
||||
"""
|
||||
print("\n" + "=" * 60)
|
||||
print("Example 6: Logging Setup")
|
||||
print("=" * 60)
|
||||
|
||||
from src.common.logging_utils import setup_logger, log_function_start, log_function_end
|
||||
|
||||
# Setup logger
|
||||
logger = setup_logger("TEST001", "A", "Example", log_dir=".")
|
||||
|
||||
# Log messages
|
||||
log_function_start(logger, "example_function")
|
||||
logger.info("Processing sensor data...")
|
||||
logger.warning("This is a warning message")
|
||||
log_function_end(logger, "example_function")
|
||||
|
||||
print("\n✓ Logging examples written to log file")
|
||||
return True
|
||||
|
||||
|
||||
def main():
|
||||
"""
|
||||
Run all examples.
|
||||
"""
|
||||
print("\n")
|
||||
print("╔" + "=" * 58 + "╗")
|
||||
print("║ Sensor Data Processing System - Python Examples ║")
|
||||
print("╚" + "=" * 58 + "╝")
|
||||
|
||||
# Check if DB.txt exists
|
||||
if not Path("DB.txt").exists():
|
||||
print("\n⚠ Warning: DB.txt not found")
|
||||
print("Create DB.txt with database credentials to run examples")
|
||||
print("See DB.txt.example for format")
|
||||
print("\nRunning examples that don't require database...")
|
||||
|
||||
# Run examples that don't need database
|
||||
example_data_validation()
|
||||
example_logging_setup()
|
||||
return
|
||||
|
||||
# Run all examples
|
||||
examples = [
|
||||
("Data Validation", example_data_validation),
|
||||
("Logging Setup", example_logging_setup),
|
||||
("Database Connection", example_database_connection),
|
||||
# Uncomment when you have actual data:
|
||||
# ("RSN Processing", example_rsn_processing),
|
||||
# ("Tilt Processing", example_tilt_processing),
|
||||
# ("ATD Processing", example_atd_processing),
|
||||
]
|
||||
|
||||
results = []
|
||||
for name, func in examples:
|
||||
try:
|
||||
success = func()
|
||||
results.append((name, success))
|
||||
except Exception as e:
|
||||
print(f"\n✗ {name} failed with exception: {e}")
|
||||
results.append((name, False))
|
||||
|
||||
# Summary
|
||||
print("\n" + "=" * 60)
|
||||
print("Summary")
|
||||
print("=" * 60)
|
||||
|
||||
for name, success in results:
|
||||
status = "✓ PASS" if success else "✗ FAIL"
|
||||
print(f"{status}: {name}")
|
||||
|
||||
n_passed = sum(1 for _, success in results if success)
|
||||
n_total = len(results)
|
||||
print(f"\nTotal: {n_passed}/{n_total} examples passed")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user