B
    .v`'                 @   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mZm	Z	m
Z
 dZdd ZdddZg i fdd	Ze d
dfddZe e d
dfddZdddZedkreejdd  dS )    N)ptimereadfile	writefile
isce_utilsa  example:
  # interferogram stack
  prep_isce.py -d ./merged/interferograms -m ./reference/IW1.xml -b ./baselines -g ./merged/geom_reference      #for topsStack
  prep_isce.py -d ./Igrams -m ./referenceShelve/data.dat -b ./baselines -g ./geom_reference                     #for stripmapStack
  prep_isce.py -m 20120507_slc_crop.xml -g ./geometry                                                           #for stripmapApp
  prep_isce.py -d "pairs/*-*/insar" -m "pairs/*-*/150408.track.xml" -b baseline -g dates_resampled/150408/insar #for alosStack with 150408 as ref date

  # offset stack from topsStack
  prep_isce.py -d ./merged/offsets -f filtAz*.off -m ./reference/IW1.xml -b ./baselines -g ./merged/offsets/geom_reference
c           
   C   s   t jdt jtd} | jddddtddd	d
 | jddddtdgdd | jdddtdddd
 | jdddtddd | jdddtdddd
 | jdd d!d"d# | S )$zCommand line parser.zPrepare ISCE metadata files.)descriptionformatter_classepilogz-dz--ds-dirz
--dset-dirdsetDirNTzThe directory which contains all pairs
e.g.: $PROJECT_DIR/merged/interferograms OR 
      $PROJECT_DIR/pairs/*-*/insar OR 
      $PROJECT_DIR/merged/offsets)desttypedefaultrequiredhelpz-fz--file-pattern+	dsetFilesz
filt_*.unwz=List of observation files, e.g.: filt_fine.unw OR filtAz*.off)nargsr
   r   r   r   z-mz--meta-filemetaFilea"  Metadata file to extract common metada for the stack:
e.g.: for ISCE/topsStack    : reference/IW3.xml;
      for ISCE/stripmapStack: referenceShelve/data.dat;
      for ISCE/alosStack    : pairs/150408-150701/150408.track.xml
          where 150408 is the reference date of stack processingz-bz--baseline-dirbaselineDirz directory with baselines )r
   r   r   r   z-gz--geometry-dirgeometryDirz directory with geometry files z--forceupdate_modestore_falsez+Force to overwrite all .rsc metadata files.)r
   actionr   )argparseArgumentParserRawTextHelpFormatterEXAMPLEadd_argumentstr)parser r   F/home/centos/operations/rsmas_insar/sources/MintPy/mintpy/prep_isce.pycreate_parser!   s     
r!   c             C   sN   t  }|j| d}d|jkrJt|j}t|dkr@|d |_n
t|j|S )N)args*r   )r!   
parse_argsr   globlenFileNotFoundError)iargsr   inpsfnamesr   r   r    cmd_line_parse<   s    

r+   c             C   s   i }x|   D ]}| | ||< qW d|d dd |d dd |d< |r||d  d ||d  d  }||d  d ||d  d  }t||d< t||d< |S )	aH  Add metadata unique for each interferogram
    Parameters: metadata_in   : dict, input common metadata for the entire dataset
                dates         : list of str in YYYYMMDD or YYMMDD format
                baseline_dict : dict, output of baseline_timeseries()
    Returns:    metadata      : dict, updated metadata
    z{}-{}r      N   DATE12P_BASELINE_TOP_HDRP_BASELINE_BOTTOM_HDR)keysformatr   )Zmetadata_indatesbaseline_dictmetadatak	bperp_topbperp_bottomr   r   r    add_ifgram_metadataL   s    (  r9   topsTc          
      s  t d tj  |dkrzddddddg} fd	d
|D }dd
 |D }t|dkrx fdd
|D }dd
 |D }n|dkr"|d }|d }ttj d||ttj d|| ttj d|| ttj d|| ttj d|| }ntd|x^|D ]V}tj	|d r\t
j|dd}	n
t
|}	|	| |d }
tj|	|
|dd q6W dS )z0Prepare and extract metadata from geometry filesz$prepare .rsc file for geometry files)r:   stripmaphgtlatlonlos
shadowMaskincLocalc                s    g | ]}t j d |qS )z{}.rdr)ospathjoinr2   ).0i)geom_dirr   r    
<listcomp>m   s    z$prepare_geometry.<locals>.<listcomp>c             S   s   g | ]}t j|r|qS r   )rB   rC   isfile)rE   rF   r   r   r    rH   n   s    r   c                s    g | ]}t j d |qS )z{}.rdr.full)rB   rC   rD   r2   )rE   rF   )rG   r   r    rH   p   s    c             S   s   g | ]}t j|r|qS r   )rB   rC   rI   )rE   rF   r   r   r    rH   q   s    )	alosStackALOOKSRLOOKSz*_{}rlks_{}alks.hgtz*_{}rlks_{}alks.latz*_{}rlks_{}alks.lonz*_{}rlks_{}alks.losz*_{}rlks_{}alks.wbdzunknown processor: {}z.xml)metafile_extz.rscT)r   	print_msgN)printrB   rC   abspathr&   r%   rD   r2   	ExceptionrI   r   read_attributeupdater   write_roipac_rsc)rG   r5   	processorr   Zfbases
isce_filesZalooksZrlooks	isce_fileZgeom_metadatarsc_filer   )rG   r    prepare_geometryd   s2    
n 


rY   c             C   s  t d| |dkr6tttjtj| d|}n8|dkr`tttjtj| |}ntd|t	|dkrt
d|t	|}tj|d}xt|D ]}	||	 }
|dkrtjtj|
d	}nF|dkrtjtjtj|
d
}t|}ntd|tj|
dd}|| t|||}|
d }tj|||dd |j|	d d|d |d d qW |  d S )Nzprepare .rsc file for )r:   r;   r#   rJ   z&Un-recognized ISCE stack processor: {}r   zno file found in pattern: {})maxValue_-z.xml)rM   z.rscF)r   rN   r-   z{}_{})suffix)rO   sortedr%   rB   rC   rD   rP   
ValueErrorr2   r&   r'   r   progressBarrangebasenamedirnamesplityyyymmddr   rR   rS   r9   r   rT   close)ZinputDirfilePatternr5   r4   rU   r   rV   num_fileprog_barrF   rW   r3   Zifg_metadatarX   r   r   r    prepare_stack   s8    
$"
"
&rj   c          	   C   s   t | }t|j|_i }|jrTtjtj|jd}tj	|j|j
||jdd }|j
rpt|j
||j|jd i }|jrtj|j|jd}|jr|jrx(|jD ]}t|j||||j|jd qW td d S )Nzdata.rsc)rG   rX   r   r   )r5   rU   r   )rU   )r5   r4   rU   r   zDone.)r+   r   get_processorr   rU   rB   rC   rD   rc   Zextract_isce_metadatar   r   rY   r   Zread_baseline_timeseriesr	   r   rj   rO   )r(   r)   r5   rX   r4   ZnamePatternr   r   r    main   s8    

rl   __main__r-   )N)N)rB   sysr%   r   numpynpmintpy.utilsr   r   r   r   r   r!   r+   r9   dictrY   rj   rl   __name__argvr   r   r   r    <module>	   s   
,)
(