Пример #1
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
Пример #2
0
def generaTOD(tles, sat_id):
    listaTle = {}
    for i in tles:
        tle1 = Tle(i)
        fecha = tle1.epoca()
        r, v = tle1.propagaTLE()
        r_teme = [r[0], r[1], r[2]]
        r_tod = teme2tod(fecha, r_teme)
        r_todx = np.array(r_tod[0][0])
        listaTle[fecha] = str(r_todx[0][0]) + ' ' + str(
            r_todx[0][1]) + ' ' + str(
                r_todx[0][2]) + '\n'  #+str(v[0])+' '+str(v[1])+' '+str(v[2])
    listaTle = sorted(listaTle.items())
    archivo = str(sat_id) + '_TOD_xyz.txt'
    salidaTle = open('../TleAdmin/crudosTLE/' + archivo, 'w+')
    for k in listaTle:
        infoa = str(k[0])
        infob = k[1]
        linea = infoa + ' ' + infob + '\n'
        salidaTle.write(linea)
    salidaTle.close()
    return archivo
Пример #3
0
    fecha_tle = datetime(2013, 1, 1, 0, 0, 0, 0)
    fecha_ini = fecha_tle + timedelta(days=1)
    sat_id = '37673'
    tle0 = Tle.creadoxParam(sat_id, fecha_tle)
    #archivo de efemeride precisa.
    cods_arch = '../CodsAdmin/TOD_O/CODS_20130103_135713_SACD_ORBEPHEM_TOD_XYZ_O.TXT'
    cods_efem = open(cods_arch, 'r')
    lista_efem = cods_efem.readlines()

    #=======================================
    # Propaga TLE y compara con CODS
    #=======================================

    while fecha_ini < datetime(2013, 1, 2, 0, 0, 0, 0) + timedelta(minutes=5):
        r_teme, v_teme = tle0.propagaTLE(fecha_ini)
        r_tod = np.array(teme2tod(fecha_ini, r_teme))
        v_tod = np.array(teme2tod(fecha_ini, v_teme))
        linea_tle = fecha_ini.strftime('%Y-%m-%d %H:%M:%S') + ' ' + str(
            r_tod[0][0]) + ' ' + str(r_tod[0][1]) + ' ' + str(
                r_tod[0][2]) + ' ' + str(v_tod[0][0]) + ' ' + str(
                    v_tod[0][1]) + ' ' + str(v_tod[0][2])
        # Busco los bordes del archivo CODS para interpolar.
        inferior, superior = encuentraBordes(lista_efem, linea_tle)
        linea_interp = interpola(linea_tle, inferior, superior)
        #-------------------------------------------------------
        fecha_ini = fecha_ini + timedelta(minutes=1)

    print 'linea inferior = ', inferior
    print 'linea del TLE  = ', linea_tle
    print 'linea superior = ', superior
    print 'linea superior = ', linea_interp
Пример #4
0
                    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())
                dv.append(r_tod[0][0] - r[0])
                dn.append(r_tod[0][1] - r[1])
                dc.append(r_tod[0][2] - r[2])
                dx.append(r_teme[0] - r[0])
                dy.append(r_teme[0] - r[1])
                dz.append(r_teme[0] - r[2])
            else:
                pass

    f_ini = np.min(t)
    for dt in t:
