File size: 3,997 Bytes
3dc2617
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import sys
import os
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
import logging

# Configurar path para importar módulos del proyecto
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from src.quantum_api_integrator import QuantumApiIntegrator
from src.config import logger

# Configurar logging
logging.basicConfig(level=logging.INFO)

def main():
    """
    Ejemplo de uso del integrador de APIs cuánticas para generar alertas de colisión
    utilizando datos reales de satélites.
    """
    logger.info("Iniciando ejemplo de integración de APIs cuánticas")
    
    # Inicializar el integrador
    integrador = QuantumApiIntegrator()
    
    # Definir ventana de tiempo para datos históricos (últimas 24 horas)
    end_time = datetime.now()
    start_time = end_time - timedelta(hours=24)
    
    # Ejemplo 1: Obtener datos de un satélite específico
    satellite_id = "25544"  # ISS (Estación Espacial Internacional)
    logger.info(f"Obteniendo datos para el satélite {satellite_id}")
    
    satellite_data = integrador.get_satellite_data(
        satellite_id=satellite_id,
        start_time=start_time,
        end_time=end_time
    )
    
    # Convertir a formato de trayectoria
    trajectory = integrador.convert_api_data_to_trajectory(satellite_data)
    if not trajectory.empty:
        logger.info(f"Trayectoria obtenida con {len(trajectory)} puntos")
        print("Primeros puntos de la trayectoria:")
        print(trajectory.head())
    else:
        logger.warning("No se pudo obtener trayectoria válida")
    
    # Ejemplo 2: Predecir trayectoria futura
    logger.info(f"Prediciendo trayectoria futura para el satélite {satellite_id}")
    predicted_trajectory = integrador.predict_trajectory(
        satellite_id=satellite_id,
        start_time=start_time,
        end_time=end_time,
        prediction_hours=48  # Predecir 48 horas en el futuro
    )
    
    if not predicted_trajectory.empty:
        logger.info(f"Trayectoria predicha con {len(predicted_trajectory)} puntos")
        print("Primeros puntos de la trayectoria predicha:")
        print(predicted_trajectory.head())
    else:
        logger.warning("No se pudo predecir trayectoria")
    
    # Ejemplo 3: Generar alerta de colisión
    logger.info(f"Generando alerta de colisión para el satélite {satellite_id}")
    alert = integrador.generate_collision_alert(
        satellite_id=satellite_id,
        prediction_hours=72  # Analizar riesgo para las próximas 72 horas
    )
    
    if "error" not in alert:
        logger.info(f"Alerta generada con ID: {alert.get('alert_id')}")
        print("\nDetalles de la alerta:")
        print(f"Nivel de alerta: {alert.get('alert_level')}")
        print(f"Probabilidad de colisión: {alert.get('collision_probability'):.4f}")
        print(f"Tiempo hasta máximo acercamiento: {alert.get('time_to_closest_approach')}")
        print(f"Acciones recomendadas: {alert.get('recommended_actions')}")
    else:
        logger.error(f"Error al generar alerta: {alert.get('error')}")
    
    # Ejemplo 4: Analizar múltiples satélites
    satellite_ids = ["25544", "43013", "48274"]  # ISS, TESS, Starlink-1654
    logger.info(f"Analizando colisiones entre múltiples satélites: {satellite_ids}")
    
    alerts = integrador.analyze_multiple_satellites(
        satellite_ids=satellite_ids,
        prediction_hours=48
    )
    
    if alerts and "error" not in alerts[0]:
        logger.info(f"Se generaron {len(alerts)} alertas")
        for i, alert in enumerate(alerts):
            print(f"\nAlerta {i+1}:")
            print(f"Satélites: {alert.get('satellite_id')} - {alert.get('other_object_id')}")
            print(f"Nivel: {alert.get('alert_level')}")
            print(f"Probabilidad: {alert.get('collision_probability'):.4f}")
    else:
        logger.warning("No se generaron alertas para los satélites analizados")

if __name__ == "__main__":
    main()