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 #%% Import import numpy as np import argparse import sys import LiCSBAS_io_lib as io_lib import LiCSBAS_tools_lib as tools_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('-p', dest='primary_epoch_list', default=None, type=str, help="input text file containing a list of epochs to serve as primary epochs") parser.add_argument('-s', dest='secondary_epoch_list', default=None, type=str, help="input text file containing a list of epochs to serve as secondary epochs") parser.add_argument('-e', dest='existing_ifg_list', default=None, type=str, help="input text file containing a list of epochs, used to avoid generating existing ifgs in the output list, or used to provide primary and secondary epochs when -p and -s are not used. ") parser.add_argument('-o', dest='output_ifg_list', default="dense_list.txt", type=str, help="output text file containing a list of epochs") parser.add_argument('-l', dest='minimum_temporal_baseline', default=13, type=int, help="minimum temporal baseline in days") parser.add_argument('-u', dest='maximum_temporal_baseline', default=400, type=int, help="maximum temporal baseline in days") parser.add_argument('-m', dest='maximum_number', default=500, type=int, help="evenly sample new list to below this total number") args = parser.parse_args() if __name__ == "__main__": init_args() # get epochs for generating new ifgs if args.primary_epoch_list and args.secondary_epoch_list: epoch1 = np.loadtxt(args.primary_epoch_list) epoch2 = np.loadtxt(args.secondary_epoch_list) elif args.existing_ifg_list: ifgdates = io_lib.read_ifg_list(args.existing_ifg_list) epoch1 = epoch2 = tools_lib.ifgdates2imdates(ifgdates) else: sys.exit("no primary or secondary epoch list or no existing ifg list ") # load list of any pre-existing ifgs if args.existing_ifg_list: existing_ifgdates = io_lib.read_ifg_list(args.existing_ifg_list) else: existing_ifgdates = [] # generate a new ifg list ifgdates = [] for e1 in epoch1: for e2 in epoch2: ifgdates.append(e1+"_"+e2) # only keep those with allowed range of temporal baselines dt = tools_lib.calc_temporal_baseline(ifgdates) mask = np.logical_and(np.array(dt) > args.minimum_temporal_baseline, np.array(dt) < args.maximum_temporal_baseline) ifgdates_masked = np.array(ifgdates)[mask].tolist() new_ifgdates = sorted(list(set(ifgdates_masked)-set(existing_ifgdates))) if len(new_ifgdates) > args.maximum_number: # separate new_ifgdates into two lists, one with primary epochs before 2017, one after 2017 new_primary = np.array([int(x[:4]) for x in new_ifgdates]) before_2017_ifgs = np.array(new_ifgdates)[new_primary < 2017].tolist() after_2017_ifgs = np.array(new_ifgdates)[new_primary >= 2017].tolist() # downsample list of ifgs after 2017 to make total number of ifgs below -m threshold length = len(new_ifgdates) ratio = length / args.maximum_number downsample_factor_before_2017 = int(np.floor(ratio)) downsample_factor_after_2017 = int(np.ceil(ratio)) downsampled_before_2017_ifgs = before_2017_ifgs[::downsample_factor_before_2017] downsampled_after_2017_ifgs = after_2017_ifgs[::downsample_factor_after_2017] to_process_ifgdates = downsampled_before_2017_ifgs + downsampled_after_2017_ifgs else: to_process_ifgdates = new_ifgdates # export to text file with open(args.output_ifg_list, 'w') as f: for i in to_process_ifgdates: print('{}'.format(i), file=f)