def rinex_spliter_gfzrnx(input_rinex_path, output_directory,stat_out_name='', interval_size=86400,shift = 0, inclusive = False,gfzrnx_cmd='GFZRNX', output_name = "::RX3::", custom_cmds=''): interval_size_hour = interval_size / 3600. if stat_out_name == '': stat_out_name = os.path.basename(input_rinex_path)[0:4] # check if the RINEX is compressed ... bool_comp_rnx = check_if_compressed_rinex(input_rinex_path) # ... if not crz2rnx ! if bool_comp_rnx: input_rinex_path = crz2rnx(input_rinex_path) inp_rinex_obj=open(input_rinex_path,'r+') out_dir = output_directory # nom redondant mais j'ai la flemme d'aller corriger le nom de la variable if not os.path.exists(out_dir): os.makedirs(out_dir) os.chdir(out_dir) first_epoch , last_epoch = rinex_start_end(input_rinex_path) # In this function, Date are truncated epochs # (only the day if interval == 24 , + the hour else) first_date = dt.datetime(first_epoch.year,first_epoch.month, first_epoch.day,first_epoch.hour) last_date = dt.datetime(last_epoch.year,last_epoch.month, last_epoch.day,last_epoch.hour)+dt.timedelta(hours=1) print("first & last dates (truncated) : " , first_date , last_date) time_interval = utils.get_interval(first_date,last_date, dt.timedelta(hours=interval_size_hour)) alphabet = list(string.ascii_lowercase) rinex_out_name_lis = [] for i,curr_date in enumerate(time_interval): if shift != 0: print('WARN : rinex_spliter : shifted mode on, be careful !!!') if bool(shift) and i != 0: curr_date = curr_date + dt.timedelta(seconds = shift) interval_size_ope = interval_size #elif bool(shift) and i == 0 : # interval_size_ope = interval_size + float(shift) / 60. else: interval_size_ope = interval_size if not inclusive: interval_size_ope = interval_size_ope - 1. interval_size_ope = int(np.floor(interval_size_ope)) if not bool(shift): if interval_size == 24: rnx_interval_ext = '0.' else: rnx_interval_ext = alphabet[curr_date.hour] + '.' else: if interval_size == 24: rnx_interval_ext = '0.' else: rnx_interval_ext = alphabet[curr_date.hour] +'.' p = subprocess.Popen('',executable='/bin/bash', stdin=subprocess.PIPE , stdout=subprocess.PIPE , stderr=subprocess.PIPE) # - 1/3600. # one_sec2h command = gfzrnx_cmd + ' -finp ' + input_rinex_path + ' -fout ' + os.path.join(output_directory,output_name) + ' -site ' + stat_out_name.upper() +' -epo_beg ' + curr_date.strftime('%Y%m%d_%H%M%S') + ' --duration ' + str(interval_size_ope) + ' ' + custom_cmds print(command) #rinex_out_name = stat_out_name + curr_date.strftime('%j') + rnx_interval_ext + curr_date.strftime('%y') + 'o' std_log_name = curr_date.strftime('%j') + rnx_interval_ext + "err.log" err_log_name = curr_date.strftime('%j') + rnx_interval_ext + "err.log" stdout,stderr = p.communicate( command.encode() ) std_file = open(std_log_name, "w") std_file.write(stdout.decode("utf-8")) std_file.close() if stderr: print(err_log_name + " output:") print(stderr.decode("utf-8")) err_file = open(err_log_name, "w") err_file.write(stderr.decode("utf-8")) err_file.close() ### get the latest files list_of_files = glob.glob(output_directory + '/*') # * means all if need specific format then *.csv latest_file = sorted(list_of_files, key=os.path.getctime)[-3:] ### -2 and -1 are the logs latest_file = [e for e in latest_file if ".rnx" in e] if len(latest_file) == 0: latest_file = "" rnx_splt_path = "" else: latest_file = latest_file[0] rnx_splt_path = os.path.join(out_dir,latest_file) rinex_out_name_lis.append(rnx_splt_path)
def rinex_spliter(input_rinex_path,output_directory,stat_out_name='', interval_size=24,compress=False,shift = 0, inclusive = False,teqc_cmd='teqc'): """ if shift != 0: the start/end of a session is shifted of shift minutes inclusive: delta of exaclty interval_size => add the 1st epoch of the next sess not inclusive: delta of interval_size - 1s """ """ Split RINEX file using teqc Parameters ---------- input_rinex_path : str Path of the input RINEX output_directory : str Description param2 stat_out_name : str Station name for the output RINEX interval_size : int Size of the splitted interval compress : bool compress the outputed RINEX interval_size : int Size of the splitted interval FINIR CE HEADER !!!! Returns ------- out1 : float or int or str or dict or n-tuple or bool or list or numpy.array Description out1 out2 : float or int or str or dict or n-tuple or bool or list or numpy.array Description out2 Note ---- Misc. Notes Source ------ www.forum-source.com Examples -------- >> answer 42 """ if stat_out_name == '': stat_out_name = os.path.basename(input_rinex_path)[0:4] # check if the RINEX is compressed ... bool_comp_rnx = check_if_compressed_rinex(input_rinex_path) # ... if not crz2rnx ! if bool_comp_rnx: input_rinex_path = crz2rnx(input_rinex_path) inp_rinex_obj=open(input_rinex_path,'r+') out_dir = output_directory # nom redondant mais j'ai la flemme d'aller corriger le nom de la variable if not os.path.exists(out_dir): os.makedirs(out_dir) os.chdir(out_dir) first_epoch , last_epoch = rinex_start_end(input_rinex_path) # In this function, Date are truncated epochs # (only the day if interval == 24 , + the hour else) first_date = dt.datetime(first_epoch.year,first_epoch.month, first_epoch.day,first_epoch.hour) last_date = dt.datetime(last_epoch.year,last_epoch.month, last_epoch.day,last_epoch.hour)+dt.timedelta(hours=1) print("first & last dates (truncated) : " , first_date , last_date) time_interval = utils.get_interval(first_date,last_date, dt.timedelta(hours=interval_size)) alphabet = list(string.ascii_lowercase) rinex_out_name_lis = [] for i,curr_date in enumerate(time_interval): if shift != 0: print('WARN : rinex_spliter : shifted mode on, be careful !!!') if bool(shift) and i != 0: curr_date = curr_date + dt.timedelta(minutes = shift) interval_size_ope = interval_size elif bool(shift) and i == 0 : interval_size_ope = interval_size + float(shift) / 60. else: interval_size_ope = interval_size if not inclusive: interval_size_ope = interval_size_ope - 1/3600. if not bool(shift): if interval_size == 24: rnx_interval_ext = '0.' else: rnx_interval_ext = alphabet[curr_date.hour] + '.' else: if interval_size == 24: rnx_interval_ext = '0.' else: rnx_interval_ext = alphabet[curr_date.hour] +'.' p = subprocess.Popen('',executable='/bin/bash', stdin=subprocess.PIPE , stdout=subprocess.PIPE , stderr=subprocess.PIPE) # - 1/3600. # one_sec2h command = teqc_cmd + ' -O.mo ' + stat_out_name.upper() +' -st ' + curr_date.strftime('%y%m%d%H%M%S') + ' +dh ' + str(interval_size_ope) + ' ' + input_rinex_path print(command) rinex_out_name = stat_out_name + curr_date.strftime('%j') + rnx_interval_ext + curr_date.strftime('%y') + 'o' err_log_name = curr_date.strftime('%j') + rnx_interval_ext + "err.log" print(rinex_out_name) stdout,stderr = p.communicate( command.encode() ) std_file = open(rinex_out_name, "w") std_file.write(stdout.decode("utf-8")) std_file.close() if stderr: print(err_log_name + " is not empty, must be checked !") print(stderr.decode("utf-8")) err_file = open(err_log_name, "w") err_file.write(stderr.decode("utf-8")) err_file.close() rnx_splt_path = os.path.join(out_dir,rinex_out_name) if compress: rinex_out_final = rnx2crz(rnx_splt_path) os.remove(rnx_splt_path) else: rinex_out_final = rnx_splt_path rinex_out_name_lis.append(rinex_out_final) return rinex_out_name_lis