1:45 PM 11/12/2025 ���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!
Warning: Undefined variable $authorization in C:\xampp\htdocs\demo\fi.php on line 57

Warning: Undefined variable $translation in C:\xampp\htdocs\demo\fi.php on line 118

Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\demo\fi.php on line 119

Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampp\htdocs\demo\fi.php on line 120

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 247

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 248

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 249

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 251

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 252
#!/usr/bin/env python3 """ ======== Overview ======== This script (1) calculates a histogram of each residual map converted into factors of 2pi radian, (2) offsets the residual map by the histogram peak to remove any bias from referencing effect (3) calculate and saves the RMS of the de-peaked residual as multiples of 2pi [.txt] (4) plots and saves a histogram[.png] of all RMS of all ifgs (5) sets a threshold [.txt] for automatic correction with 132_3D_correction.py =============== Input & output files =============== Inputs in GEOCml*/ : - slc.mli.par Inputs in TS_GEOCml*/ : - 13resid/ - yyyymmdd_yyyymmdd.res Outputs in TS_GEOCml*/ : - info/ - 131resid_2pi{suffix}.txt : RMS of the de-peaked residuals as factors of 2pi radian - 131RMS_ifg_res_hist{suffix}.png : plot of histogram with a vertical bar indicating threshold ===== Usage ===== LiCSBAS131_residual_threshold.py [-h] [-f FRAME_DIR] [-g UNW_DIR] [-t TS_DIR] [-p PERCENTILE] [--suffix SUFFIX] """ import numpy as np import matplotlib.pyplot as plt import os import glob import argparse import sys import time import LiCSBAS_io_lib as io_lib class CustomFormatter(argparse.ArgumentDefaultsHelpFormatter, argparse.RawDescriptionHelpFormatter): ''' Use a multiple inheritance approach to use features of both classes. The ArgumentDefaultsHelpFormatter class adds argument default values to the usage help message The RawDescriptionHelpFormatter class keeps the indentation and line breaks in the ___doc___ ''' pass def init_args(): global args parser = argparse.ArgumentParser(description=__doc__, formatter_class=CustomFormatter) parser.add_argument('-f', dest='frame_dir', default="./", help="directory of LiCSBAS output of a particular frame") parser.add_argument('-c', dest='cc_dir', default="GEOCml10GACOS", help="folder containing slc.mli.par") parser.add_argument('-t', dest='ts_dir', default="TS_GEOCml10GACOS", help="folder containing time series") parser.add_argument('-r', dest='thresh', type=float, help="user specified threshold value, otherwise auto-detected") parser.add_argument('-p', dest='percentile', type=float, help="optional percentile RMS for thresholding") parser.add_argument('--suffix', default="", type=str, help="suffix of both input and output") parser.add_argument('--no_depeak', default=False, action='store_true', help="don't offset by mode (recommend depeak)") args = parser.parse_args() def start(): global start_time # intialise and print info on screen start_time = time.time() ver="1.0"; date=20221020; author="Qi Ou" print("\n{} ver{} {} {}".format(os.path.basename(sys.argv[0]), ver, date, author), flush=True) print("{} {}".format(os.path.basename(sys.argv[0]), ' '.join(sys.argv[1:])), flush=True) def finish(): #%% Finish elapsed_time = time.time() - start_time hour = int(elapsed_time/3600) minite = int(np.mod((elapsed_time/60),60)) sec = int(np.mod(elapsed_time,60)) print("\nElapsed time: {0:02}h {1:02}m {2:02}s".format(hour,minite,sec)) print("\n{} {}".format(os.path.basename(sys.argv[0]), ' '.join(sys.argv[1:])), flush=True) print('Output directory: {}\n'.format(os.path.abspath(tsadir))) def set_input_output(): global unwdir, tsadir, resdir, infodir, hist_png, restxtfile # define input directories unwdir = os.path.abspath(os.path.join(args.frame_dir, args.cc_dir)) tsadir = os.path.abspath(os.path.join(args.frame_dir, args.ts_dir)) resdir = os.path.join(tsadir, '130resid'+args.suffix) # define output directory and files infodir = os.path.join(tsadir, 'info') hist_png = os.path.join(infodir, "131RMS_ifg_res_hist{}.png".format(args.suffix)) restxtfile = os.path.join(infodir, '131resid_2pi{}.txt'.format(args.suffix)) if os.path.exists(restxtfile): os.remove(restxtfile) def get_para(): global width, length, coef_r2m # read ifg size and satellite frequency mlipar = os.path.join(unwdir, 'slc.mli.par') width = int(io_lib.get_param_par(mlipar, 'range_samples')) length = int(io_lib.get_param_par(mlipar, 'azimuth_lines')) radar_frequency = float(io_lib.get_param_par(mlipar, 'radar_frequency')) # 5405000000.0 Hz for C-band speed_of_light = 299792458 # m/s wavelength = speed_of_light/radar_frequency coef_r2m = -wavelength/4/np.pi*1000 def plot_histogram_of_rms_of_depeaked_residuals(): print('Reading residual maps from {}'.format(resdir)) with open(restxtfile, "w") as f: print('# RMS of residual (in number of 2pi)', file=f) # calc rms of de-peaked residuals res_rms_list = [] for i in glob.glob(os.path.join(resdir, '*.res')): pair = os.path.basename(i).split('.')[0][-17:] print(pair) res_mm = np.fromfile(i, dtype=np.float32) res_rad = res_mm / coef_r2m res_num_2pi = res_rad / 2 / np.pi if not args.no_depeak: counts, bins = np.histogram(res_num_2pi, np.arange(-2.5, 2.6, 0.1)) peak = bins[counts.argmax()] + 0.05 res_num_2pi = res_num_2pi - peak res_rms = np.sqrt(np.nanmean(res_num_2pi ** 2)) res_rms_list.append(res_rms) print('{} {:5.2f}'.format(pair, res_rms), file=f) # plotting histogram and peak and threshold vertical lines count_ifg_res_rms, bin_edges, patches = plt.hist(res_rms_list, np.arange(0, 3, 0.1)) peak_ifg_res_rms = bin_edges[count_ifg_res_rms.argmax()] + 0.05 # nanmode # plotting median and mean to illustrate skewedness of the distribution. mode