U
     c                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZmZmZmZ d dlmZmZmZ d dlmZmZmZ d dlmZ d dlmZ d	d
ddddddgZdddgZddddddZddddZddd d!d"d#Z d$d%d&d%d&d'd(d)d*d+d,
Z!d-"ej#ej$ej%Z&ed.Z'd/Z(d0Z)dLd1d2Z*dMd3d4Z+d5d6 Z,d7d8 Z-d9d: Z.dNd;d<Z/d=d> Z0d?d@ Z1dOdCdDZ2dEdF Z3dGdH Z4dPdIdJZ5e6dKkre5ej7dBd  dS )Q    N)	auto_path)get_template_content)geometryDatasetNamesgeometryifgramDatasetNamesifgramStacksensor)geometryDictifgramStackDict
ifgramDict)readfileptimeutils)create_argument_parser)subsetisceariahyp3gmtsarsnapgammaroipaccosicorrunwrapPhaserangeOffsetazimuthOffsetmintpy.load.unwFilemintpy.load.corFilemintpy.load.connCompFilezmintpy.load.intFilezmintpy.load.magFile)r   	coherenceconnectComponent	wrapPhase	magnitudemintpy.load.ionUnwFilezmintpy.load.ionCorFilezmintpy.load.ionConnCompFile)r   r   r    mintpy.load.azOffFilezmintpy.load.azOffStdFilemintpy.load.rgOffFilezmintpy.load.rgOffStdFilezmintpy.load.offSnrFile)r   azimuthOffsetStdr   rangeOffsetStd	offsetSNRmintpy.load.demFilemintpy.load.lookupYFilemintpy.load.lookupXFilemintpy.load.incAngleFilemintpy.load.azAngleFilezmintpy.load.shadowMaskFilemintpy.load.waterMaskFilezmintpy.load.bperpFile)
heightlatitude	longitudeazimuthCoord
rangeCoordincidenceAngleazimuthAngle
shadowMask	waterMaskbperpzMtemplate:
########## 1. Load Data (--load to exit after this step)
{}

{}

{}	load_dataaI  NOTE:
  For interferogram, unwrapPhase is required, the other dataset are optional, including coherence, connectComponent, wrapPhase, etc.
  The unwrapPhase metadata file requires DATE12 attribute in YYMMDD-YYMMDD format.
  All path of data file must contain the reference and secondary date, either in file name or folder name.
a  example:
  # MUST run in the mintpy working directory!

  # show example template file for ISCE/ROI_PAC/GAMMA products
  load_data.py -H

  # load & write the following HDF5 files:
  # ./inputs/ifgramStack.h5   for interferogram        stack
  # ./inputs/ionStack.h5      for ionosphere           stack
  # ./inputs/offsetStack.h5   for range/azimuth offset stack
  # ./inputs/geometryRadar.h5 for geometry in radar coordinates
  # ./inputs/geometryGeo.h5   for geometry in geo   coordinates
  load_data.py -t smallbaselineApp.cfg
  load_data.py -t smallbaselineApp.cfg GalapagosSenDT128.txt --project GalapagosSenDT128

  # load geometry ONLY
  smallbaselineApp.py SaltonSeaSenDT173.txt -g
  load_data.py -t smallbaselineApp.cfg --geom
c                 C   s   d}t d t d t }tdd }t||||| d}|jdddd	d
 |jdddtddd |jdddddd
 |jdtddd |jdtdtddd |jddd d!d"d
 |jd#d$d%d&hd&d'd( |S ))zCreate command line parser.z+Load stacks of interferograms to HDF5 files