Пример #5
0
    """
    ephem = EphemCODS('../CodsAdmin/sacDdensos/' + archivo_crudo_cods)
    ephem_dic = ephem.genera_diccionario()
    # Propago el TLE del dia 1.
    anio = tle_dia1.epoca.year
    mes = tle_dia1.epoca.month
    epoca_ini_prop = datetime(anio, mes, 3, 0, 0, 0)
    epoca_fin_prop = epoca_ini_prop + timedelta(days=1)
    dif_r = []
    dif_v = []
    dif_n = []
    dif_c = []
    while epoca_ini_prop < epoca_fin_prop:
        #propago
        r, v = tle_dia1.propagaTLE(epoca_ini_prop)
        r_tod = teme2tod(epoca_ini_prop, r)
        #extraigo datos cods
        x = ephem_dic[epoca_ini_prop]['x']
        y = ephem_dic[epoca_ini_prop]['y']
        z = ephem_dic[epoca_ini_prop]['z']
        vx = ephem_dic[epoca_ini_prop]['vx']
        vy = ephem_dic[epoca_ini_prop]['vy']
        vz = ephem_dic[epoca_ini_prop]['vz']
        r_cods = np.array([float(x), float(y), float(z)])
        v_cods = np.array([float(vx), float(vy), float(vz)])

        resta = r_cods[0] - r_tod.item(0), r_cods[1] - r_tod.item(
            1), r_cods[2] - r_tod.item(2)
        v, n, c = vncSis(r_cods, v_cods, resta)

        dif_r.append(resta)
Пример #6
0
print "Epoch: ", t0
#	print satellite.epoch
for hora in range(0, 24):
    for minuto in range(0, 60):
        for segundo in range(0, 60):
            datos = cods[segundo + minuto * 60 + hora * 3600].split()
            xcods = float(datos[2])
            ycods = float(datos[3])
            zcods = float(datos[4])
            xpcods = float(datos[5])
            ypcods = float(datos[6])
            zpcods = float(datos[7])
            #			zosition, velocity = satellite.propagate(t0.year, t0.month, t0.day, t0.hour, t0.minute, t0.second)
            position, velocity = satellite.propagate(t0.year, t0.month, 5,
                                                     hora, minuto, segundo)
            fechahora = datetime(t0.year, t0.month, t0.day, hora, minuto,
                                 segundo)
            #			print "teme" , fechahora, position[0], position[1], position[2]
            r_tod = teme2tod(fechahora, position)
            #			print "tod" , fechahora, r_tod.item(0), r_tod.item(1), r_tod.item(2)
            #			print "delta", fechahora, r_tod.item(0)-position[0] , r_tod.item(1)-position[1] , r_tod.item(2)-position[2]
            #			dif = (r_tod.item(0)-position[0] , r_tod.item(1)-position[1] , r_tod.item(2)-position[2])
            dif = (xcods - r_tod.item(0), ycods - r_tod.item(1),
                   zcods - r_tod.item(2))
            poscods = (xcods, ycods, zcods)
            velcods = (xpcods, ypcods, zpcods)
            #			(v,n,c) = vncSis(position, velocity, dif)
            (v, n, c) = vncSis(poscods, velcods, dif)
            print fechahora, v, n, c
#print "fin"
Пример #7
0
        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)
            existe_unomas=cods_date_dic.has_key(cods_date)
            if existe_unomas:
                nombre_cods=cods_date_dic[cods_date]['nombre']
Пример #8
0
 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'
     #        salida.write(info)
     r_teme = [r_f[0], r_f[1], r_f[2]]
     v_teme = [v_f[0], v_f[1], v_f[2]]
     r_tod = teme2tod(fecha_inicio, r_teme)
     r_tod = np.array(r_tod[0])
     v_tod = teme2tod(fecha_inicio, v_teme)
     v_tod = np.array(v_tod[0])
     info2 = fecha_inicio.strftime('%Y-%m-%d %H:%M:%S') + ' ' + str(
         r_tod[0][0]) + ' ' + str(r_tod[0][1]) + ' ' + str(
             r_tod[0][2]) + ' ' + str(v_tod[0][0]) + ' ' + str(
                 v_tod[0][1]) + ' ' + str(v_tod[0][2]) + '\n'
     salida2.write(info2)
     # Busca la fecha en el archivo STK.
     for c in contenido:
         campos = c.split()
         if datetime.strptime(campos[0] + ' ' + campos[1],
                              '%Y/%m/%d %H:%M:%S.%f') == fecha_inicio:
             r_tod_stk = [
                 float(campos[2]),
Пример #9
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)