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 will reset any nulled data to a pre-defined state =============== Input & output files =============== Inputs in GEOCml*/ : - yyyymmdd_yyyymmdd/ - yyyymmdd_yyyymmdd.unw.ori - yyyymmdd_yyyymmdd.unw ===== Usage ===== LiCSBAS_reset_nulls.py [-h] [-d GEOC_DIR] [--reset_all] [--reset_NoLoop] [--reset_LoopErr] """ #%% Change log ''' PEB: fix paths v1.0 20230803 Jack McGrath - Original implementation ''' import os import re import sys import glob import time import shutil import argparse import numpy as np 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="Frame directory") parser.add_argument('-d', dest='geoc_dir', default="GEOCml10GACOS", help="GEOCdir containing IFGs to be reset") parser.add_argument('-t', dest='ts_dir', default="TS_$GEOCdir", help="TS_GEOCdir containing info/11bad_ifg.txt") parser.add_argument('--reset_all', dest='reset_all', default=False, action='store_true', help='Reset all IFGs to original, unnulled state') parser.add_argument('--reset_NoLoop', dest='reset_NoLoop', default=False, action='store_true', help='Add noLoops back into the IFGs (LiCSBAS130_remove_noloops.py must have been the last nullification)') parser.add_argument('--reset_LoopErr', dest='reset_LoopErr', default=False, action='store_true', help='Add Loop Errors back into the IFGs (LiCSBAS12_loop_closure.py must have been the last nullification)') args = parser.parse_args() def start(): global start_time # intialise and print info on screen start_time = time.time() ver="1.0"; date=20230706; author="Jack McGrath" 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{} {} finished!".format(os.path.basename(sys.argv[0]), ' '.join(sys.argv[1:])), flush=True) print('IFG directory: {}\n'.format(os.path.abspath(ifgdir))) def set_input_output(): global ifgdir, ifglist, noLoopList, bad_ifg_list ifgdir = os.path.abspath(os.path.join(args.frame_dir, args.geoc_dir)) ifglist = glob.glob(os.path.join(ifgdir, '[1-2]*')) if '$' in args.ts_dir: bad_ifg11file = os.path.join(args.frame_dir, 'TS_' + args.geoc_dir, 'info', '11bad_ifg.txt') else: bad_ifg11file = os.path.join(args.frame_dir, args.ts_dir, 'info', '11bad_ifg.txt') ### Read bad_ifg11 and 12 if os.path.exists(bad_ifg11file): bad_ifg_list = io_lib.read_ifg_list(bad_ifg11file) else: bad_ifg_list = [] # Set reset flags if args.reset_NoLoop and args.reset_LoopErr: print('--reset_NoLoop (LiCSBAS13_remove_noloops) and --reset_LoopErr (LiCSBAS12_loop_closure) both set') print('Setting --reset_all instead') args.reset_all = True if args.reset_all: args.reset_NoLoop = False args.reset_LoopErr = False if not args.reset_all and not args.reset_NoLoop and not args.reset_LoopErr: raise Exception('No reset options selected......') if args.reset_all or args.reset_NoLoop: noLoopDir = os.path.join(ifgdir, 'no_loop_ifg') if os.path.exists(noLoopDir): noLoopList = glob.glob(os.path.join(noLoopDir, '[1-2]*')) else: noLoopList = [] def reset_all(): # Return No Loop IFGs to the main folder for ifg in noLoopList: ifgd = re.split('/', ifg)[-1] shutil.move(ifg, os.path.join(ifgdir, ifgd)) ifglist = glob.glob(os.path.join(ifgdir, '[1-2]*')) for ifg in ifglist: ifgd = re.split('/', ifg)[-1] if os.path.exists(os.path.join(ifg, ifgd + '.unw.ori')): shutil.move(os.path.join(ifg, ifgd + '.unw.ori'), os.path.join(ifg, ifgd + '.unw')) shutil.move(os.path.join(ifg, ifgd + '.unw.ori.png'), os.path.join(ifg, ifgd + '.unw.png')) for backup in glob.glob(os.path.join(ifg, '*orig*')): if os.path.islink(backup): os.unlink(backup) else: os.remove(backup) elif os.path.exists(os.path.join(ifg, ifgd + '.unw')): if ifgd not in bad_ifg_list: print('CAUTION: NO {}.unw.ori exists to backup from!'.format(ifgd)) else: print( 'CAUTION: {0} identified as a bad by step 11. No nulling occurred, so no {0}.unw.ori exists to backup from!'.format( ifgd)) else: print('WARNING: NO {0}.unw OR {0}.unw.ori EXISTS in {1}!'.format(ifgd, os.path.dirname(ifgdir))) def reset_null(): if args.reset_LoopErr: resetcode=12 elif args.reset_NoLoop: resetcode=13 # Return No Loop IFGs to the main folder for ifg in noLoopList: ifgd = re.split('/', ifg)[-1] shutil.move(ifg, os.path.join(ifgdir, ifgd)) else: resetcode = 999 # undefined ifglist = glob.glob(os.path.join(ifgdir, '[1-2]*')) for ifg in ifglist: ifgd = re.split('/', ifg)[-1] backups = glob.glob(os.path.join(ifg, ifgd + '{}.unw.ori'.format(resetcode))) if len(backups) == 0: print('WARNING: No backup \'{}.unw.ori\' files found in {}! Skipping.....'.format(resetcode, ifgd)) elif len(backups) > 1: print('WARNING: Ambiguous as to which file is the last backup in {}! Skipping.....'.format(ifgd)) else: backup = backups[0] # Check if backup is a symlink if os.path.islink(backup): # Remove symlink, reset with _orig.unw os.unlink(backup) shutil.move(os.path.join(ifg, ifgd + '.unw.ori'), os.path.join(ifg, ifgd + '.unw')) shutil.move(os.path.join(ifg, ifgd + '.unw.ori.png'), os.path.join(ifg, ifgd + '.unw.png')) else: shutil.move(backup, os.path.join(ifg, ifgd + '.unw')) def main(): start() init_args() set_input_output() if args.reset_all: reset_all() else: reset_null() finish() if __name__ == "__main__": main()