.)synopsisdescriptionepilog
subparsersz-Hprint_example_template
store_truez1Print/Show the example template file for loading.)destactionhelpz-t
--templatetemplate_file+z template file(s) with path info.)rC   typenargsrE   z--geomz
--geometryonly_load_geometryzLoad the geometry file(s) ONLY.z	--projectPROJECT_NAMEz0project name of dataset for INSARMAPS Web Viewer)rI   rC   rE   z--processor	processorz$InSAR processor/software of the filer   )rI   rC   choicesrE   defaultz	--enforce-f
updateModestore_falsezADisable the update mode, or skip checking dataset already loaded.--compressiongziplzfNz@compress loaded geometry while writing HDF5 file, default: None.)rN   rO   rE   )	TEMPLATENOTEEXAMPLE__name__splitr   add_argumentstrPROCESSOR_LIST)r@   r=   r?   nameparser r`   G/home/exouser/operations/rsmas_insar/sources/MintPy/mintpy/load_data.pycreate_parserr   sB        

 rb   c                 C   sv   t  }|j| d}|jrnX|jr4tt td n>|  td	t
jt td	t
jt td |S )zCommand line parser.)argsr   zI{}: error: one of the following arguments are required: -t/--template, -Hz'{} -H to show the example template file   )rb   
parse_argsrG   rA   printDEFAULT_TEMPLATEsysexitprint_usageformatospathbasename__file__)iargsr_   inpsr`   r`   ra   cmd_line_parse   s    

rr   c                    s6  t | }d|d< i }| jD ]"}t|}t|}|| q| D ]\}}|||< qFd| krp|d |d< d  fdd| D }|D ]B}| |  }|dkr| |  ||< q|r| |  | | < qt	d	
|d  |d
 dkrd|d
< d  fdd| D }|D ],}| |  }|dkr| |  ||< qt|dd|d< t|dd|d< t|dd|d< |d sdd t| jD }t|d |d< d}	tt|d d }
|
r|	t|
7 }	t|
|d< n|	d
|d 7 }	t	|	 |ddr2t	d tj|d t |d}|S )a  Read input Namespace object info into iDict.

    It grab the following contents into iDict
    1. inps & all template files
    2. configurations: processor, autoPath, updateMode, compression, x/ystep
    3. extra metadata: PLATFORM, PROJECT_NAME,
    4. translate autoPath

    Parameters: inps  - namespace, input arguments from command line & template file
    Returns:    iDict - dict,      input arguments from command line & template file
    NPLATFORMrM   zmintpy.load.processormintpy.load.c                    s$   g | ]}|  r| d  qS rd   
startswithrZ   .0iprefixr`   ra   
<listcomp>   s     
 z"read_inps2dict.<locals>.<listcomp>)rM   autoPathrQ   compressionzprocessor : {}r   Fzmintpy.multilook.c                    s$   g | ]}|  r| d  qS ru   rv   rx   r{   r`   ra   r}      s     
 )xstepystepmethodr   rd   r   r   nearestrL   c                 S   s    g | ]}t j|d kr|qS zsmallbaselineApp.cfg)rl   rm   rn   rx   r`   r`   ra   r}      s      zSAR platform/sensor : r   zunknown from project name "{}"r~   zFuse auto path defined in mintpy.defaults.auto_path for options in auto)rM   work_dirtemplate)varsrG   r   read_templateutcheck_template_auto_valueupdateitemskeysrf   rk   intgetr\   listr   project_name2sensor_namer   Zget_auto_pathrl   getcwd)rq   iDictr   fnametempkeyvaluekey_listcfilemsgsensor_namer`   r{   ra   read_inps2dict   s`    






r   c                 C   s  d| d< d| d< t | d d \}}tt| d }tt| d }t|dkrtt|dkrt|d |d g}nd}t| d }t|dkrt|d }nt }d	| krd
nd}|| d< |r|s|dkrd}t	d t	d |s"|s"| d dkrt
| d }	t|	}|s"| S t
j||d}
|dk	r\|
|}|
|}t	d| t	d| d}|dk	rt|d }|sd	| kr|
|}t
||}t	d| || d< |r|n|| d< | S )a  read the following items:
    geocoded - bool, if the stack of observations geocoded or not
    box      - tuple of 4 int, pixel box for stackObj and geomRadarObj, for obs in geo & radar coordinates
    box4geo  - tuple of 4 int, pixel box for geomGeoObj, box4geo is the same as box, except for:
               obs in radar coordinate with lookup table [for gamma and roipac], where box4geo is
               the geo bounding box of the box above.
    Nboxbox4georG   r   r*   r+   r)   Y_FIRSTTFgeocodedzgWARNING: mintpy.subset.lalo is not supported if 1) no lookup file AND    2) radar/unkonwn coded datasetz	ignore it and continue.rM   r   r   )lookup_filez*input bounding box of interest in lalo: {}z#box to read for datasets in y/x: {}z/box to read for geocoded lookup file in y/x: {})r   Zread_subset_template2boxglobr\   lenr   read_attributedictr   rf   r   get_file_list'update_box4files_with_inconsistent_size
