Exemple #1
0
def tlePrimario(tlepri):
    """
    -----------------------------------------------------------------
    Devuelve el vector de estado y la epoca
    correspondiente a la referencia como dato primario
    -----------------------------------------------------------------
    input
        tlepri: nombre del archivo con el TLE primario (string)
    output
        r,v: vector posicion y velocidad para el TLE primario (array)
        ffin: epoca del TLE primario (datetime)
    """
    whichconst = wgs72
    archivo = '../TleAdmin/tle/' + tlepri
    tle0 = Tle.creadoxArchivo(archivo)
    line1 = tle0.linea1
    line2 = tle0.linea2
    r, v = tle0.propagaTLE()
    satrec = twoline2rv(line1, line2, whichconst)
    ffin = satrec.epoch
    #    r,v = sgp4(satrec,0)
    xf, yf, zf = tuplaFloat(r)
    xv, yv, zv = tuplaFloat(v)
    r = np.array([xf, yf, zf])
    v = np.array([xv, yv, zv])

    return r, v, ffin
Exemple #2
0
def tleSecundario(tlesec, ffin):
    """
    ---------------------------------------------------------------------------------
    Calcula la posicion del satelite propagada a la fecha del TLE primario.
    ---------------------------------------------------------------------------------
    input
        tlesec: nombre del archivo que contiene el TLE secundario (string)
    output
        pos,vel: vector posicion y velocidad que resultan de la propagacion del
                TLE secundario hasta la fecha del TLE primario (array)
        fsec: epoca del TLE secundario
    """
    whichconst = wgs72
    archivo = '../TleAdmin/tle/' + tlesec
    tle1 = Tle.creadoxArchivo(archivo)
    line1 = tle1.linea1
    line2 = tle1.linea2
    satrec1 = twoline2rv(line1, line2, whichconst)
    ffin_anno = ffin.year
    ffin_mes = ffin.month
    ffin_dia = ffin.day
    ffin_hora = ffin.hour
    ffin_min = ffin.minute
    ffin_s = ffin.second
    #    pos, vel = sgp4(satrec1,0)
    pos, vel = satrec1.propagate(ffin_anno, ffin_mes, ffin_dia, ffin_hora,
                                 ffin_min, ffin_s)
    x, y, z = tuplaFloat(pos)
    vx, vy, vz = tuplaFloat(vel)
    pos = np.array([x, y, z])
    vel = np.array([vx, vy, vz])
    fsec = satrec1.epoch
    return pos, vel, fsec
Exemple #3
0
def diferencias_tleCODS(salida, tles, linea_interpol, data):
    """
    Toma la lista de archivos TLEs y propaga cada uno hasta la epoca de la
    linea interpolada. Luego compara los valores de las coordenadas propagadas
    con los valores de la linea interpolada y genera las diferencias. 
    Imprime los resultados en el archivo salida.     
    ----------------------------------------------------------------------------------------------------------
    input
        salida: archivo donde se escribe (Instancia de apertura de archivo)
        tles: lista de nombres de archivos tle (diccionario)
        linea_interpol: Linea interpolada de los datos CODS para la epoca del TLE primario. (String)
    output
        difTot_satId_fini_ffin.cods: Archivo con todas las diferencias ('../Comparar/diferencias/')
    """
    fecha = linea_interpol[:26]
    d = datetime.strptime(fecha, '%Y-%m-%d %H:%M:%S.%f')
    r = np.array([
        float(linea_interpol.split()[2]),
        float(linea_interpol.split()[3]),
        float(linea_interpol.split()[4])
    ])
    rp = np.array([
        float(linea_interpol.split()[5]),
        float(linea_interpol.split()[6]),
        float(linea_interpol.split()[7])
    ])
    item = range(0, len(tles))
    whichconst = wgs72
    for j in item:
        tle0 = Tle.creadoxArchivo('../TleAdmin/tle/' + tles[j][0])
        fecha_tle = tle0.epoca()
        if fecha_tle <= d:
            dif_fechas = (d - fecha_tle).total_seconds() / 86400.0
            line1 = tle0.linea1
            line2 = tle0.linea2
            satrec = twoline2rv(line1, line2, whichconst)
            pos1, vel1 = satrec.propagate(d.year, d.month, d.day, d.hour,
                                          d.minute, d.second)
            pos = teme2tod(fecha_tle, pos1)
            vel = teme2tod(fecha_tle, vel1)
            difx = [pos[0, 0] - r[0], pos[0, 1] - r[1], pos[0, 2] - r[2]]
            difv = [vel[0, 0] - rp[0], vel[0, 1] - rp[1], vel[0, 2] - rp[2]]
            #             difx=[pos1[0]-r[0],pos1[1]-r[1],pos1[2]-r[2]]
            #             difv=[vel1[0]-rp[0],vel1[1]-rp[1],vel1[2]-rp[2]]
            v, n, c = vncSis(r, rp, difx)
            vv, nn, cc = vncSis(r, rp, difv)
            dato = str(fecha_tle) + ' ' + str(v) + ' ' + str(n) + ' ' + str(
                c) + ' ' + str(vv) + ' ' + str(nn) + ' ' + str(cc) + '\n'
            salida.write(dato)
            data[0].append(fecha_tle)
            data[1].append(v)
            data[2].append(n)
            data[3].append(c)
            data[4].append(vv)
            data[5].append(nn)
            data[6].append(cc)
            data[7].append(dif_fechas)
    return data
