def valida_cdm(cdm_archivo): """ Extrae datos del CDM y calcula la PoC con el metodo de formula explicita de Lei Chen. """ cdm=CDM(cdm_archivo) #================= # Desgloce del CDM #================= sat_id=cdm.noradID_mision deb_id=cdm.noradID_deb TCA=cdm.TCA v_sat=cdm.v_sat v_deb=cdm.v_deb dr=float(cdm.dr)/1000.0 ds=float(cdm.ds)/1000.0 dw=float(cdm.dw)/1000.0 var_r=float(cdm.cr_r)*0.000001 var_s=float(cdm.ct_t)*0.000001 var_w=float(cdm.cn_n)*0.000001 # poc_cdm=float(cdm.POC) #=============================================== #Calculo el angulo entre los vectores velocidad. #=============================================== cos_phi=np.dot(v_sat,v_deb)/(np.sqrt(np.dot(v_sat,v_sat))*np.sqrt(np.dot(v_deb,v_deb))) phi=np.arccos(cos_phi) #=============================================== #Calculo la Probabilidad de Colision. #=============================================== rsw_vect=[dr,ds,dw] cov_rsw=np.array([[var_r,0,0],[0,var_s,0],[0,0,var_w]]) mu_x,mu_y,sig2_xc,sig2_yc=proyecta_plano_de_encuentro(rsw_vect,cov_rsw,phi) PoC,PoC_int=calcula_Poc_manual(mu_x,mu_y,sig2_xc,sig2_yc) # print '==========================================' # print 'Proyeccion al Plano' # print mu_x,mu_y,sig2_xc,sig2_yc print '==========================================' # print 'PoC del CDM = ','%.7e' % round(poc_cdm,11) print 'PoC calculada en forma explicita = ','%.7e' % round(PoC,11) print 'PoC calculada mediante una integral = ','%.7e' % round(PoC_int[0],11) print '==========================================' #=============================================== #Calculo del Encuentro. #=============================================== tca_epoca=datetime.strptime(TCA,"%Y-%m-%dT%H:%M:%S.%f") tle_sat=Tle.creadoxParam(sat_id, tca_epoca) tle_deb=Tle.creadoxParam(deb_id, tca_epoca) n=0 encuentro = Encuentro(tle_sat,tle_deb,tca_epoca,n) print '==========================================' print 'Min distancia Calculada = ', encuentro.mod_minDist print 'TCA calculado = ', encuentro.tca_c print 'Componentes RTN del CDM: ', dr, ds, dw print 'Componentes RTN calculadas: ', encuentro.r_comp, encuentro.s_comp, encuentro.w_comp
if __name__ == '__main__': #def EjecutaComparacion(sat_id,ArchivoTLE,ArchivoCODS): """ Ajusta TLE. Propaga un TLE de SAC-D dos dias hacia adelante. y compara con efemerides precisas. Hace los promedios de las diferencias. """ #======================== # Descarga un TLE #======================== 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(
] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() with open('tabladatos.csv') as File: reader = csv.reader(File) cdm_list = list(reader) for row in cdm_list[4:6]: obj1_id = row[0] obj2_id = row[1] tca = datetime.strptime(row[2], '%d/%m/%Y %H:%M:%S') miss_distance = row[3] poc = row[4] # Instanciacion de los TLE tle_sat = Tle.creadoxParam(obj1_id, tca) tle_deb = Tle.creadoxParam(obj2_id, tca) # Corroborar que el TLE es anterior en fecha y hora al tca if tle_sat.epoca() >= tca: tca_sust = tca - timedelta(days=1) tle_sat = Tle.creadoxParam(obj1_id, tca_sust) if tle_deb.epoca() >= tca: tca_sust = tca - timedelta(days=1) tle_deb = Tle.creadoxParam(obj2_id, tca_sust) encuentro1 = Encuentro(tle_sat, tle_deb, tca, hr) # Procesamiento Lei-Chen #poc_lei=encuentro1.calculaPoC_circ()
sat_id = '27386' #ENVISAT deb_id = '12442' #COSMOS # TCA=datetime(2008,1,9,19,1,30,0) # sat_id='27386' #ENVISAT # deb_id='15482' #COSMOS # TCA=datetime(2013,1,1) # sat_id='37673' #SAC-D # deb_id='15482' #COSMOS """ Prediccion con n dias de aticipacion """ n = 3 # x ejemplo para un CDM que llega 72 hs antes. #=========================================================== # Satelite #=========================================================== tle_sat = Tle.creadoxParam(sat_id, TCA - timedelta(days=n)) #=========================================================== # Desecho #=========================================================== tle_deb = Tle.creadoxParam(deb_id, TCA - timedelta(days=n)) #=========================================================== # ENCUENTRO #=========================================================== encuentro1 = Encuentro(tle_sat, tle_deb, TCA, n) tca_calculado = encuentro1.tca_c min_distancia = encuentro1.mod_minDist dif_r = encuentro1.DistRic_min[0] dif_t = encuentro1.DistRic_min[1] dif_n = encuentro1.DistRic_min[2] #Calculo el angulo entre los vectores velocidad. # v_sat=encuentro1.vel_sat_tca
''' Created on 20/10/2017 ---------------------------------------------------- A partir de una lista de NORAD ID. El codigo se trae un TLE de Space-track y verifica si el satelite en cuestion es LEO o DEEP SPACE ---------------------------------------------------- @author: mcvalenti ''' from datetime import datetime from sgp4.earth_gravity import wgs72, wgs84 from sgp4.io import twoline2rv from TleAdmin.TLE import Tle object_list = [ '25415', '31445', '20737', '20738', '27939', '31588', '11308', '32315', '17583' ] epocaf = datetime(2013, 03, 15) whichconst = wgs84 for sat_id in object_list: tle = Tle.creadoxParam(sat_id, epocaf) satrec = twoline2rv(tle.linea1, tle.linea2, whichconst) if (satrec.a - 1.0) * 6378 < 5877.5: print 'LEO satellte: ', (satrec.a - 1.0) * 6378 else: print 'DEEP SPACE OBJECT: ', (satrec.a - 1.0) * 6378
# min_d= 0.18 # dr=0.0359 # dt=-0.1488 # dn=0.0957 # MENSAJE # 8 # sat_id='27372' # deb_id='31413' # TCA=datetime(2013,01,11,5,30,55,0) # min_d= 0.15 # dr=-0.1191 # dt=0.0003 # dn=0.092 #tca_epoca=datetime.strptime(TCA,"%Y-%m-%dT%H:%M") tle_sat = Tle.creadoxParam(sat_id, TCA) tle_deb = Tle.creadoxParam(deb_id, TCA) n = 3 encuentro = Encuentro(tle_sat, tle_deb, TCA, n) rtn_dist = encuentro.DistRic_min set_data = encuentro.tca_min_data poc, poc_int = encuentro.calculaPoC_circ() # #============================== # # PLOTEO # #============================== # """ # Gestion de Fechas # """