coordinatebbox_geo2radarcheck_box_within_data_coveragerk   bbox_radar2geo)r   pix_boxgeo_boxZlookup_y_filesZlookup_x_filesr   Z	dem_filesatrr   fnamescoordZbox4geo_lutZatrLutr`   r`   ra   read_subset_box   sP    	




r   c           	      C   s  dd | D }dd |D }dd |D }t dd ||fD rt|}t|}dd||f}d}|d	7 }|d
||7 }|d7 }|d7 }tt| D ]>}|| |ks|| |kr|d|| d || || 7 }q|d7 }|d7 }|d7 }|d7 }|d7 }|d7 }t| nd}|S )aV  Check the size (row / column number) of a list of files
    For SNAP geocoded products has one line missing in some interferograms, Andre, 2019-07-16
    Parameters: fnames  - list of path for interferogram files
    Returns:    pix_box - None if all files are in same size
                          (0, 0, min_width, min_length) if not.
    c                 S   s   g | ]}t |qS r`   r   r   ry   r   r`   r`   ra   r}   E  s     z;update_box4files_with_inconsistent_size.<locals>.<listcomp>c                 S   s   g | ]}t |d  qS LENGTHr   ry   r   r`   r`   ra   r}   F  s     c                 S   s   g | ]}t |d  qS WIDTHr   r   r`   r`   ra   r}   G  s     c                 s   s   | ]}t t|V  qd S Nr   setrx   r`   r`   ra   	<genexpr>H  s     z:update_box4files_with_inconsistent_size.<locals>.<genexpr>r   Q
********************************************************************************Q
WARNING: NOT all input unwrapped interferograms have the same row/column number!z
Minimum size is: ({}, {})
------------------------------)
The following dates have different size:
	{}	({}, {})DATE12z(
Assuming the interferograms above have:z 
	extra line(s) at the bottom ORz
	extra column(s) at the rightz8
Continue to load data using subset of the minimum size.R
********************************************************************************
N)anyminrk   ranger   rf   )	r   atr_listlength_list
width_listZ
min_length	min_widthr   r   rz   r`   r`   ra   r   >  s0    $
r   c                    s  dd | | D }dd |D }dd |D }d}t dd ||fD r|dkrVd	}n,|d
d \}}|t|ks~|t|krd	}|rt|}	t|}
d}|d7 }|d|	|
7 }|d7 }|d7 }t|  }dd |D }d}tt|D ]}|| |	ks|| |
kr|| }t	
|d |D ]<} fdd| | D }t|dkr,| | |d  q,|d||| || 7 }|d7 }q|d7 }|d|7 }|dt|| 7 }|d7 }t| | S )z?Skip files by removing the file path from the input dsPathDict.c                 S   s   g | ]}t |qS r`   r   r   r`   r`   ra   r}   f  s     z5skip_files_with_inconsistent_size.<locals>.<listcomp>c                 S   s   g | ]}t |d  qS r   r   r   r`   r`   ra   r}   g  s     c                 S   s   g | ]}t |d  qS r   r   r   r`   r`   ra   r}   h  s     Fc                 s   s   | ]}t t|d kV  qdS )rd   Nr   )ry   	size_listr`   r`   ra   r   l  s     z4skip_files_with_inconsistent_size.<locals>.<genexpr>NT      r   r   z"
The most common size is: ({}, {})r   r   c                 S   s   g | ]}|d  qS )r   r`   r   r`   r`   ra   r}     s     r   -c                    s&   g | ] t  fd dD r qS )c                 3   s   | ]}|d d  kV  qdS )r      Nr`   )ry   drz   r`   ra   r     s     z?skip_files_with_inconsistent_size.<locals>.<listcomp>.<genexpr>allry   datesr   ra   r}     s    r   rd   z,
Skip loading the above interferograms ({}).z/
Continue to load the rest interferograms ({}).r   )r   r   r   most_commonrk   r   r   r   r   r   yyyymmddrZ   removerf   )
dsPathDictr   dsNamer   r   r   Zdrop_inconsistent_filesZmax_box_widthZmax_box_lengthZcommon_lengthZcommon_widthr   dsNamesdate12_listZnum_droprz   Zdate12r   r`   r   ra   !skip_files_with_inconsistent_sized  sJ    