Exemple #4
0
def interpola_3sv(tle, arch3_cods):
    """
    Extrale del tle primario la epoca y luego busca entre los archivos
    CODS cual de los mas actualizados contiene la epoca del TLE.
    Luego interpola los valores de CODS para la epoca del TLE 
    y devuelve el vector de estado interpolado correspondiente a la epoca.
    ----------------------------------------------------------------------------------------
    input
        tle: nombre del archivo del TLE primario (String)
        arch3_cods: nombre de los archivos CODS que contienen la epoca del TLE. (Lista)
    output
        linea_interpol: linea con el vector de estado interpolado a la epoca del TLE. (String)
    """
    tle1 = Tle.creadoxArchivo(tle)
    fecha_tle = tle1.epoca()
    r, v = tle1.propagaTLE()
    fila = str(fecha_tle) + ' ' + str(r[0]) + ' ' + str(r[1]) + ' ' + str(
        r[2]) + ' ' + str(v[0]) + ' ' + str(v[1]) + ' ' + str(v[2])
    fecha_minutos = datetime(int(fecha_tle.year), int(fecha_tle.month),
                             int(fecha_tle.day), int(fecha_tle.hour),
                             int(fecha_tle.minute), 0)
    inferior = 'NULO'
    m = 0
    for arch in arch3_cods:
        a = open(arch, 'r')
        contenido = a.readlines()
        lista_epocas = []
        for c in contenido:
            c1 = c.split(' ')
            if c1[0] == '*HEADER':
                continue
            fecha = c[:16]
            hr = fecha[11:13]
            if hr != '24':
                d = datetime.strptime(fecha, '%Y/%m/%d %H:%M')
            lista_epocas.append(d)
        if fecha_minutos in lista_epocas and m == 0:
            indice = lista_epocas.index(fecha_minutos)
            inferior = contenido[indice + 1]
            if indice + 2 >= len(contenido):
                superior = contenido[indice]
            else:
                superior = contenido[indice + 2]
            m = m + 1
    if inferior != 'NULO':
        linea_interpol = interpola(fila, inferior, superior)
        return linea_interpol
    else:
        return None
Exemple #5
0
def generadorDatos(lista):
    """
    ----------------------------------------------------------------------
    Genera un diccionario, cuyas claves son tle1, tle2, tle3...tle10
    y para cada campo, se indica la fecha del tle asociado.
    -----------------------------------------------------------------------
    input
        lista: lista de nombres de los archivos del directorio 'tle' - (string)
    output
        tledic: diccionario
    """
    tledic = {}
    datos = []
    for arch in lista:
        nombre = arch.split('/')[-1]
        tle = Tle.creadoxArchivo(arch)  # instancia un objeto de la clase  TLE
        datos.append(tle.epoca())  # ejecuta un metodo de la clase TLE
        tledic[nombre] = datos
        datos = []

    return tledic
Exemple #6
0
def FiltraArchivos(tle):
    """
    Extrae la fecha del TLE y busca los
    archivos CODS que podrian contener la fecha necesaria.
    Toma el nombre del archivo cuyo nombre contiene la fecha el TLE
    primario y agrega a su vez el nombre de los proximos 3 archivos
    ya que tambien contendran esa fecha y con valores mas actualizados.
    ----------------------------------------------------------------
    input
        tle: nombre del archivo del TLE a procesar (String)
    output
        archivos_datos: nombres de los archivos CODS que contienen la fecha
                        del TLE primario - (Lista)
    """
    tle1 = Tle.creadoxArchivo(tle)
    fecha = tle1.epoca()
    fechas_busqueda = [
        datetime(fecha.year, fecha.month, fecha.day) + timedelta(days=2),
        datetime(fecha.year, fecha.month, fecha.day) + timedelta(days=1),
        datetime(fecha.year, fecha.month, fecha.day)
    ]

    nombre_archivos = glob.glob('../CodsAdmin/TOD_O/*')
    lista_fechas = []
    archivos_datos = []
    for nom in nombre_archivos:
        e_CODS = EphemCODS(nom.split('/')[-1])
        anio, mes, dia, hora, minu, seg = EphemCODS.parsea_epoca_nombre(e_CODS)
        fecha_cods_nombre = datetime(int(anio), int(mes), int(dia))
        lista_fechas.append(fecha_cods_nombre)

    for f in fechas_busqueda:
        if f in lista_fechas:
            indice = lista_fechas.index(f)
            archivos_datos.append(nombre_archivos[indice])
        else:
            pass

    return archivos_datos
