o
    <cA                     @   s   d dl Z 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 d dlmZ dZdd ZdddZd	d
 Zdd Zdd Zdd ZdddZdd Zdd ZdddZedkr^e  dS dS )    N)readfile	writefileutils)multitrack_utilitiesa'  example:
    
    synthetic_S1.py mask.h5 BogdModelData_33.h5 --ramp --subswath --lls1 43.60 101.86 46.38 102.47 --lls2 43.53 102.94 46.47 103.67 --tramp 1e-06 1e-06 0.003 --tiramp 4e-07 4e-07 0.002 6e-07 6e-07 0.005 8e-07 8e-07 0.008 --wrap --outdir ./4ramps/

   synthetic_S1.py mask.h5 BogdModelData_106.h5 --ramp --subswath --lls1 43.56 99.80 46.34 100.42 --lls2 43.65 100.91 46.42 101.59 --tramp 3e-07 3e-07 0.002 --tiramp 1e-07 1e-07 0.001 3e-07 3e-07 0.004 6e-07 6e-07 0.008--wrap --outdir ./4ramps/

    synthetic_S1.py mask.h5 BogdModelData_4.h5 --ramp --subswath --lls1 43.62 97.77 46.38 98.37 --lls2 43.54 98.85 46.48 99.57 --tramp 3e-08 3e-08 0.001 --tiramp 1e-08 1e-08 0.001 2e-08 2e-08 0.001 5e-08 5e-08 0.001 --wrap --outdir ./4ramps/

    synthetic_S1.py mask.h5 KokoxiliModelData_AT143.h5 --ramp KokoxiliTramp_AT143.h5 --subswath --lls1 43.62 97.77 46.38 98.37 --lls2 43.54 98.85 46.48 99.57 --tramp 3e-08 3e-08 --tiramp 1e-08 1e-08 2e-08 2e-08 5e-08 5e-08 --outdir ./4ramps/ 
    
    synthetic_S1.py mask.h5 --ramp --subswath --lls1 43.62 97.77 46.38 98.37 --lls2 43.54 98.85 46.48 99.57 --tramp 3e-08 3e-08 --tiramp 1e-08 1e-08 2e-08 2e-08 5e-08 5e-08 --outdir ./4ramps/ 

    synthetic_S1.py mask.h5 KokoxiliModelData_AT143.h5 --outdir ./
    
    synthetic_S1.py mask.h5 KokoxiliModelData_AT143.h5 --ramp --tramp 1e-06 1e-06 0.003 --tiramp_whole 1e-07 1e-08 0.001 --outdir ./
    
    synthetic_S1.py mask.h5 KokoxiliModelData_AT143.h5 --ramp --tramp 1e-06 1e-06 0.003 --tiramp_whole 1e-07 1e-08 0.001 --atmo --atmofile atmospheric_noise.h5 --outdir ./
c                  C   s(  t jdt jtd} | jddtdd | jddtd	d | jd
dddd | jddtdd | jddtdddd | jddtdddd | jddddd | jddtdd d!d | jd"d#tdd d$d | jd%d&td'd(d)d | jd*ddd+d | jd,ddd-d | jd.d/dtd0d1 | jd2dtd3d | S )4NzPrepare data for Kite software)descriptionformatter_classepilogfile   zgeocoded mask file
)nargstypehelp	modelfile?zcoseismic model field.z--ramp
store_trueFz.whether simulate tectonic and atmospheric ramp)actiondefaultr   	trampfileztectonic ramp file.z--tramptramp   )txramptyramptoffsetz4tectonic linear ramp in X direction and Y direction.)destr   r   metavarr   z--tiramp_wholetiramp_whole)tixramptiyramptioffsetzFtroposphere and ionosphere linear ramp in X direction and Y direction.z
--subswathz>whether simulate troposphere/ionosphere ramp for each subswathz--lls1latlons1   )ZLowLatZLowLonZHighLatZHighLonzVlat and lon for the two points located at the intersect corner of swath 1 and swath 2.z--lls2latlons2zVlat and lon for the two points located at the intersect corner of swath 2 and swath 3.z--tiramptiramp	   )	s1xramps1yramps1offsets2xramps2yramps2offsets3xramps3yramps3offsetzaresidual troposphere / ionosphere linear ramp for swath1, swath2 and swath3 in X and Y direction.z--wrapz!whether wrap the synthetic data.
z--atmozwhether add atmo noise data.z
--atmofileatmofilezatmospheric noise)r   r   r   r   z--outdirz
output dir)argparseArgumentParserRawTextHelpFormatterEXAMPLEadd_argumentstrfloat)parser r6   H/home/exouser/operations/rsmas_insar/tools/MimtPy/mimtpy/synthetic_S1.pycreate_parser%   s:   r8   c                 C   s   t  }|j| d}|S )N)args)r8   
parse_args)iargsr5   inpsr6   r6   r7   cmd_line_parseR   s   r=   c           
      C   s   t | jd | _t| j\| _| _t | jd d | _	| jd | jd  d }| jd | jd  d }t