r   c                    s  | d rdS d  krd}n"d  kr0d}nd  kr@d}td	 td
| d td tdd t D }i fddtD D ]`}| }||  krttt| | }t	|dkr||< t|d| d| |   qfddt
D }fdd|D }t	|dkr>td| d| d dS |d }t| d |di }	 D ]6}t	| }
|
|	|< td|d| d|
  qdt|	  tfddD rd}|d7 }t| t }i }t| D ]\}}t|d d d!d!| d" d#kr:tjtj| nd i }|D ]}| | tfd$dD s~ r kr||< nF fd%d| D }t	|dkr|d ||< ntd&| qFt|d'}t}||t|< qt	|dkrt||d(}nd}|S ))a=  Read input arguments into ifgramStackDict object.

    Parameters: iDict                - dict, input arguments from command line & template file
                ds_name2template_key - dict, to relate the HDF5 dataset name to the template key
    Returns:    stackObj             - ifgramStackDict object or None
    rK   Nr   Zinterferogramr#   Z
ionospherer$   offset2--------------------------------------------------z
searching z pairs infoinput data files:c                 S   s   g | ]}t |qS r`   r   rx   r`   r`   ra   r}     s     z;read_inps_dict2ifgram_stack_dict_object.<locals>.<listcomp>c                    s   g | ]}|   kr|qS r`   r   rx   ds_name2template_keyr`   ra   r}     s      r   <: c                    s   g | ]}|   kr|qS r`   r   ry   xr   r`   ra   r}     s      c                    s   g | ]}|   kr|qS r`   r   rx   )r   r`   ra   r}     s      z7WARNING: No data files found for the required dataset: z! Skip loading for z stack.r   )r   r   r   z
number of c                 3   s   | ]}| d  kV  qdS )r   Nr`   rx   )	dsNumListr`   ra   r     s     z:read_inps_dict2ifgram_stack_dict_object.<locals>.<genexpr>z@WARNING: NOT all types of dataset have the same number of files.z8 -> skip interferograms with missing files and continue.r   _r   rM   r   c                 3   s   | ]}| kV  qd S r   r`   ry   Zd6)dsPath1r`   ra   r     s     c                    s2   g | ]* t  fd dD s*rkr qS )c                 3   s   | ]}| kV  qd S r   r`   r   pr`   ra   r     s     zEread_inps_dict2ifgram_stack_dict_object.<locals>.<listcomp>.<genexpr>r   r   )	date12MJDdate6sr   r   ra   r}     s
     z(WARNING: {:>18} file missing for pair {})datasetDict)	pairsDictdsName0)valuesrf   maxr   r   r   sortedr   r\   r   OBS_DSET_NAMESr   r   	enumerater   r   replacerZ   rl   rm   rn   dirnamer   rk   r   r   r   tupler
   )r   r   Zobs_type	max_digitr   r   filesZdsName0sr   Z	dsNumDictZnum_filer   