Exemple #7
0
def ejecutaProcesamientoCods():
    #if __name__ == '__main__':
    """
    REVISAR - FUE MODIFICADO
    Lista y ordena los nombres de los archivos de la carpeta: TleAdmin/tles.
    Recupera la informacion del ultimo TLE del set (TLE primario), en particular la epoca.
    Busca entre los archivos de CODS, la epoca coincidente con la epoca del TLE primario.
    Interpola para la fecha al nivel del segundo. 
    Luego propaga todos los TLEs del set a la epoca del CODS interpolado y calcular las 
    diferencias. 
    ---------------------------------------------------------------------------------------
    Nota! LOS DATOS CODS SON SOLO DE LA MISION SAC-D.
    Luego los tles, previamente procesados y archivados en la carpeta de TleAdmin/tles, deben
    corresponderse con esa mision.
    """

    #    print 'PROCESANDO DATOS DE MISION...'
    tles = glob.glob('../TleAdmin/tle/*')
    dic_tles = generadorDatos(tles)
    tle_ordenados = ordenaTles(dic_tles)

    #     tles=glob.glob('../TleAdmin/tle/*')
    #     dic_tles=generadorDatos(tles)
    #     tle_ordenados=ordenaTles(dic_tles)

    tle_inicio = Tle.creadoxArchivo('../TleAdmin/tle/' + tle_ordenados[0][0])
    cat_id = tle_inicio.catID()
    epoca_ini = tle_inicio.epoca()

    tle_primario = Tle.creadoxArchivo('../TleAdmin/tle/' +
                                      tle_ordenados[-1][0])
    epoca_fin = tle_primario.epoca()
    epoca_ffin = epoca_fin
    epoca15dias = epoca_ffin - timedelta(days=15)
    """
    Impresiones de info de TLEs.
    """
    tle_inicio = Tle.creadoxArchivo('../TleAdmin/tle/' + tle_ordenados[0][0])
    cat_id = tle_inicio.catID()
    epoca_ini = tle_inicio.epoca()

    tle_primario = Tle.creadoxArchivo('../TleAdmin/tle/' +
                                      tle_ordenados[-1][0])
    epoca_fin = tle_primario.epoca()
    epoca_ffin = epoca_fin
    linea1 = tle_primario.linea1
    linea2 = tle_primario.linea2
    fecha_ini = str(epoca_ini.year) + str(epoca_ini.month).zfill(2) + str(
        epoca_ini.day).zfill(2)
    fecha_fin = str(epoca_fin.year) + str(epoca_fin.month).zfill(2) + str(
        epoca_fin.day).zfill(2)
    #     print '------------------------------------------------------------------------'
    #     print '-------------------------TLE PRIMARIO-----------------------------------'
    #     print linea1
    #     print linea2
    #     print epoca_ffin
    #     print '------------------------------------------------------------------------'
    t = []
    dv = []
    du = []
    dc = []
    dvv = []
    dnn = []
    dcc = []
    dt_frac = []
    t15 = []
    dv15 = []
    du15 = []
    dc15 = []
    dvv15 = []
    dnn15 = []
    dcc15 = []
    dt_frac15 = []
    #===============
    # Set de Datos
    #===============
    data = [t, dv, du, dc, dvv, dnn, dcc, dt_frac]
    data15 = [t15, dv15, du15, dc15, dvv15, dnn15, dcc15, dt_frac15]
    #======================
    # Nomenclatura Archivos
    #======================
    archivo = cat_id + '_' + fecha_ini + '_' + fecha_fin + '.cods'
    salida = open('../Comparar/diferencias/difTot_' + archivo, 'w')
    salida1 = open('../Comparar/diferencias/' + archivo, 'w')
    salida15 = open('../Comparar/diferencias/dif_15dias_' + archivo, 'w')
    #===============================================
    # Bucle de comparacion total  (tiene sentido?)
    #===============================================
    for m in range(len(tle_ordenados) - 1, 0, -1):
        tle_primario = Tle.creadoxArchivo('../TleAdmin/tle/' +
                                          tle_ordenados[m][0])
        epoca_fin = tle_primario.epoca()
        arch3_cods = FiltraArchivos('../TleAdmin/tle/' + tle_ordenados[m][0])
        linea_interpol = interpola_3sv(
            '../TleAdmin/tle/' + tle_ordenados[m][0], arch3_cods)
        if linea_interpol != None:
            data = diferencias_tleCODS(salida, tle_ordenados, linea_interpol,
                                       data)
            if m == len(tle_ordenados) - 1:
                for k in range(len(data[0])):
                    info = data[0][k].strftime(
                        "%Y-%m-%d %H:%M:%S.%f") + ' ' + str(
                            data[1][k]) + ' ' + str(data[2][k]) + ' ' + str(
                                data[3][k]) + ' ' + str(
                                    data[4][k]) + ' ' + str(
                                        data[5][k]) + ' ' + str(
                                            data[6][k]) + '\n'
                    salida1.write(info)
        else:
            continue
    #==================================================
    # Bucle de comparacion del set primario (15 TLEs)
    #==================================================

    epoca15 = epoca_ffin - timedelta(days=15)
    for m in range(len(tle_ordenados) - 1, 0, -1):
        tle_primario = Tle.creadoxArchivo('../TleAdmin/tle/' +
                                          tle_ordenados[m][0])
        epoca_fin = tle_primario.epoca()
        if epoca_fin > epoca15:
            arch3_cods = FiltraArchivos('../TleAdmin/tle/' +
                                        tle_ordenados[m][0])
            linea_interpol = interpola_3sv(
                '../TleAdmin/tle/' + tle_ordenados[m][0], arch3_cods)
            if linea_interpol != None:
                data15 = dif_tleCODS15dias()
                if m == len(tle_ordenados) - 1:
                    for k in range(len(data15[0])):
                        info = data15[0][k] + ' ' + str(
                            data15[1][k]) + ' ' + str(
                                data15[2][k]) + ' ' + str(
                                    data15[3][k]) + ' ' + str(
                                        data15[4][k]) + ' ' + str(
                                            data15[5][k]) + ' ' + str(
                                                data15[6][k]) + '\n'
                        # info = data15[0][k].strftime("%Y-%m-%d %H:%M:%S.%f")+' '+str(data15[1][k])+' '+str(data15[2][k])+' '+str(data15[3][k])+' '+str(data15[4][k])+' '+str(data15[5][k])+' '+str(data15[6][k])+'\n'
                        salida15.write(info)
            else:
                continue
        else:
            continue

    salida1.close()
    """
    AJUSTE Y GENERACION DE COEFICIENTES.
    """

    #     dt,coef,statsReport=ajustar_diferencias(epoca_ffin,data15,2)
    #     dt1,coef1,statsReport1=ajustar_diferencias(epoca_ffin,data15,1)
    coef1 = 0
    """
    Guarda en archivos las diferencias que se corresponden al
    ultimo TLE del set. (Estadistica/archivos)
    tendenciaTle.py toma luego esos archivos, y grafica.
    """

    estadistica_salida = open(
        '../Estadistica/archivos/' + fecha_ini + '_' + fecha_fin +
        '_difEst.txt', 'w')
    info_esta = fecha_fin + ' ' + str(data[1][len(tles)]) + ' ' + str(
        data[2][len(tles)]) + ' ' + str(data[3][len(tles)])
    estadistica_salida.write(info_esta)
    estadistica_salida.close()

    print 'DIFERENCIAS:'
    print '-------------------------------------------------------------------------'
    diferencias = [
        data[1][len(tles) - 1], data[2][len(tles) - 1], data[3][len(tles) - 1],
        data[4][len(tles) - 1], data[5][len(tles) - 1], data[6][len(tles) - 1]
    ]
    print 'dv =', data[1][len(tles) - 1]
    print 'dn =', data[2][len(tles) - 1]
    print 'dc =', data[3][len(tles) - 1]
    print '-------------------------------------------------------------------------'
    print 'Fin del Calculo de Diferencias'

    #    set_datos=[str(cat_id),linea1,linea2,epoca_ini.strftime("%Y-%m-%d %H:%M:%S.%f"),epoca_ffin.strftime("%Y-%m-%d %H:%M:%S.%f"),dt,data,coef,archivo]
    set_data15 = [
        str(cat_id), linea1, linea2,
        epoca_ini.strftime("%Y-%m-%d %H:%M:%S.%f"),
        epoca_ffin.strftime("%Y-%m-%d %H:%M:%S.%f"), data15, coef1, archivo
    ]
    return diferencias, set_data15
