
    ZfB                     |    d dl Z d dlZd dlZd dlmZmZ ej                  fdZddZ	dej                  dfdZ
ddZy)	    N)readfile	writefilec                 v   t        j                  |      r]| j                  j                  dvrEd}|d| j                   dz  }t	        |       t        j
                  | t         j                        } t        | j                        dk(  r
|| |dk(  <   | S t        | j                        dk(  r|| d	d	|dk(  f<   | S )
zmask a 2D matrxi data with mask
    Parameters: data : 2D / 3D np.array
                mask : 2D np.array of bool
                fill_value : number
    Returns:    data : same shape of array as input
    )fdcz/in order to fill the invalid pixels with np.nanz
	convert input matrix from z to np.float32)dtype   r      N)	npisnanr	   kindprintarrayfloat32lenshape)datamask
fill_valuemsgs       D/home/exouser/operations/rsmas_insar/tools/MintPy/src/mintpy/mask.pymask_matrixr      s     
xx


} D?/

|>JJc
xxBJJ/
4::!$TQY K 
TZZA	'Q	\K    c                 $   |rt         nd }|j                  rEd| ddd|j                  d   f<   d| dd|j                  d   df<    |d|j                          |j                  rEd| d|j                  d   ddf<   d| |j                  d   dddf<    |d|j                          |j                  r%| |j                  k\  }  |d|j                   d       |j                  r%| |j                  k  }  |d	|j                   d       | S )
zEUpdate mask matrix from input options: subset_x/y and mask_vmin/vmax.c                       y N )argskwargss     r   <lambda>z'update_mask_with_inps.<locals>.<lambda>(   s    r   r   N   zmask out area not in x: zmask out area not in y: zmask out pixels with value < z in mask filezmask out pixels with value > )r   subset_xsubset_y	mask_vmin	mask_vmax)r   inps	print_msgvprints       r   update_mask_with_inpsr*   &   s   U%AF}}&'Q$--"""#%&Qa !!")$--9:}}&'Qt}}Q"#%&T]]1!")$--9:~~t~~%.t~~.>mLM~~t~~%.t~~.>mLMKr   c                    t        j                  |      d   }|t        ||      }t        j                  |       }t	        d |D              }i }|D ]M  }	t        dj                  |	||              t        j                  | |	d      d   }
t        |
||      }
|
||	<   O |s)t        j                  j                  |       \  }}| d| }t        j                  ||| 	       |S )
ar   Mask input fname with mask_file
    Parameters: fname     - str, file to be masked
                mask_file - str, mask file
                out_file  - str, output file name
                inps      - namespace object, including:
                            subset_x/y
                            mask_vmin/vmax
    Returns:    out_file  - str, output file name
    r   c              3   2   K   | ]  }t        |        y wr   )r   ).0is     r   	<genexpr>zmask_file.<locals>.<genexpr>Q   s     +a3q6+s   zmasking {d:<{w}} from {f} ...)r   wr   F)datasetNamer(   )r   _msk)out_fileref_file)r   readr*   get_dataset_listmaxr   formatr   ospathsplitextr   write)fname	mask_filer3   r   r'   r   dsNamesmaxDigitdsDictdsNamer   fbasefexts                r   r>   r>   ?   s     ==#A&D$T40 ''.G+7++HF -44vU4ST}}U%HK4*=v	 gg&&u-tWD'OOFX>Or   c                 l   | sy t        d|        t        j                  |      d   }t        j                  |       }t	        |d         t	        |d         }}|d   j                         }t	        |d         }ddd	d
d}	|d   j                         }
|
|	j                         v r|	|
   }
t        d|         t        d       t        j                  j                  |       \  }}|dk(  rot        ||f|
||      }t        j                  | fddi|}t        j                  | fddi|}d||dk(  <   t        j                  ||f      j                         }nl|dk(  r4t        j                   | |
||z        j#                  d|      }d||dk(  <   n3|dv r!t        j                  |       d   }d||dk(  <   nt%        d|        |sO|dv r| d| }nC| j'                  d      r$dj)                  | j+                  d      d         }nt%        d|        |j-                  |       t        d|        dD ]  }|  d | }| d | }t/        j0                  ||       t        d!| d"|        t        d#       | d | }t3        |      5 }|j                         }d d d        j5                  t        j                  j7                  |       t        j                  j7                  |            }t3        |d$      5 }|j9                  |       d d d         |S # 1 sw Y   xY w# 1 sw Y   xY w)%Nzread mask from r   LENGTHWIDTH
INTERLEAVEBANDSbool_r   float64	complex64)bytefloatdoublecfloat	DATA_TYPEzread z:setting the (phase) value on the masked out pixels to zero.unw)r   	data_typenum_band
interleavebandr"   r
   .int)r	   count).corz	.conncompzunsupported ISCE file: )rW   rZ   rR   r2   z.unw.conncompz{}_msk.unw.conncompzunrecognized input file type: zfinished writing to file )xmlvrt.zcopy z to z(   and update the corresponding filenamer0   )r   r   r5   read_attributeintupperlowerkeysr9   r:   r;   dictread_binaryr   hstackflattenfromfilereshape
ValueErrorendswithr8   splittofileshutilcopy2openreplacebasenamer<   )in_filer>   r3   r   atrlengthwidthrU   rT   data_type_dictrS   rC   extr    ampphar   in_meta_fileout_meta_file	meta_filer   ss                         r   mask_isce_filer~   b   s^    
OI;
'(==#A&D 
!
!'
*CH&CL(9EF\"((*J3w< H 	N K &&(IN''))"9-		E'
	
FG!!'*JE3
f}5/!	
 ""7==f=""7==f=DAIyy#s$,,.	{{7)6%<HPPQSUZ[TQY	$	$}}W%a(TQY27)<== **SE*Ho.,33GMM/4RST4UVH=gYGHHKK	%hZ
01
  !!C5)#*AcU+\=1l^47889  j#'	)_ 	A	IIbgg&&w/gg&&x02)S! 	QGGAJ	 	  O	 		 	s   L L*L'	*L3	)Tr   )r9   rm   numpyr   mintpy.utilsr   r   nanr   r*   r>   r~   r   r   r   <module>r      s?    
   , (*vv *2 *."&&t  FOr   