dsNameListr   rz   ZdsPath0ZifgramPathDictZdsPath2Z	ifgramObjZdate8sZstackObjr`   )r   r   r   r   r   r   ra   'read_inps_dict2ifgram_stack_dict_object  s      



r  c              	      s  | d dkr"  d   d nB| d dkrD  d   d n | d dkrRntd	| d  td
 td td tdd t  D }i } fddtD D ]} | }||  krttt	| | }t
|dkr|dkrbi }|D ]&}ttjtj|}	|||	< q|||< t|d| d| |   tdt
t|   q|d ||< t|d| d|d   qtd }
|
| krtd|
 d}d}tD ]^}tt|  |  }t
|dkrt|d }d| kr| }n| } qqt| }i }i }|D ]b}|dkr`ttt||  }nt|| }d| kr|| ||< n|| ||< q6d}d}t
|dkrt| d ||d}t
|dkrt| d ||d}||fS )a.  Read input arguments into geometryDict object(s).

    Parameters: iDict        - dict, input arguments from command line & template file
    Returns:    geomGeoObj   - geometryDict object in geo   coordinates or None
                geomRadarObj - geometryDict object in radar coordinates or None
    rM   )r   dorisr2   r3   )r   r   r0   r1   )r   r   r   r   r   z!Un-recognized InSAR processor: {}r   zsearching geometry files infor   c                 S   s   g | ]}t |qS r`   r   rx   r`   r`   ra   r}   5  s     z7read_inps_dict2geometry_dict_object.<locals>.<listcomp>c                    s   g | ]}|   kr|qS r`   r   rx   dset_name2template_keyr`   ra   r}   7  s      r   r8   r   r   znumber of bperp files: z(WARNING: No reqired {} data files found!Nr   )rM   r   ZextraMetadata)poprf   rk   r   r   r   r   r   r   r\   r   r   r   rl   rm   rn   r   r   r   r   copynextiterr   r	   )r   r  r   r   r   r   r   Z	bperpDictfiledater   Z
obsMetaGeoZobsMetaRadarZobsNameZobsFilesr   r   ZdsGeoPathDictZdsRadarPathDictZ
geomGeoObjZgeomRadarObjr`   r  ra   #read_inps_dict2geometry_dict_object  s    	



 


r  Trd   c                 C   sf  d}|sd}|S |s|S t j| dddkrbt|||d}|jdkr|jf d|i|dd	 }	| }
| }t| }|jd
d |j	|j
f}|j}|j}||	krt|
t|rt|t|rtdtj|  d}n~|jdkrb|jf |}	| }
t| }|jd
d |j	|j
f}|j}||	krbt|
t|rbtdtj|  d}|S )a  Check if re-writing is necessary.

    Do not write HDF5 file if ALL the following meet:
        1. HDF5 file exists and is readable,
        2. HDF5 file constains all the datasets and in the same size
        3. For ifgramStackDict, HDF5 file contains all date12.

    Parameters: outFile    - str, path to the output HDF5 file
                inObj      - ifgramStackDict or geometryDict, object to write
                box        - tuple of int, bounding box in (x0, y0, x1, y1)
                updateMode - bool
                x/ystep    - int
                geom_obj   - geometryDict object or None, for ionosphere only
    Returns:    flag       - str, run or skip
    runskipT)check_readable)r   r   r   r   geom_objrd   NF)	print_msgzNAll date12   exists in file {} with same size as required, no need to re-load.r   zNAll datasets exists in file {} with same size as required, no need to re-load.)r   run_or_skipr   r^   get_sizeget_dataset_listget_date12_listr   openlengthwidthdatasetNames
date12Listr   issubsetrf   rk   rl   rm   rn   r   )outFileZinObjr   rQ   r   r   r  flagkwargsZin_sizeZin_dset_listZin_date12_listZoutObjout_sizeZout_dset_listZout_date12_listr`   r`   ra   r  z  sR    



r  c              	      s    d }d |}td td | |dkrV|dkrHddlm} nV|d	kr^dd
lm} n@|dkrtddlm} n*|dkrddlm} n|dkrddlm} dd   D D ]}t	t