Exemple #8
0
def dif_tleCODS15dias():

    t = []
    dv = []
    du = []
    dc = []
    dvv = []
    dnn = []
    dcc = []
    dt_frac = []
    #===============
    # Set de Datos
    #===============
    data = [t, dv, du, dc, dvv, dnn, dcc, dt_frac]

    #    print 'PROCESANDO DATOS DE MISION...'
    tles = glob.glob('../TleAdmin/tle/*')
    dic_tles = generadorDatos(tles)
    tle_ordenados = ordenaTles(dic_tles)
    salida = open('../Comparar/diferencias/difPri_prueba', 'w')

    tles = glob.glob('../TleAdmin/tle/*')
    dic_tles = generadorDatos(tles)
    tle_ordenados = ordenaTles(dic_tles)

    tle_primario = Tle.creadoxArchivo('../TleAdmin/tle/' +
                                      tle_ordenados[-1][0])
    epoca_ffin = tle_primario.epoca()
    cat_id = tle_primario.catID()
    linea1 = tle_primario.linea1
    linea2 = tle_primario.linea2
    epoca15dias = epoca_ffin - timedelta(days=15)

    tle_inicio = Tle.creadoxArchivo('../TleAdmin/tle/' + tle_ordenados[0][0])
    epoca_ini = tle_inicio.epoca()

    arch3_cods = FiltraArchivos('../TleAdmin/tle/' + tle_ordenados[-1][0])
    linea_interpol = interpola_3sv('../TleAdmin/tle/' + tle_ordenados[-1][0],
                                   arch3_cods)

    archivo = cat_id + '_' + epoca_ini.strftime(
        "%Y-%m-%d %H:%M:%S.%f") + '_' + epoca_ffin.strftime(
            "%Y-%m-%d %H:%M:%S.%f") + '.cods'
    #===============================================
    # Bucle de comparacion total  (tiene sentido?)
    #===============================================
    for m in range(len(tle_ordenados) - 1, 0, -1):
        tle0 = Tle.creadoxArchivo('../TleAdmin/tle/' + tle_ordenados[m][0])
        epoca_tle0 = tle0.epoca()
        if epoca_tle0 >= epoca15dias:
            data = diferencias_tleCODS(salida, tle_ordenados, linea_interpol,
                                       data)
            if m == len(tle_ordenados) - 1:
                for k in range(len(data[0])):
                    info = data[0][k].strftime(
                        "%Y-%m-%d %H:%M:%S.%f") + ' ' + str(
                            data[1][k]) + ' ' + str(data[2][k]) + ' ' + str(
                                data[3][k]) + ' ' + str(
                                    data[4][k]) + ' ' + str(
                                        data[5][k]) + ' ' + str(
                                            data[6][k]) + '\n'
                    salida.write(info)
        else:
            continue

    dt, coef, statsReport = ajustar_diferencias(epoca_ffin, data, 2)
    #    print statsReport

    set_data15 = [
        str(cat_id), linea1, linea2,
        epoca_ini.strftime("%Y-%m-%d %H:%M:%S.%f"),
        epoca_ffin.strftime("%Y-%m-%d %H:%M:%S.%f"), dt, data, coef, archivo
    ]
    return set_data15
Exemple #9
0
 linea_interpol = interpola_3sv('../TleAdmin/tle/' + tle,
                                tres_archivos)
 if linea_interpol != None:
     fecha = linea_interpol[:26]
     d = datetime.strptime(fecha, '%Y-%m-%d %H:%M:%S.%f')
     r = np.array([
         float(linea_interpol.split()[2]),
         float(linea_interpol.split()[3]),
         float(linea_interpol.split()[4])
     ])
     rp = np.array([
         float(linea_interpol.split()[5]),
         float(linea_interpol.split()[6]),
         float(linea_interpol.split()[7])
     ])
     tle0 = Tle.creadoxArchivo('../TleAdmin/tle/' + tle)
     line1 = tle0.linea1
     line2 = tle0.linea2
     satrec = twoline2rv(line1, line2, whichconst)
     pos1, vel1 = tle0.propagaTLE(d)
     #satrec.propagate(d.year, d.month, d.day,d.hour, d.minute, d.second)
     r_teme = [pos1[0], pos1[1], pos1[2]]
     v_teme = [vel1[0], vel1[1], vel1[2]]
     semi, e, inc, Omega, w, nu = xv2eo(r, rp)
     a.append(semi / 1000.0)
     i.append(inc * 180.0 / (np.pi))
     r_tod = teme2tod(d, r_teme)
     r_tod = np.array(r_tod[0])
     v_tod = teme2tod(d, v_teme)
     v_tod = np.array(v_tod[0])
     t.append(tle0.epoca())