| jdd}t
| jdd}t
||f}t
j||gtd}t
t||d	 }|d
d
df }|d
d
df }	||	|fS )z&transfer lat/lon to local coordinationr   r   r   )r      )r   r?   r?   r
   dtype  N)r   read_attributer	   metadatautget_lat_lonlatlonreadmasknp	transposereshapevstackarrayr4   mutllh2xy)
r<   Z
origin_latZ
origin_lonrH   rI   llhoriginXYXYr6   r6   r7   ll2xyX   s   

rX   c           !      C   s   t | \}}}t| jd }t| jd }t| jd }t| jd }tj||g||ggtd}	tt|	|d }
|
d }|
d }|
d	 }|
d
 }t| jd }t| jd }t| jd }t| jd }tj||g||ggtd}tt||d }|d }|d }|d	 }|d
 }|j	\}}tj
||ftdtj }|dd}|| | || |  ||  ||  }|| | || |  ||  ||  }d||dk < |dk|dk  }d||< d||dk< |||}|| } tj| | jd d | jd | S )zPgenerate mask to distinguish the 3 swaths based on the intersection cover pointsr   r
   r@   r   rA   rC   r>   )r   r
   )r
   r   )r
   r
   r?   zmask_swaths.h5out_filerE   )rX   r4   r   rL   rP   rM   rQ   rR   r!   shapezerosintnanrN   r   writeoutdirrE   )!r<   original_maskrV   rW   rT   Z	LowLat_s1Z	LowLon_s1Z
HighLat_s1Z
HighLon_s1s1Zs1_XYZLowX_s1ZLowY_s1ZHighX_s1ZHighY_s1Z	LowLat_s2Z	LowLon_s2Z
HighLat_s2Z
HighLon_s2s2Zs2_XYZLowX_s2ZLowY_s2ZHighX_s2ZHighY_s2rowcolmZ	mask_s123Zmask_s123_tmpZswath1_indiZswath2_indiidxmask_swathsr6   r6   r7   generate_swaths_mask{   sD   
((rh   c                 C   s*   | }t |d}|d d }t|}|S )z read h5 file generated by matlabrz/modelr6   )h5pyFilerL   rM   )filesZ
model_fileZ	model_idxdata
model_datar6   r6   r7   read_model_h5   s
   
ro   c                 C   s  | j \|_|_tj|j|jftd}|dd}| dd}|jr-t|j}|dd}n't|j	d }t|j	d }t|j	d }	||dk | ||dk |  |	 }||7 }|j
rt|jd }
t|jd }t|jd }t|jd }t|jd }t|jd }t|jd	 }t|jd
 }t|jd }tj|j|jftddd}|||dk |
 ||dk |  | 7 }|||dk | ||dk |  | 7 }|||dk | ||dk |  | 7 }n't|jd }t|jd }t|jd }||dk | ||dk |  | }||7 }|jr1t|jd |_|jd|jd|jf |_t|j| |jrkt|j|_t|j}t|| |jj \}}||jksX||jkr\td|jdd|_| j|7  _|jrt|jd  d }t|jd d }|t|| ||  }|t|| ||  }|t|| ||  }|jr|t|j| ||  |_t||||ddd n	t||||dd |jrt||||dd dS t|||| dS )z+generate linear ramp for the synthetic datarA   r?   r
   r   r@   r   r                zDError! The dimension of modeled data and simulated ramp is disagree!