t | dkrd tj|jdd } | g}|dkr  d r |d d  g7 }n|dkr:|d d g7 }t|| || qn|dkrddlm} ddlm}m} tt

 d }	t	|	dkr|	d }
ntd  d  d}
 d }tj d  }d!d"d#d$g} fd%d|D }d&d |D }d'd(d)d*d+d,d-g}d.d |D } fd/d|D }d0|
d1|g}|rR|d2|g7 }t	|dkrn|d3g| 7 }|r|d4g| 7 }t|| z|| W n   td5 Y nX tj|
r||
d6krtjtjtj|
d7}tj|r|j t! |d8d9 n|d:kr`dd;lm"} d<d  d= D }t	|dkrV|d }n d= d }d>|g}d!d!d?d@d dAdBdCdD}|# D ]t\}} $|d}| dEkr|%dFr||tj|g7 }n.|%dGr||tj|g7 }n|||g7 }q dH r|dI dH g7 } dJ r,|dKg7 }t|| z|| W n   tdL Y nX n|dMkrddNlm&} dOd  d= D }t	|dkrt'dP|d g}t|| z|| W n   tdQ Y nX n dR |}|dS t(7 }t)|dTS )Uz7Prepare metadata via prep_{insar_processor}.py scripts.rM   z
prep_{}.pyr   z&prepare metadata files for {} products)r   r   r   r   r   r   r   )
prep_gammar   )	prep_hyp3r   )prep_roipacr   )	prep_snapr   )prep_cosicorrc                 S   s,   g | ]$}| d r|dr|dkr|qS )rt   Filemintpy.load.metaFile)rw   endswithrx   r`   r`   ra   r}     s
    

z$prepare_metadata.<locals>.<listcomp>z{}.pyr;   r<   rs   z--sensorz
--metadatar%  r   )	prep_isce)s1_utils
isce_utilsz No input metadata file found: {}autozmintpy.load.baselineDirr)   r   r#   r%   r$   c                    s$   g | ]} |   d kr | qS )r*  )lowerry   r   r   r`   ra   r}     s      c                 S   s"   g | ]}t t|d kr|qS )r   )r   r   r   r`   r`   ra   r}     s      demZlookupYZlookupXZincAngleZazAngler6   r7   c                 S   s   g | ]}d  |qS )zmintpy.load.{}File)rk   rx   r`   r`   ra   r}     s     c                    s,   g | ]$}  |d dkrtj | qS )r*  )r*  NonenoNF)r   rl   rm   rn   r,  r-  r`   ra   r}      s    z-mz-gz-brP   z--geom-filesz?prep_isce.py failed. Assuming its result exists and continue...Z	topsStackzSAFE_files.txtT)
mintpy_dirsafe_list_filer  r   )	prep_ariac                 S   s   g | ]}| d r|qS r   r&  r   r`   r`   ra   r}   !  s    
rG   rF   r   r   r,   r-   r.   )z--stack-dirz--unwrap-stack-namez--coherence-stack-namez--conn-comp-stack-namez--demz--incidence-anglez--azimuth-anglez--water-mask)r*  r0  nonedirr^   r   rS   rQ   z--updatez?prep_aria.py failed. Assuming its result exists and continue...r   )prep_gmtsarc                 S   s   g | ]}| d s|qS r   r4  r   r`   r`   ra   r}   P  s    
z:Custom template file NOT found and is required for GMTSAR!zAprep_gmtsar.py failed. Assuming its result exists and continue...z!un-recognized InSAR processor: {}z
supported processors: {}N)*rk   rf   mintpyr  r   r!  r"  r#  r   r   r   r\   rl   rm   rn   rY   rZ   r+  r   print_command_linemainr'  mintpy.utilsr(  r)  r   warningswarnr   isfileZget_processorjoinZget_s1ab_date_list_filer   r3  r   r   r&  r7  FileExistsErrorr]   
ValueError)r   rM   script_nameZprep_moduler   rp   r'  r(  r)  Z
meta_filesZ	meta_fileZbaseline_dirZgeom_dirZobs_keysZ	obs_pathsZ
geom_namesZ	geom_keysZ
geom_filesr2  r3  Zdefault_temp_files	temp_fileZARG2OPT_DICTarg_nameZopt_name	arg_valuer7  Zcustom_temp_filesr   r`   r-  ra   prepare_metadata  s    














rF  c                 C   sJ   i }dd |   D }|D ]*}| | }|dkr<|rD|||< q|||< q|S )aH  Extra metadata with key names in MACRO_CASE to be written into stack file.

    Parameters: iDict     - dict, input arguments from command lines & template file
                extraDict - dict, extra metadata from template file:
                            E.g. PROJECT_NAME, PLATFORM, ORBIT_DIRECTION, SUBSET_X/YMIN, etc.
    c                 S   s   g | ]}|  r|qS r`   )isupperrx   r`   r`   ra   r}   n  s      z&get_extra_metadata.<locals>.<listcomp>)rL   rs   r   )r   	extraDictZ