Exemple #10
0
def difTle(tleOrdenados, cantidad_tles):
    """
    ---------------------------------------------------------------
    Diferencias de Osweiler. (Pair-Wise Differencing)
    Calcula las diferencias entre TLE primario y secundarios
    en el sistema v,n y c;  o (ric). 
    Lo hace en forma iterativa, recorriendo todos los TLE a fin
    de que todos son primarios en algun momento.
    ---------------------------------------------------------------
    input:
        tleOrdeandos: lista de TLEs y sus 2-lineas (lista de lista)
    output:
        difTotal# : archivo de texto plano (4 columnas) para cada set
        [AjustarTLE/diferencias/difTotal_satID_fechaIni#]
        bin : lista de listas, con las diferencias por bin. 
        data: lista de listas, [dt_frac,dv,dn,dc]
    """

    print 'Procesando datos TLE...'
    tles = glob.glob('../TleAdmin/tle/*')
    dic_tles = generadorDatos(tles)
    tle_ordenados = ordenaTles(dic_tles)

    tle_inicio = Tle.creadoxArchivo('../TleAdmin/tle/' + tle_ordenados[0][0])
    cat_id = tle_inicio.catID()
    epoca_ini = tle_inicio.epoca()

    tle_primario = Tle.creadoxArchivo('../TleAdmin/tle/' +
                                      tle_ordenados[-1][0])
    epoca_fin = tle_primario.epoca()
    epoca_ffin = epoca_fin

    nombre = 'difTot_' + str(cat_id) + '_' + epoca_ffin.strftime(
        '%Y%m%d') + '_' + epoca_ini.strftime('%Y%m%d') + '.TLE'
    nombre2 = 'difTot_xyz_' + str(cat_id) + '_' + epoca_ffin.strftime(
        '%Y%m%d') + '_' + epoca_ini.strftime('%Y%m%d') + '.TLE'
    dtot = open('../AjustarTLE/diferencias/' + nombre + '', 'w')
    dtot2 = open('../AjustarTLE/diferencias/' + nombre2 + '', 'w')
    dt_tle = []
    dt_frac = []
    dv = []
    dn = []
    dc = []
    dvv = []
    dnn = []
    dcc = []
    dx = []
    dy = []
    dz = []
    dxx = []
    dyy = []
    dzz = []
    bin = [[], [], [], [], [], [], [], [], [], [], [], [], [], [], []]
    m = 0
    for i in range(cantidad_tles - 1, 0, -1):
        tlepri = tleOrdenados[i][0]
        r, rp, ffin = tlePrimario(tlepri)
        item = range(i - 1, -1, -1)
        for j in item:
            tlesec = tleOrdenados[j][0]
            pos, vel, fsec = tleSecundario(tlesec, ffin)
            dt_tle.append(fsec)
            dr = pos - r
            d_v = vel - rp
            x = dr[0]
            y = dr[1]
            z = dr[2]
            xx = d_v[0]
            yy = d_v[1]
            zz = d_v[2]
            dt = abs(fsec - ffin)
            dtfracdias = dt.total_seconds() / 86400.0
            v, n, c = vncSis(r, rp, dr)
            vv, nn, cc = vncSis(r, rp, d_v)
            #             v,n,c=ricSis(r, rp, dr)
            #             vv,nn,cc=ricSis(r,rp,dv)
            infodiftot = str(fsec) + ' ' + str(v) + ' ' + str(n) + ' ' + str(
                c) + ' ' + str(vv) + ' ' + str(nn) + ' ' + str(
                    cc) + ' ' + tlesec + '\n'
            infodiftot2 = str(fsec) + ' ' + str(x) + ' ' + str(y) + ' ' + str(
                z) + ' ' + str(xx) + ' ' + str(yy) + ' ' + str(
                    zz) + ' ' + tlesec + '\n'
            dtot.write(infodiftot)
            dtot2.write(infodiftot2)
            dt_frac.append(dtfracdias)
            '''
            Sistema VNC
            '''
            dv.append(v)
            dn.append(n)
            dc.append(c)
            dvv.append(vv)
            dnn.append(nn)
            dcc.append(cc)
            '''
            Sistema TEMA
            '''
            dx.append(x)
            dy.append(y)
            dz.append(z)
            dxx.append(xx)
            dyy.append(yy)
            dzz.append(zz)
            """
            Clasificacion por bin.
            """
            rangos = np.array([[0, 0.5], [0.5, 1.5], [1.5, 2.5], [2.5, 3.5],
                               [3.5, 4.5], [4.5, 5.5], [5.5, 6.5], [6.5, 7.5],
                               [7.5, 8.5], [8.5, 9.5], [9.5, 10.5],
                               [10.5, 11.5], [11.5, 12.5], [12.5, 13.5],
                               [13.5, 14.5]])
            for k in range(len(rangos)):
                if dtfracdias >= rangos[k][0] and dtfracdias < rangos[k][1]:
                    bin[k].append(infodiftot)

        m = m + 1

    dataPri = [
        dt_tle[:15], dv[:15], dn[:15], dc[:15], dvv[:15], dnn[:15], dcc[:15],
        dt_frac[:15]
    ]
    data1 = [dt_tle, dv, dn, dc, dvv, dnn, dnn, dt_frac]

    print '++++++++++++GRADO 2++++++++++++++++++'
    dt, coef, statsReport = ajustar_diferencias(epoca_ffin, dataPri, 2)
    print coef
    print statsReport

    print '++++++++++++GRADO 1++++++++++++++++++'
    dt1, coef1, statsReport1 = ajustar_diferencias(epoca_ffin, dataPri, 1)
    print coef1
    print statsReport1

    data = [dt, data1, coef, nombre]

    dtot.close()
    return bin, data, dataPri, coef1
Exemple #11
0
    cods_date_dic={}
    for fcods in cods_files:
        campos=fcods.split('/')
        ephem=EphemCODS(campos[4])
        y_cods, mon_cods, d_cods, hs_cods, min_cods, sec_cods = ephem.parsea_epoca_nombre()
        cods_date_dic[datetime(int(y_cods), int(mon_cods),int(d_cods))]={'nombre':fcods}
        cods_dates.append(datetime(int(y_cods), int(mon_cods),int(d_cods)))

    error_file_number=0
    epoca_tle_list=[]
    dx=[]
    dy=[]
    dz=[]
    for f in tle_files[1:3]:
        # TLE data - transformacion al sistema TOD
        tle=Tle.creadoxArchivo(f)
        epoca_tle=tle.epoca()
        r,v=tle.propagaTLE(datetime(epoca_tle.year,epoca_tle.month,epoca_tle.day,epoca_tle.hour,epoca_tle.minute,epoca_tle.second))
        r_tod=teme2tod(epoca_tle, r)
        date_tle=datetime(epoca_tle.year,epoca_tle.month,epoca_tle.day)
        
        # Busqueda del archivo correspondiente.

        cods_date=date_tle+timedelta(days=2)
        existe_dosmas=cods_date_dic.has_key(cods_date)
        if existe_dosmas:
            nombre_cods=cods_date_dic[cods_date]['nombre']
            ephem_sv = EphemCODS(nombre_cods)
            ephem_dic= ephem_sv.genera_diccionario() 
        else:
            cods_date=date_tle+timedelta(days=1)
Exemple #12
0
#--------------------------------------------------------------------------------