WAVELENGTHyes)model_data_ramp	wrap_flag)rw   )rv   N)r[   rd   re   rL   r\   r4   rN   r   ro   r   Zsubswathr"   r   Zatmor-   	atmo_datawrite_atmo_datar   rn   copydeepcopywrite_model_data	ExceptionwraprE   modmodel_data_wrap
write_data)rg   rV   rW   r<   	data_rampZmask_swaths_flat
data_trampr   r   r   r$   r%   r&   r'   r(   r)   r*   r+   r,   data_tirampr   r   r   model_data_copyZ	row_modelZ
colm_modelvminvmaxZdata_ramp_wrapZdata_tramp_wrapZdata_tiramp_wrapr6   r6   r7   generate_linear_ramp   sv   
$((*$
r   c           
      C   s  d| j d< |rd| j d< nd| j d< || j| j}|| j| j}|| j| j}|rC|r9| j| j| j| _n
| j| j| j| _tj|| jdk< tj|| jdk< tj|| jdk< |rr|ritj| j| jdk< n	tj| j| jdk< |r| j	d d }| j	d d	 }| j	d d
 }|r| j	d | j
dd  d }	n&| j	d d }| j	d d }| j	d d }|r| j	d | j
dd  d }	tj||| j d tj||| j d tj||| j d |r|rtj| j|	| j d dS tj| j|	| j d dS dS )z
write datamUNITr~   	FILE_TYPEz.unwFr   ztectonic_ramp_wrap.h5z#troposphere_ionosphere_ramp_wrap.h5zdata_ramped_wrap.h5.z_ramped_wrap.h5ztectonic_ramp.h5ztroposphere_ionosphere_ramp.h5zdata_ramped.h5z
_ramped.h5rY   N)rE   rN   rd   re   r   rn   rL   r^   rK   r`   r   splitr   r_   )
r<   r   r   r   rv   rw   Z
tramp_nameZtiramp_nameZ	ramp_nameZmodel_ramp_namer6   r6   r7   r     sL   

r   c                 C   s   t j| |jdk< |jd |jdd  d }tj| ||jd t	|jd  d }t	|jd d }|t 
| | ||  }|jd |jdd  d }tj|||jd d	S )
z,change simulated model data to mintpy formatFr   r   
_mintpy.h5rY   rt   r    z_mintpy_wrap.h5N)rL   r^   rK   r`   r   r   r   r_   rE   r4   r   )r   r<   outfiler   r   Zmodel_data_copy_wrapr6   r6   r7   r|   N  s   r|   c                 C   sH   t j| |jdk< |jd |jd dd  d }tj| ||jd dS )z.change atmospheric noise data to mintpy formatFr   r   r   rY   N)	rL   r^   rK   r`   r-   r   r   r_   rE   )rx   r<   r   r6   r6   r7   ry   Z  s   "ry   c                 C   s   t | }t|\}}}t|jd d }tt|g}tt|g}|jrU|j	rD|j
\}}tj||ftd}tj||jdk< nt|||||}t|||| d S |jrit|j}	t|	}
t|
| d S d S )Nr   rA   F)r=   rX   r   rJ   r	   rL   rM   rP   rampr   r[   onesr4   r^   rK   rh   r   r   ro   rz   r{   r|   )r;   r<   rV   rW   rT   ra   rd   re   rg   rn   r   r6   r6   r7   main`  s"   


r   __main__)N)NN)osr.   numpyrL   rz   rj   mintpymintpy.utilsr   r   r   rF   mimtpy.utilsr   rQ   r1   r8   r=   rX   rh   ro   r   r   r|   ry   r   __name__r6   r6   r6   r7   <module>   s,   
-#:	
^2

