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
#!/bin/bash # Exostrata — LiCSBAS processing for Bucks + Beds + Herts # Clips from all-England data on E:, then runs steps 11-13 # With validation between each step set -euo pipefail export PATH="/c/msys64/mingw64/bin:$PATH" export PYTHONPATH="C:\\Users\\Administrator\\LiCSBAS\\LiCSBAS_lib" PYTHON="C:\\Users\\Administrator\\Documents\\AllStrata\\.venv-licsbas\\Scripts\\python.exe" # Source data (all-England clipped interferograms) SRC_DIR="E:\\AllStrata\\GEOCml10clip_desc" # Output directories CLIP_DIR="E:\\AllStrata\\GEOCml10clip_3counties" TS_DIR="E:\\AllStrata\\TS_3counties" # Bounding box: Bucks + Beds + Herts with 5km buffer (verified from postcodes) CLIP_BOX="-1.04/0.04/51.52/52.3" LOG="C:\\Users\\Administrator\\Documents\\AllStrata\\three_counties.log" log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG" } log "==========================================" log "Three Counties Processing Pipeline" log "Clip box: $CLIP_BOX" log "==========================================" # ============================================================ # STEP 05: Clip to three counties # ============================================================ log "" log "[STEP 05] Clipping to Bucks + Beds + Herts" # Clean any previous attempt rm -rf "$CLIP_DIR" "$TS_DIR" $PYTHON "C:\\Users\\Administrator\\LiCSBAS\\bin\\LiCSBAS05op_clip_unw.py" \ -i "$SRC_DIR" \ -o "$CLIP_DIR" \ -g "$CLIP_BOX" \ --n_para 1 2>&1 | tee -a "$LOG" # --- VALIDATE STEP 05 --- log "" log "[VALIDATE 05] Checking clip output..." # Check EQA.dem_par exists and has correct dimensions if [ ! -f "$CLIP_DIR/EQA.dem_par" ]; then log "[FAIL] No EQA.dem_par — clip failed" exit 1 fi # Verify grid dimensions match expected EXPECTED_W=1080 EXPECTED_H=779 ACTUAL_W=$(grep "^width:" "$CLIP_DIR/EQA.dem_par" | awk '{print $2}') ACTUAL_H=$(grep "^nlines:" "$CLIP_DIR/EQA.dem_par" | awk '{print $2}') log " Grid size: ${ACTUAL_W} x ${ACTUAL_H} (expected ~${EXPECTED_W} x ${EXPECTED_H})" if [ "$ACTUAL_W" -lt 500 ] || [ "$ACTUAL_H" -lt 500 ]; then log "[FAIL] Grid too small — clip bounds wrong?" exit 1 fi # Count clipped IFG directories N_IFGS=$(ls -d "$CLIP_DIR"/20*/ 2>/dev/null | wc -l) log " IFG directories: $N_IFGS" if [ "$N_IFGS" -lt 1000 ]; then log "[FAIL] Too few IFGs ($N_IFGS). Expected ~1900+" exit 1 fi # Check a sample IFG has the right file size SAMPLE_DIR=$(ls -d "$CLIP_DIR"/20*/ 2>/dev/null | head -1) SAMPLE_UNW=$(ls "$SAMPLE_DIR"/*.unw 2>/dev/null | head -1) if [ -z "$SAMPLE_UNW" ]; then log "[FAIL] No .unw file in sample IFG directory" exit 1 fi SAMPLE_SIZE=$(stat -c %s "$SAMPLE_UNW" 2>/dev/null || wc -c < "$SAMPLE_UNW") EXPECTED_SIZE=$((ACTUAL_W * ACTUAL_H * 4)) # float32 = 4 bytes log " Sample unw size: $SAMPLE_SIZE bytes (expected: $EXPECTED_SIZE)" if [ "$SAMPLE_SIZE" -ne "$EXPECTED_SIZE" ]; then log "[WARN] Sample unw size doesn't match expected grid dimensions" fi log "[VALIDATE 05] PASSED" log " Clipped data: $(du -sh "$CLIP_DIR" | awk '{print $1}')" # ============================================================ # STEP 11: Check interferogram quality # ============================================================ log "" log "[STEP 11] Check interferogram quality" $PYTHON "C:\\Users\\Administrator\\LiCSBAS\\bin\\LiCSBAS11_check_unw.py" \ -d "$CLIP_DIR" \ -t "$TS_DIR" \ -c 0.05 2>&1 | tee -a "$LOG" # --- VALIDATE STEP 11 --- log "" log "[VALIDATE 11] Checking step 11 output..." if [ ! -d "$TS_DIR/info" ]; then log "[FAIL] No info directory created" exit 1 fi if [ ! -f "$TS_DIR/info/11ifg_stats.txt" ]; then log "[FAIL] No 11ifg_stats.txt" exit 1 fi N_BAD_11=$(wc -l < "$TS_DIR/info/11bad_ifg.txt" 2>/dev/null || echo 0) N_REMOVED_11=$(wc -l < "$TS_DIR/info/11removed_image.txt" 2>/dev/null || echo 0) N_VALID=$(head -1 "$TS_DIR/info/11ifg_stats.txt" | grep -oP 'n_valid: \K\d+') log " Bad IFGs: $N_BAD_11" log " Removed images: $N_REMOVED_11" log " Valid pixels: $N_VALID" if [ -z "$N_VALID" ] || [ "$N_VALID" -lt 10000 ]; then log "[FAIL] Too few valid pixels ($N_VALID). Data may be corrupted." exit 1 fi log "[VALIDATE 11] PASSED" # ============================================================ # STEP 12: Loop closure # ============================================================ log "" log "[STEP 12] Loop closure check" $PYTHON "C:\\Users\\Administrator\\LiCSBAS\\bin\\LiCSBAS12_loop_closure.py" \ -d "$CLIP_DIR" \ -t "$TS_DIR" 2>&1 | tee -a "$LOG" # --- VALIDATE STEP 12 --- log "" log "[VALIDATE 12] Checking step 12 output..." N_BAD_12=$(wc -l < "$TS_DIR/info/12bad_ifg.txt" 2>/dev/null || echo 0) N_REMOVED_12=$(wc -l < "$TS_DIR/info/12removed_image.txt" 2>/dev/null || echo 0) log " Bad IFGs (loop closure): $N_BAD_12" log " Removed images: $N_REMOVED_12" # Check network plots were generated if ls "$TS_DIR/network/network12"* 1>/dev/null 2>&1; then log " Network plots: generated" else log " [WARN] No network12 plots (may be OK if no removals)" fi log "[VALIDATE 12] PASSED" # ============================================================ # STEP 13: NSBAS inversion # ============================================================ log "" log "[STEP 13] NSBAS time series inversion" log " This is the heavy step — estimated 2-4 hours" $PYTHON "C:\\Users\\Administrator\\LiCSBAS\\bin\\LiCSBAS13_sb_inv.py" \ -d "$CLIP_DIR" \ -t "$TS_DIR" 2>&1 | tee -a "$LOG" # --- VALIDATE STEP 13 --- log "" log "[VALIDATE 13] Checking step 13 output..." if [ ! -f "$TS_DIR/cum.h5" ]; then log "[FAIL] No cum.h5 — inversion failed" exit 1 fi CUM_SIZE=$(du -sh "$TS_DIR/cum.h5" | awk '{print $1}') log " cum.h5: $CUM_SIZE" # Verify cum.h5 is a valid HDF5 with expected datasets $PYTHON -c " import h5py import numpy as np with h5py.File(r'$TS_DIR/cum.h5', 'r') as f: print(' HDF5 datasets:', list(f.keys())) if 'cum' in f: shape = f['cum'].shape print(f' cum shape: {shape}') print(f' Epochs: {shape[0]}') print(f' Grid: {shape[1]} x {shape[2]}') # Check it's not all NaN sample = f['cum'][-1, :, :] valid = np.count_nonzero(~np.isnan(sample)) total = sample.size print(f' Valid pixels (last epoch): {valid}/{total} ({valid/total*100:.1f}%)') if 'imdates' in f: dates = f['imdates'][:] print(f' Date range: {dates[0]} to {dates[-1]}') " 2>&1 | tee -a "$LOG" # Check velocity file if [ -f "$TS_DIR/results/vel" ] || [ -f "$TS_DIR/vel" ]; then log " Velocity file: exists" else log " [WARN] No velocity file found" fi log "[VALIDATE 13] PASSED" # ============================================================ # SUMMARY # ============================================================ log "" log "==========================================" log "THREE COUNTIES PROCESSING COMPLETE" log "Finished: $(date)" log "==========================================" log "Output: $TS_DIR" log "Size: $(du -sh "$TS_DIR" | awk '{print $1}')" log "" log "Disk:" df -h / /e | grep -v Filesystem | tee -a "$LOG"