# Miaplpy Processing Note 分散式散射點演算法 Miaplpy([MIAmi Phase Linking in PYthon](https://github.com/insarlab/MiaplPy))為分散式散射體(Distributed scatters, DS)的InSAR地表變位架構。 其運算以Mintpy基礎,新增了相位連結法(Phase linking),估計分散式散射點,提供更高覆蓋的地表變位(成果好壞筆者認為見仁見智)。 相關筆記本如附: :::info 參考筆記: - ISCE-TOPS stack https://hackmd.io/NfHR48A1Q8u2LiceJH84OQ - mintpy https://hackmd.io/oPMP3nM7QD-woHP_KjN4BA ::: ## Installation 安裝 需要與mintpy安裝於同一個環境及版本需求,須注意相容性問題。 ## Step 1-1: Prepare coregistration stack 準備資料 * 首先我們採用ISCE來進行影像配準(Coregistration)作業,與Mintpy不同,這邊需要建立slc stack而非interferogram stack,可以參考上面提到的TOPS stacks workflow。 * 但miaplpy的基線資料不來自merged/baselines,所以如果即使執行了interferogram workflow,還是可以直接執行miaplpy,無須重新執行 * 建議建立project的資料夾含有Sen字段,後續miaplpyApp才能夠自動判斷衛星種類 * 如果需要節省資料儲存空間,於stackSentinel.py 可加入 `-V true`的指令,對miaplpy沒有影響。 * 完成後可以獲得資料夾結構如下: ``` merged ├── baselines │   ├── 20150116 │  ...  ├── 20150116 │       ├── 20150116.full.vrt │      ├── 20150116.vrt │      └── 20150116.xml │ ├── geom_reference │ ├── lat.rdr.full ... │ ├── lon.rdr.full ... │ ├── los.rdr.full ... │ └── shadowMask.rdr.full ... │ └── SLC ├── 20221229 ... ├── 20221229.slc.full ├── 20221229.slc.full.aux.xml ├── 20221229.slc.full.vrt ├── 20221229.slc.full.xml └── 20221229.slc.hdr      ``` ## step 1-2 crop SLC stack 裁減分析範圍 - 裁減方法1: 於miaplpyApp.cfg之load_data中指定subset。 - 裁減方法2: 可以參考本篇筆記 step 1 https://hackmd.io/Je0fJkX_TsS1nqCoaW2bwA ## step 2: miaplpy comfiguration file 建立專案檔 - 可以透過miaplpyApp -H 來獲得template(包含下述兩個專案檔)。 - 需要建立"兩個"檔案(不可以放同一個): miaplpyApp.cfg, smallbaselinesApp.cfg,內容如template所示,檔名不建議自訂。 - maiplpyApp.cfg有2處要改(其他則是看需求) 1. 專案檔路徑: 基本上與mintpy相同 2. phase linking方法: 基本上也不需要更動 - 統計方法(Default: anderson-darling test) - 統計窗函數大小 - 相位估計方式: EMI、EVD、PTA、...(論文建議最佳為Sequential-EMI) 3. 時間序列分析方法: - 干涉對分析方式:single reference (Default)、mini-stack、sequential、delauney (建議可改為mini-stack或sequential) - filter strength: 尚未確定效果,可加可不佳(因為phase linking 本身可以視為一種濾波器) - smallbaselineApp.cfg 同mintpy,改需要的參數即可。 下列$PROJECT請代換為自訂之路徑: ```bash= miaplpy.load.processor = auto #[isce,snap,gamma,roipac], auto for isceTops miaplpy.load.updateMode = auto #[yes / no], auto for yes, skip re-loading if HDF5 files are complete miaplpy.load.compression = no #[gzip / lzf / no], auto for no. miaplpy.load.autoPath = no # [yes, no] auto for no ##---------Coregistered SLC images: miaplpy.load.slcFile = $PROJECT/MERGED/SLC/*/*.slc.full #[path2slc_file] miaplpy.load.startDate = auto #auto for first date miaplpy.load.endDate = auto #auto for last date ##---------for ISCE only: miaplpy.load.metaFile = $PROJECT/reference/IW*.xml #[path2metadata_file], i.e.: ./reference/IW1.xml, ./referenceShelve/data.dat miaplpy.load.baselineDir = $PROJECT/baselines #[path2baseline_dir], i.e.: ./baselines ##---------geometry datasets: miaplpy.load.demFile = $PROJECT/MERGED/geom_reference/hgt.rdr.full #[path2hgt_file] miaplpy.load.lookupYFile = $PROJECT/MERGED/geom_reference/lat.rdr.full #[path2lat_file], not required for geocoded data miaplpy.load.lookupXFile = $PROJECT/MERGED/geom_reference/lon.rdr.full #[path2lon_file], not required for geocoded data miaplpy.load.incAngleFile = $PROJECT/MERGED/geom_reference/los.rdr.full #[path2los_file], optional miaplpy.load.azAngleFile = $PROJECT/MERGED/geom_reference/los.rdr.full #[path2los_file], optional miaplpy.load.shadowMaskFile = $PROJECT/MERGED/geom_reference/shadowMask.rdr.full #[path2shadow_file], optional miaplpy.load.waterMaskFile = auto #[path2water_mask_file], optional ``` ## step 3: run steps 執行 本階段執行基本與mintpy相同(也會解釋一些奇怪的bug),故將著重於解釋個步驟之產品及目的。查看指令說明如下: ```bash= usage: miaplpyApp [-h] [--dir WORKDIR] [-g] [-H] [-v] [--walltime WALL_TIME] [--queue QUEUE] [--jobfiles] [--runfiles] [--tmp] [--start STEP] [--end STEP] [--dostep STEP] [customTemplateFile] Routine Time Series Analysis for MiaplPy positional arguments: customTemplateFile Custom template with option settings. ignored if the default miaplpyApp.cfg is input. optional arguments: -h, --help show this help message and exit --dir WORKDIR, --work-dir WORKDIR Work directory, (default: None). -g Generate default template (if it does not exist) and exit. -H Print the default template file and exit. -v, --version Print software version and exit --walltime WALL_TIME walltime for submitting the script as a job --queue QUEUE Queue name --jobfiles Do not run the tasks, only write job files --runfiles Create run files for all steps --tmp Copy and process on tmp steps processing (start/end/dostep): Command line options for steps processing with names are chosen from the following list: ['load_data', 'phase_linking', 'concatenate_patches', 'generate_ifgram'] ['unwrap_ifgram', 'load_ifgram', 'ifgram_correction', 'invert_network', 'timeseries_correction'] In order to use either --start or --step, it is necessary that a previous run was done using one of the steps options to process at least through the step immediately preceding the starting step of the current run. --start STEP Start processing at the named step, default: load_data --end STEP, --stop STEP End processing at the named step, default: timeseries_correction --dostep STEP Run processing at the named step only ``` #### miaplpy function explaination 1. load_data: - 可能會有錯誤,因為在讀入的過程中呼叫(check monitor output)command line 指令prep_slc_isce.py中的file pattern為 `*.full`但是bash可能會自動帶入當下資料夾中的conf.full - 錯誤來自maiplpyApp.cfg中的slcPath的字段設定為"\*.full"非"\*.slc.full." - 可以`prep_slc_isce.py -f *.full` 改為`prep_slc_isce.py -f "*.full"` 2. phase_linking, concatenate_patches: 估計分散式散射點,時間長,通常沒問題(?) - 完成後產生inverted資料夾 3. generate_ifgram, unwrap_ifgram, load_ifgram: - 完成後產生相當於mintpy中的專案資料夾network_* (根據干涉對連接方式檔名不同,如network_sequential_3、network_single_reference) #### 接下來的步驟均為mintpy 4. ifgram_correction: - 相當於在network_*資料夾中執行`smallbaseline .App --start modify_network --stop correct_unwrap_error` 5. invert_network: - 基本上就是計算時間序列 6. timeseries_correction - 一些剩下的步驟,如geocode、APS、demErr等等。 ## Step4: Postprocessing 可參考mintpy筆記。