#--------------------------------------------------------------------------------
# Se realizan las propagaciones y las comparaciones.
#--------------------------------------------------------------------------------
n = 0
with progressbar.ProgressBar(max_value=7 * 1440) as progress:
    #==============
    progress.update(n)
    n = n + 1
    #==============
    for k in range(1):  # cant_tle
        dia_n = 1
        while dia_n <= 7:
            # Instancio el TLE
            tle0 = Tle.creadoxArchivo('../TleAdmin/tle/' + tle_ordenados[k][0])
            dia_prop = tle0.epoca() + timedelta(
                days=dia_n)  # dial al cual propaga
            ini_prop = datetime(dia_prop.year, dia_prop.month, dia_prop.day, 0,
                                0, 0)
            fin_prop = datetime(dia_prop.year, dia_prop.month, dia_prop.day,
                                23, 59, 59)
            dia = dia_prop.strftime('%Y_%m_%d')
            # Abro el archivo donde busco para comparar
            nombre_archivo = '../Validaciones/tle/37673_xyz_' + dia
            lista_archivos = glob.glob('../Validaciones/tle/*')
            if nombre_archivo in lista_archivos:
                archivo_tle = open(nombre_archivo, 'r')
                contenido = archivo_tle.readlines()
                archivo_diferencias = open('../Validaciones/tle/37673_xyz_' +
                                           dia + '_' + str(dia_n),
Exemple #13
0
@author: mcvalenti
'''
import numpy as np
from datetime import datetime, timedelta
from TleAdmin.TLE import Tle
from SistReferencia.sist_deCoordenadas import teme2tod

if __name__ == '__main__':
    """
    Compara el codigo de transformacion de sistemas de referencia
    de TEME (salida del SGP4) a TOD.
    
    """
    path_arch = '../TleAdmin/validacion/'
    tle_arch = '37673tle0'
    tle = Tle.creadoxArchivo(path_arch + tle_arch)
    fecha = tle.epoca()
    salida = open('../TleAdmin/validacion/SacD_TEME.txt', 'w')
    salida2 = open('../TleAdmin/validacion/SacD_TOD.txt', 'w')
    stk_arch = open('../Validaciones/SAC-D_376731_TOD _01ENERO13_STK.txt', 'r')
    contenido = stk_arch.readlines()
    fecha_inicio = datetime(fecha.year, fecha.month, fecha.day, 0, 0, 0)
    dx = []
    dy = []
    dz = []
    for i in range(1440):
        # Propaga el TLE cada 1 minuto.
        r_f, v_f = tle.propagaTLE(fecha_inicio)
        info = fecha_inicio.strftime('%Y-%m-%d %H:%M:%S') + ' ' + str(
            r_f[0]) + ' ' + str(r_f[1]) + ' ' + str(r_f[2]) + ' ' + str(
                v_f[0]) + ' ' + str(v_f[1]) + ' ' + str(v_f[2]) + '\n'
Exemple #14
0
def difPrimario():
    """
    Extrae todos los TLEs que contiene la carpeta tle del administrador
    de TLEs. Propaga cada TLEs a la epoca del ultimo del set y calcula 
    las diferencias. (falta que sea opcional el sistema de ref)
    NOTA: Transforma los resultados al sistema TOD.
    ----------------------------------------------------------------
    output:
        set de datos ... describir. 
    """
    tles = glob.glob('../TleAdmin/tle/*')
    dic_tles = generadorDatos(tles)
    tle_ordenados = ordenaTles(dic_tles)

    tle_inicio = Tle.creadoxArchivo('../TleAdmin/tle/' + tle_ordenados[0][0])
    cat_id = tle_inicio.catID()
    epoca_ini = tle_inicio.epoca()

    #=========================
    # Ultimo TLE del set
    #=========================
    tle_primario = Tle.creadoxArchivo('../TleAdmin/tle/' +
                                      tle_ordenados[-1][0])
    epoca_fin = tle_primario.epoca()
    epoca_ffin = epoca_fin
    epoca15dias = epoca_ffin - timedelta(days=15)

    nombre = 'difPri_' + str(cat_id) + '_' + epoca_ffin.strftime(
        '%Y%m%d') + '_' + epoca_ini.strftime('%Y%m%d') + '.TLE'
    nombre2 = 'difPri_xyz_' + str(cat_id) + '_' + epoca_ffin.strftime(
        '%Y%m%d') + '_' + epoca_ini.strftime('%Y%m%d') + '.TLE'
    dtot = open('../AjustarTLE/diferencias/' + nombre + '', 'w')
    dtot2 = open('../AjustarTLE/diferencias/' + nombre2 + '', 'w')

    dt_tle = []
    dt_frac = []
    dv = []
    dn = []
    dc = []
    dvv = []
    dnn = []
    dcc = []
    dx = []
    dy = []
    dz = []
    dxx = []
    dyy = []
    dzz = []

    tlepri = tle_ordenados[-1][0]
    r, rp, ffin = tlePrimario(tlepri)  # En TEME
    """
    Transformacion del TEME al TOD.
    """
    r = teme2tod(ffin, r)
    r = np.array([r[0, 0], r[0, 1], r[0, 2]])
    rp = teme2tod(ffin, rp)
    rp = np.array([rp[0, 0], rp[0, 1], rp[0, 2]])
    """
    fin de la transformacion
    """
    item = range(len(tle_ordenados) - 2, -1, -1)
    for j in item:
        tlesec = tle_ordenados[j][0]
        tle1 = Tle.creadoxArchivo('../TleAdmin/tle/' + tlesec)
        tle1_epoca = tle1.epoca()
        if tle1_epoca >= epoca15dias:
            pos, vel, fsec = tleSecundario(tlesec, ffin)
            """
            Transformacion del TEME al TOD.
            """
            pos = teme2tod(fsec, pos)
            pos = np.array([pos[0, 0], pos[0, 1], pos[0, 2]])
            vel = teme2tod(fsec, vel)
            vel = np.array([vel[0, 0], vel[0, 1], vel[0, 2]])
            """
            fin de la transformacion
            """
            dt_tle.append(fsec)
            dr = pos - r
            d_v = vel - rp
            x = dr[0]
            y = dr[1]
            z = dr[2]
            xx = d_v[0]
            yy = d_v[1]
            zz = d_v[2]
            dt = abs(fsec - ffin)
            dtfracdias = dt.total_seconds() / 86400.0
            v, n, c = vncSis(r, rp, dr)
            vv, nn, cc = vncSis(r, rp, d_v)
            #             v,n,c=ricSis(r, rp, dr)
            #             vv,nn,cc=ricSis(r,rp,dv)
            infodifpri = str(fsec) + ' ' + str(v) + ' ' + str(n) + ' ' + str(
                c) + ' ' + str(vv) + ' ' + str(nn) + ' ' + str(
                    cc) + ' ' + tlesec + '\n'
            infodifpri2 = str(fsec) + ' ' + str(x) + ' ' + str(y) + ' ' + str(
                z) + ' ' + str(xx) + ' ' + str(yy) + ' ' + str(
                    zz) + ' ' + tlesec + '\n'
            dtot.write(infodifpri)
            dtot2.write(infodifpri2)
            dt_frac.append(dtfracdias)
            '''
            Sistema VNC
            '''
            dv.append(v)
            dn.append(n)
            dc.append(c)
            dvv.append(vv)
            dnn.append(nn)
            dcc.append(cc)
            '''
            Sistema TEME
            '''
            dx.append(x)
            dy.append(y)
            dz.append(z)
            dxx.append(xx)
            dyy.append(yy)
            dzz.append(zz)

    data1 = [dt_tle, dv, dn, dc, dvv, dnn, dnn, dt_frac]
    var_v = np.var(dv)
    var_n = np.var(dn)
    var_c = np.var(dc)

    print '*******************************************************'
    print '-----------------Varianzas---------------------------'
    print '*******************************************************'
    print 'Var en R = ', var_v
    print 'Var en T = ', var_n
    print 'Var en N = ', var_c

    #     print '++++++++++++GRADO 2++++++++++++++++++'
    dt, coef, statsReport = ajustar_diferencias(epoca_ffin, data1, 2)
    #     print coef
    #     print statsReport
    #
    #     print '++++++++++++GRADO 1++++++++++++++++++'
    dt1, coef1, statsReport1 = ajustar_diferencias(epoca_ffin, data1, 1)
    #     print coef1
    #     print statsReport1

    data = [dt, data1, coef, nombre]
    dtot.close()
    dtot2.close()

    return data


#if __name__=='__main__':
#
#     d1='../TleAdmin/tle'
#     if not os.path.exists(d1):
#         os.mkdir(d1)
#     d2='../AjustarTLE/diferencias'
#     if not os.path.exists(d2):
#         os.mkdir(d2)
#     d3='../main/matrices/'
#     if not os.path.exists(d3):
#         os.mkdir(d3)
#     d4='../visual/archivos'
#     if not os.path.exists(d4):
#         os.mkdir(d4)

# #    ejecuta_procesamiento_TLE():
#     """
#     Se crean los directorios necesarios.
#     """
#
#     d1='../TleAdmin/tle'
#     if not os.path.exists(d1):
#         os.mkdir(d1)
#     d2='../AjustarTLE/diferencias'
#     if not os.path.exists(d2):
#         os.mkdir(d2)
#     d3='../main/matrices/'
#     if not os.path.exists(d3):
#         os.mkdir(d3)
#     d4='../visual/archivos'
#     if not os.path.exists(d4):
#         os.mkdir(d4)
#
#     files=glob.glob('../AjustarTLE/diferencias/*')
#     for filename in files:
#         os.unlink(filename)
#
#     self.bin=difTle(self.tleOrdenados, self.tles)
#     self.cantxbin,self.mediaxbin=genera_estadisticaBin(self.bin)
#     self.diferencias=difPrimario(self.filename,self.tles-1)
#
#     t=[]
#     dv=[]
#     dn=[]
#     dc=[]
#
#
#     archivo=open('../AjustarTLE/diferencias/difTotal','r')
#     contenido=archivo.readlines()
#
#     for c in contenido:
#         campos=c.split(',')
#         t.append(float(campos[0]))
#         dv.append(float(campos[1]))
#         dn.append(float(campos[2]))
#         dc.append(float(campos[3]))
#
#     c, b, a = P.polynomial.polyfit(t, dv, deg=2)
#     print c,b,a
#
#     x=np.linspace(0,30, 60)
#     y=[]
#     for i in x:
#         y.append(-0.002373*i*i+0.061160*i-0.077031)
#
#     plt.plot(t,dv,'x')
#     plt.plot(x,y,'-')
#     plt.show()

#     """
#     Verificacion de generacion del archivo con las diferencias
#     """
#     print '---------------------------------------------------------------------------------'
#     print "Verifiacion de la Generacion del archivo de diferencias: ",salida
#     print "Ultima modificacion %s" % time.ctime(os.path.getmtime('../AjustarTLE/diferencias/difTotal'))
#     print "creado: %s" % time.ctime(os.path.getctime('../AjustarTLE/diferencias/difTotal'))
#     print ' '
#     print ' '
#     """
#     generacion de graficos
#     """
# gegrafTot('../AjustarTLE/diferencias/difTotal'+setID,setID)

#     #gegraf('../AjustarTLE/diferencias/diferencias'+tlepri,tlepri)
Exemple #15
0
def calcula_matriz_OSWcorregido(cat_id, tca0, tca1, crudo, diferencias):
    """
    Metodo de Osweiler pero contra el vector de estado
    del Tle primario corregido.
    """
    files = glob.glob('../TleAdmin/tle/*')
    for filename in files:
        os.unlink(filename)

    set_deb = SetTLE(cat_id, tca0, tca1, crudo)
    set_deb.divide_setTLE()

    tles = glob.glob('../TleAdmin/tle/*')
    dic_tles = generadorDatos(tles)
    tle_ordenados = ordenaTles(dic_tles)

    tle_primario = Tle.creadoxArchivo('../TleAdmin/tle/' +
                                      tle_ordenados[-1][0])
    epoca_primario = tle_primario.epoca()
    # En TEME
    r0 = np.array([diferencias[0], diferencias[1], diferencias[2]])
    rp0 = np.array([diferencias[3], diferencias[4], diferencias[5]])

    nombre_archivo = 'difRTN_' + str(cat_id) + '_' + tca1.strftime(
        '%Y%m%d') + '.TLE'
    archivo_dif_rsw = open('../AjustarTLE/diferencias/' + nombre_archivo + '',
                           'w')
    # listas de diferencias (RTN)
    dr = []
    dt = []
    dn = []
    drr = []
    dtt = []
    dnn = []

    item = range(len(tle_ordenados) - 2, -1, -1)
    for j in item:
        tle1 = Tle.creadoxArchivo('../TleAdmin/tle/' + tle_ordenados[j][0])
        fsec = tle1.epoca()
        pos, vel = tle1.propagaTLE(epoca_primario)
        pos = np.array([pos[0], pos[1], pos[2]])
        vel = np.array([vel[0], vel[1], vel[2]])
        # Calculo de Diferencias
        d_r = pos - r0
        d_v = vel - rp0
        r, t, n = vncSis(r0, rp0, d_r)
        rr, tt, nn = vncSis(r0, rp0, d_v)
        #         r,t,n=ricSis(r0, rp0, d_r)
        #         rr,tt,nn=ricSis(r0,rp0,d_v)
        '''
        Sistema RTN
        '''
        dr.append(r)
        dt.append(t)
        dn.append(n)
        drr.append(rr)
        dtt.append(tt)
        dnn.append(nn)

        infodifRST = fsec.strftime('%Y-%m-%d %H:%M:%S') + ' ' + str(
            r) + ' ' + str(t) + ' ' + str(n) + ' ' + str(rr) + ' ' + str(
                tt) + ' ' + str(nn) + '\n'
        archivo_dif_rsw.write(infodifRST)

    var_r = np.var(dr)
    var_t = np.var(dt)
    var_n = np.var(dn)

    return nombre_archivo, var_r, var_t, var_n
Exemple #16
0
def calcula_matriz_Tles(cat_id, tca0, tca1, crudo):
    """
    Metodo de Osweiler.
    Dado un objeto y un intervalo temporal.
    Ejecuta el metodo de Osweiler de pair-wise para comparar las 
    propagaciones de cada TLE a la epoca del ultimo TLE del set,
     y generar el archivo de diferencias.
    ------------------------------------------------------------------
    inputs
        cat_id: identificador NORAD del objeto (String)
        tca0: epoca de inicio del intervalo (Datetime)
        tca1: epoca de fin del intervalo (Datetime)
        crudo: nombre del archivo con el set de TLEs (String)
               '../TleAdmin/tle/*' - viene vacio.
    outputs
        nombre_archivo: nombre de archivo donde se imprimen las diferencias
                       ('../AjustarTle/ diferencias/') (String) 
        var_x: varianzas en r,t,n (Float)
    """
    files = glob.glob('../TleAdmin/tle/*')
    for filename in files:
        os.unlink(filename)

    set_deb = SetTLE(cat_id, tca0, tca1, crudo)
    set_deb.divide_setTLE()

    tles = glob.glob('../TleAdmin/tle/*')
    #     print "=============================================="
    #     print "Cantidad de TLE: ", len(tles)
    dic_tles = generadorDatos(tles)
    tle_ordenados = ordenaTles(dic_tles)

    tle_primario = Tle.creadoxArchivo('../TleAdmin/tle/' +
                                      tle_ordenados[-1][0])
    epoca_primario = tle_primario.epoca()
    r0, rp0 = tle_primario.propagaTLE()  # En TEME
    r0 = np.array([r0[0], r0[1], r0[2]])

    nombre_archivo = 'difRTN_' + str(cat_id) + '_' + tca1.strftime(
        '%Y%m%d') + '.TLE'
    archivo_dif_rsw = open('../AjustarTLE/diferencias/' + nombre_archivo, 'w')
    # listas de diferencias (RTN)
    dr = []
    dt = []
    dn = []
    drr = []
    dtt = []
    dnn = []

    item = range(len(tle_ordenados) - 2, -1, -1)
    for j in item:
        tle1 = Tle.creadoxArchivo('../TleAdmin/tle/' + tle_ordenados[j][0])
        fsec = tle1.epoca()
        #        print '======================================='
        #        print 'Epoca del TLE: ',fsec
        #        print '=======================================
        pos, vel = tle1.propagaTLE(epoca_primario)
        pos = np.array([pos[0], pos[1], pos[2]])
        vel = np.array([vel[0], vel[1], vel[2]])
        # Calculo de Diferencias
        d_r = pos - r0
        d_v = vel - rp0
        #         r,t,n=vncSis(r0, rp0, d_r)
        #         rr,tt,nn=vncSis(r0,rp0,d_v)
        r, t, n = ricSis(r0, rp0, d_r)
        rr, tt, nn = ricSis(r0, rp0, d_v)
        '''
        Sistema RTN
        '''
        dr.append(r)
        dt.append(t)
        dn.append(n)
        drr.append(rr)
        dtt.append(tt)
        dnn.append(nn)

        infodifRST = fsec.strftime('%Y-%m-%d %H:%M:%S') + ' ' + str(
            r) + ' ' + str(t) + ' ' + str(n) + ' ' + str(rr) + ' ' + str(
                tt) + ' ' + str(nn) + '\n'
        archivo_dif_rsw.write(infodifRST)

    var_r = np.var(dr)
    var_t = np.var(dt)
    var_n = np.var(dn)

    return nombre_archivo, var_r, var_t, var_n
'''
Created on 28 nov. 2017

@author: curso
'''
import glob
from TleAdmin.TLE import SetTLE, Tle
from datetime import datetime

N_ID='32315'
tca0=datetime(2013,03,10)
tca1=datetime(2013,03,18)
set1=SetTLE(N_ID,tca0,tca1,'11308prueba1.tle')
set1.divide_setTLE()

tle_files=glob.glob('../TleAdmin/tle/*')

for tle in tle_files:
    tle_test=Tle.creadoxArchivo(tle)
    print tle_test.epoca()