upper_keysr   r   r`   r`   ra   get_extra_metadatae  s    

rI  c                 C   sB  t | }t }t|}t| t|}|d dkr8d S td td|d  td|d  td|d	 |d
  td|d  t|d |d	 |d
 d}t|}t	t
t}t||\}}tjd}	tjd}
t|	||d f|dkr|j|	d|d |d	 |d
 dd t|
||d f|dkrZ|j|
d|d |d	 |d
 d|d t
ttg}dddg}dd |D }t||D ]\}}t||}d }tj|dr|d r|n|}t|||d fd|i|dkr|j|d|d |d	 |d
 |d |d ||d	 qtt | d \}}td!|| d S )"NrM   r   r   zupdateMode : {}rQ   zcompression: {}r   zmultilook x/ystep: {}/{}r   r   zmultilook method : {}r   )rQ   r   r   z./inputs/geometryGeo.h5z./inputs/geometryRadar.h5r   r  wrU   )
outputFileaccess_moder   r   r   r   r   )rK  rL  r   r   r   r   extra_metadatazifgramStack.h5zionStack.h5zoffsetStack.h5c                 S   s"   g | ]}t jt jd |qS )z./inputs)rl   rm   abspathr?  r   r`   r`   ra   r}     s     zmain.<locals>.<listcomp>ionr   r  )	rK  rL  r   r   r   Z
mli_methodr   rM  r  <   z(time used: {:02.0f} mins {:02.1f} secs.
)rr   timer   rF  rI  rf   rk   r   r   GEOM_DSET_NAME2TEMPLATE_KEYIFG_DSET_NAME2TEMPLATE_KEYOFF_DSET_NAME2TEMPLATE_KEYr  rl   rm   rN  r  
write2hdf5ION_DSET_NAME2TEMPLATE_KEYzipr  rn   rw   divmod)rp   rq   
start_timer   rH  r  Zgeom_dset_name2template_keyZgeom_geo_objZgeom_radar_objZgeom_geo_fileZgeom_radar_fileZstack_ds_name2tmpl_key_listZstack_filesZds_name2tmpl_opt
stack_file	stack_objr  msr`   r`   ra   r:  z  s    

"
r:  __main__)N)N)Nr   )Trd   rd   N)N)8rl   rh   r   rQ  r<  Zmintpy.defaultsr   mintpy.defaults.templater   mintpy.objectsr   r   r   r   r   Zmintpy.objects.stackDictr	   r
   r   r;  r   r   r   r   mintpy.utils.arg_utilsr   r8  r   r]   r   rS  rV  rT  rR  rk   ZAUTO_PATH_GAMMAZAUTO_PATH_ISCE_STRIPMAPZAUTO_PATH_ISCE_TOPSrg   rV   rW   rX   rb   rr   r   r   r   r   r  r  r  rF  rI  r:  rY   argvr`   r`   r`   ra   <module>	   s   
		


MK&
5 a
C )
_
