o
    ûe0 ã                   @   sæ  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZdldd„Zdd„ Z	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Z d6d7„ Z!d8d9„ Z"d:d;„ Z#d<d=„ Z$d>d?„ Z%d@dA„ Z&dBdC„ Z'dDdE„ Z(dmdFdG„Z)dndHdI„Z*dJdK„ Z+dLdM„ Z,dNdO„ Z-dPdQ„ Z.dRdS„ Z/dTdU„ Z0dVdW„ Z1dXdY„ Z2dZd[„ Z3d\d]„ Z4d^d_„ Z5d`da„ Z6dbdc„ Z7ddde„ Z8dfdg„ Z9dhdi„ Z:djdk„ Z;dS )oé    )Úsaga_apiNTc                 C   sº   t  d¡ tjdkr)tjd d tjd  d tjd< t  ¡  tjd d d¡ nt  ¡  t d	¡d¡ t  d¡ | rWtd
t	j
 ƒ tt  ¡ ƒ tdtt  ¡  ¡ ƒ ƒ tƒ  t  ¡  ¡ S )NTÚntÚPATHú;ZSAGA_32z/dllz/toolsFZPYTHON_SAGA_API_LIBRARYzPython - Version znumber of loaded libraries: )r   ZSG_UI_Msg_LockÚosÚnameÚenvironÚSG_Get_Tool_Library_ManagerZAdd_DirectoryÚgetenvÚprintÚsysÚversionZSAGA_API_Get_VersionÚstrZ	Get_Count)ÚVerbose© r   úK/p/projects/hiclap/tools/chelsa_isimip3b_ba_1km/functions/saga_functions.pyÚLoad_Tool_Libraries    s   

"
r   c                    s  t  d¡ d}t‡ fdd„dD ƒƒrt  ¡  tˆ ƒ¡}t‡ fdd„dD ƒƒr/t  ¡  tˆ ƒ¡}t‡ fdd„dD ƒƒrCt  ¡  tˆ ƒ¡}d	ˆ v rPt  ¡  tˆ ƒ¡}t‡ fd
d„dD ƒƒrdt  ¡  	tˆ ƒ¡}|d u sn| 
¡ dkrxtdˆ  d ƒ dS tdˆ  d ƒ |S )Nr   c                 3   ó    | ]}|ˆ v V  qd S ©Nr   ©Ú.0Ús©Úpath_to_sagadatar   r   Ú	<genexpr>8   ó   € z load_sagadata.<locals>.<genexpr>)z.sgrdz.sg-grdzsg-grd-zc                 3   r   r   r   r   r   r   r   r   <   r   )zsg-gdszsg-gds-zc                 3   r   r   r   r   r   r   r   r   @   r   )z.txtz.csvz.dbfz.shpc                 3   r   r   r   r   r   r   r   r   H   r   )z.spcz.sg-ptsz	.sg-pts-zzERROR: loading [ú]zFile: [z] has been loaded)r   ZSG_Set_History_DepthÚanyÚSG_Get_Data_ManagerZAdd_Gridr   Z	Add_GridsZ	Add_TableZ
Add_ShapesZAdd_PointCloudZis_Validr   )r   Zsaga_api_dataobjectr   r   r   Úload_sagadata2   s"   
r   c                 C   s¸   t  ¡  dd¡}|d u rtdƒ dS | ¡ }|dƒ | ¡ |dƒ d¡ |dƒ d¡ |d	ƒ d
¡ td| ¡  ¡  ƒ | ¡ sFtdƒ dS | 	t  
d¡¡ ¡  d¡}td | ¡ƒ |S )NÚio_gdalÚ0z$Failed to create tool: Import RasterFZFILESZMULTIPLEZ	automaticÚ	TRANSFORMÚ
RESAMPLINGúNearest NeighbourúExecuting tool: ÚfailedÚGRIDSr   ú$  %IO:         successfully read {0})r   r	   ÚCreate_Toolr   ÚGet_ParametersÚ	Set_ValueÚGet_NameÚc_strÚExecuteÚGet_ParameterÚ
CSG_StringÚ
asGridListÚGet_GridÚformat)ÚFileÚToolÚParmÚoutputr   r   r   Úimport_gdalS   s    r8   c                 C   sÀ   t  ¡  dd¡}|d u rtdƒ dS | ¡ }|dƒ | ¡ |dƒ d¡ |dƒ d¡ |d	ƒ d¡ |d
ƒ d¡ td| ¡  ¡  ƒ | ¡ sMtdƒ dS | 	t  
d¡¡ ¡ }td | ¡ƒ |S )Nr    Ú6z$Failed to create tool: Import NetCDFFÚFILEZ	SAVE_FILEZ	SAVE_PATHÚ r"   r#   r$   r%   r&   r'   r(   )r   r	   r)   r   r*   r+   r,   r-   r.   r/   r0   r1   r3   )Zncdffiler5   r6   r7   r   r   r   Úimport_ncdfl   s"   r<   c                 C   s0  t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d	¡¡ | d¡ ¡  |  	¡  
d
¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | dt  ¡ ¡ | dd¡ | d¡ ¡  | 	¡  
d¡¡ | d¡ ¡  | 	¡  
d¡¡ | d¡ ¡  | 	¡  
d¡¡ | d¡ ¡  | 	¡  
d	¡¡ | d¡ ¡  | 	¡  
d
¡¡ | d¡ ¡  | 	¡  
d¡¡ | d¡ ¡  | 	¡  
d¡¡ | d¡ ¡  | 	¡  
d¡¡ | d¡ ¡  | 	¡  
d¡¡ | d¡ ¡  | 	¡  
d¡¡ | d¡ ¡  | 	¡  
d¡¡ td| ¡  ¡  ƒ | ¡ s…tdƒ dS tdƒ | t  d¡¡ 	¡  
d¡}|S )NZstatistics_regressionÚ9z2Failed to create tool: Polynomial Trend from GridsFZY_GRIDSr   é   é   é   é   é   é   é   é   é	   é
   ZR2ZORDERZX_GRIDSr%   r&   ÚokayZCOEFF)r   r	   r)   r   r*   ÚReset_Grid_Systemr/   ÚasListÚAdd_Itemr1   r2   ÚSet_ParameterÚSG_Get_Create_Pointerr,   r-   r.   r0   )ÚFile1ÚFile2r5   ÚListr   r   r   Úpolynomial_trends…   sH   
rQ   c                 C   sÊ  t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d	 ¡ | d¡ ¡  |d
 ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |d ¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d ¡¡ | d¡ ¡  |  	¡  
d!¡¡ | d¡ ¡  |  	¡  
d"¡¡ | d¡ ¡  |  	¡  
d#¡¡ | d¡ ¡  |  	¡  
d$¡¡ | d¡ ¡  |  	¡  
d%¡¡ | d¡ ¡  |  	¡  
d&¡¡ | d¡ ¡  |  	¡  
d'¡¡ | d¡ ¡  |  	¡  
d(¡¡ | d¡ ¡  |  	¡  
d)¡¡ | d¡ ¡  |  	¡  
d*¡¡ | d¡ ¡  |  	¡  
d+¡¡ | d¡ ¡  |  	¡  
d,¡¡ | d¡ ¡  |  	¡  
d-¡¡ | d¡ ¡  |  	¡  
d.¡¡ | d¡ ¡  |  	¡  
d/¡¡ | d¡ ¡  |  	¡  
d0¡¡ | d¡ ¡  |  	¡  
d1¡¡ | d¡ ¡  |  	¡  
d2¡¡ | d¡ ¡  |  	¡  
d3¡¡ | d¡ ¡  |  	¡  
d4¡¡ | d¡ ¡  |  	¡  
d5¡¡ | d¡ ¡  |  	¡  
d6¡¡ | d7|¡ td8| ¡  ¡  ƒ | ¡ s»td9ƒ dS td:ƒ |dkrË| d;¡ ¡ }|d kr×| d<¡ ¡ }|d!krã| d=¡ ¡ }|S )>NÚclimate_toolsZ26z.Failed to create tool: Temperature Lapse RatesFZTEMPz
lapse00:00z
lapse01:00z
lapse02:00z
lapse03:00z
lapse04:00z
lapse05:00z
lapse06:00z
lapse07:00z
lapse08:00z
lapse09:00z
lapse10:00z
lapse11:00z
lapse12:00z
lapse13:00z
lapse14:00z
lapse15:00z
lapse16:00z
lapse17:00z
lapse18:00z
lapse19:00z
lapse20:00z
lapse21:00z
lapse22:00z
lapse23:00ZTGROUNDr   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   é   é   é   é   é   é   é   é   é   é   é   é   é   ZEXTREMEr%   r&   rH   ZLAPSEZTEXTREMEZTIME)r   r	   r)   r   r*   rI   r/   rJ   rK   r1   r2   rL   r,   r-   r.   ÚasDataObject)ÚextremeÚparamÚdictÚtimesZparam2r5   ÚDatar   r   r   Úextreme_lapserates¸   s„   



rf   c                 C   sº   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  |D ]}| d¡ ¡  | d|  ¡ q| 	dd¡ | 	d	t  
¡ ¡ td
| ¡  ¡  ƒ | ¡ sMtdƒ dS tdƒ | ¡ }|d	ƒ ¡ }|S )NÚstatistics_gridÚ4ú+Failed to create tool: Statistics for GridsFr'   Úlapser#   úB-Spline InterpolationÚMEANr%   r&   rH   )r   r	   r)   r   r*   rI   r/   rJ   rK   rL   rM   r,   r-   r.   ÚasGrid)rc   rd   r5   Ú	timestampr6   re   r   r   r   Úget_mean_dicto  s"   ro   c                 C   óf  t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d	¡¡ | d¡ ¡  |  	¡  
d
¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | dd¡ | d t  ¡ ¡ td!| ¡  ¡  ƒ | ¡ s£td"ƒ dS td#ƒ | ¡ }|d ƒ ¡ }|S )$Nrg   rh   ri   Fr'   r   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r#   rk   rl   r%   r&   rH   ©r   r	   r)   r   r*   rI   r/   rJ   rK   r1   r2   rL   rM   r,   r-   r.   rm   ©Úobjr5   r6   re   r   r   r   Úget_mean$  óN   
rt   c                 C   rp   )$Nrg   rh   ri   Fr'   r   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r#   rk   ZSUMr%   r&   rH   rq   rr   r   r   r   Úget_sumV  ru   rv   c                 C   sÐ   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d¡ ¡  |  	¡ ¡ | 
dd¡ | 
dd	¡ td
| ¡  ¡  ƒ | ¡ sDtdƒ dS tdƒ | t  d¡¡ ¡  d¡}|d u rf| t  d¡¡ ¡  d¡}|S )NÚpj_proj4Ú13ú:Failed to create tool: Change Longitudinal Range for GridsFÚINPUTÚ	DIRECTIONr   ÚPATCHTr%   r&   rH   ÚOUTPUT©r   r	   r)   r   r*   rI   r/   rJ   rK   rm   rL   r,   r-   r.   r0   r1   r2   )rs   r5   rP   r   r   r   Úchange_latlongˆ  s"   r   c                 C   s®   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d¡ ¡  |  	¡ ¡ | 
d|¡ | 
dd¡ td	| ¡  ¡  ƒ | ¡ sDtd
ƒ dS tdƒ | t  d¡¡ ¡  d¡}|S )Nrw   rx   ry   Frz   r{   r|   Tr%   r&   rH   r}   r   r~   )rs   Z	directionr5   rP   r   r   r   Úchange_latlong360§  s   r€   c                 C   s¸   t  ¡  dd¡}|d u rtdƒ dS | dd¡ | dd¡ | d	d
¡ | dd¡ | dd¡ | dd¡ | d¡ ¡  |  ¡ ¡ td| 	¡  
¡  ƒ | ¡ sVtdƒ dS tdƒ dS )Nrw   r!   z6Failed to create tool: Set Coordinate Reference SystemFZ
CRS_METHOSr   Ú	CRS_PROJ4ú$+proj=longlat +datum=WGS84 +no_defs ÚCRS_FILEr;   ÚCRS_EPSGéæ  ÚCRS_EPSG_AUTHÚEPSGÚPRECISEr'   r%   r&   rH   T)r   r	   r)   r   rL   r/   rJ   rK   rm   r,   r-   r.   )rs   r5   r   r   r   Úset_2_latlongÀ  s"   r‰   c                 C   s´   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d¡ ¡  |  	¡ ¡ | 
dd¡ | 
dd	¡ | 
d
d¡ td| ¡  ¡  ƒ | ¡ sJtdƒ dS tdƒ | t  d¡¡ ¡ }|S )NÚshapes_gridÚ3z,Failed to create tool: Grid Values to PointsFr'   ÚPOLYGONSzShapes input, optionalZNODATATÚTYPEÚnodesr%   r&   rH   ZPOINTS)r   r	   r)   r   r*   rI   r/   rJ   rK   rm   rL   r,   r-   r.   r0   ÚasShapes©rs   r5   re   r   r   r   Úgridvalues_to_pointsÙ  s    r‘   c                 C   sÆ   t  ¡  dd¡}|d u rtdƒ dS | dd¡ | dd¡ | d	d
¡ | dd¡ | dd¡ | d| ¡ | dd¡ | dd¡ td| ¡  ¡  ƒ | ¡ sVtdƒ dS tdƒ | d¡ 	¡ }|S )Nrw   Ú2z9Failed to create tool: Coordinate Transformation (Shapes)Fr   z?+proj=merc +lon_0=0 +k=1 +x_0=0 +datum=WGS84 +units=m +no_defs rƒ   r;   r„   r…   r†   r‡   rˆ   ÚSOURCEZTRANSFORM_ZTZCOPYr%   r&   rH   ZTARGET)
r   r	   r)   r   rL   r,   r-   r.   r/   r   r   r   r   r   Úreproject_shapeù  s&   r”   c                 C   s0  t  ¡  dd¡}|d u rtdƒ dS | d| ¡ | dd¡ | dd	¡ | d
| ¡ ¡ | d| ¡ ¡ | d| ¡ ¡ | d| ¡ ¡ | d| 	¡ ¡ | d| 
¡ ¡ | d| ¡ ¡ | dd¡ | dd¡ | dd¡ | d|¡ td| ¡  ¡  ƒ | ¡ sˆtdƒ dS tdƒ | ¡ }|dƒ ¡ }|S )NZgrid_splinerh   z*Failed to create tool: Multilevel B-SplineFZSHAPESZFIELDr@   ÚTARGET_DEFINITIONúuser definedÚTARGET_USER_SIZEÚTARGET_USER_XMINÚTARGET_USER_XMAXÚTARGET_USER_YMINÚTARGET_USER_YMAXÚTARGET_USER_COLSÚTARGET_USER_ROWSÚTARGET_USER_FITSrŽ   ZMETHODZnoZEPSILONg-Cëâ6?Z	LEVEL_MAXr%   r&   rH   ZTARGET_OUT_GRID)r   r	   r)   r   rL   ÚGet_CellsizeÚGet_XMinÚGet_XMaxÚGet_YMinÚGet_YMaxÚGet_NXÚGet_NYr,   r-   r.   r*   rm   )ÚshapeÚtemplateZlevr5   r6   re   r   r   r   Úmultilevel_B_spline  s4   r¨   c                 C   sÂ   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d|  ¡ ¡ | d| ¡ ¡ | dd¡ | d	d
¡ | dd¡ | dd¡ td| ¡  	¡  ƒ | 
¡ sTtdƒ dS tdƒ | d¡ ¡ }|S )NÚgrid_calculusÚ15zJFailed to create tool: Gradient Vector from Cartesian to Polar CoordinatesFZDXZDYZUNITSÚradiansZSYSTEMZgeographicalZSYSTEM_ZEROç        ZSYSTEM_ORIENTZ	clockwiser%   r&   rH   ÚDIR)r   r	   r)   r   r*   rI   rL   rm   r,   r-   r.   r/   )ZuwindZvwindr5   re   r   r   r   Úpolar_coords:  s$   r®   c                 C   sÞ   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d| ¡ ¡ | d|  ¡ ¡ | dd¡ | d	t  ¡ ¡ | d
d¡ | dd¡ | dd¡ | dd¡ td| 	¡  
¡  ƒ | ¡ sbtdƒ dS tdƒ | d¡ ¡ }|S )NZta_morphometryrª   z=Failed to create tool: Wind Effect (Windward / Leeward Index)FZDEMr­   Z	LEN_SCALEç      ð?ZAFHZMAXDISTg     Àr@ZOLDVERZACCELg      ø?ZPYRAMIDSr%   r&   rH   ZEFFECT©r   r	   r)   r   r*   rI   rL   rm   rM   r,   r-   r.   r/   )ÚdirÚdemr5   re   r   r   r   Ú
windeffectV  s(   r³   c                 C   s‚  t  ¡  dd¡}|d u rtdƒ dS | dd¡ | dd¡ | d	d
¡ | dd¡ | dd¡ | d|  ¡ ¡ | dd¡ | dd¡ | dd¡ | dd¡ | dd¡ | d| ¡ ¡ | d| ¡ ¡ | d| ¡ ¡ | d| 	¡ ¡ | d| 
¡ ¡ | d| ¡ ¡ | d| ¡ ¡ | dd¡ | dd¡ | d d¡ td!| ¡  ¡  ƒ | ¡ s´td"ƒ dS td#ƒ | d$¡ ¡ }|S )%Nrw   rh   z7Failed to create tool: Coordinate Transformation (Grid)Fr   r‚   rƒ   r;   r„   r…   r†   r‡   rˆ   r“   r#   r   ZBYTEWISEÚ	KEEP_TYPEZTARGET_AREAr•   r–   r—   r˜   r™   rš   r›   rœ   r   rž   rŽ   ZOUT_X_CREATEZOUT_Y_CREATEr%   r&   rH   ÚGRID)r   r	   r)   r   rL   rm   rŸ   r    r¡   r¢   r£   r¤   r¥   r,   r-   r.   r/   ©rs   r§   r5   re   r   r   r   Úproj_2_latlongt  s@   r·   c                 C   s6  t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d¡ ¡  |  	¡ ¡ | 
dd¡ | 
dd¡ | 
d	d
¡ | 
d| ¡ ¡ | 
d| ¡ ¡ | 
d| ¡ ¡ | 
d| ¡ ¡ | 
d| ¡ ¡ | 
d| ¡ ¡ | 
d| ¡ ¡ | 
dd¡ td| ¡  ¡  ƒ | ¡ sˆtdƒ dS tdƒ | t  d¡¡ ¡  d
¡}|S )NÚ
grid_toolsr!   ú!Failed to create tool: ResamplingFrz   r´   Z
SCALE_DOWNrk   r•   r   r—   r˜   r™   rš   r›   rœ   r   rž   rŽ   r%   r&   rH   r}   ©r   r	   r)   r   r*   rI   r/   rJ   rK   rm   rL   rŸ   r    r¡   r¢   r£   r¤   r¥   r,   r-   r.   r0   r1   r2   r¶   r   r   r   Úresample  ó0   r»   c                 C   óÒ   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | dd¡ | dd¡ | d	d
¡ | dd¡ | dd¡ | dd¡ | d¡ ¡  	|  
¡ ¡ td| ¡  ¡  ƒ | ¡ s\tdƒ dS tdƒ | d¡ 
¡ }|S )Nr©   Ú1ú&Failed to create tool: Grid CalculatorFr#   rk   ÚFORMULAz	a*9.80665ÚNAMEÚgeopotentialÚFNAMEÚ
USE_NODATAr   rF   r'   r%   r&   rH   ÚRESULT©r   r	   r)   r   r*   rI   rL   r/   rJ   rK   rm   r,   r-   r.   r   r   r   r   Úcalc_geopotential¿  ó&   rÇ   c                 C   sž   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d|  ¡ ¡ | dt  ¡ ¡ | dd¡ td	| 	¡  
¡  ƒ | ¡ sBtd
ƒ dS tdƒ | d¡ ¡ }|S )Nr¸   Ú7z!Failed to create tool: Close GapsFrz   rÅ   Z	THRESHOLDçš™™™™™¹?r%   r&   rH   r°   r   r   r   r   Ú	closegapsÝ  s   rË   c                 C   s¶   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d|  ¡ ¡ | dt  ¡ ¡ | dd¡ | d	d
¡ | dd¡ td| 	¡  
¡  ƒ | ¡ sNtdƒ dS tdƒ | d¡ ¡ }|S )Nr¸   Ú11ú*Failed to create tool: Change Data StorageFrz   r}   r   rF   ÚOFFSETr¬   ÚSCALEr¯   r%   r&   rH   r°   )r4   r5   re   r   r   r   Úchange_data_storageö  s"   rÐ   c                 C   s¶   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d|  ¡ ¡ | dt  ¡ ¡ | d|¡ | dd	¡ | d
d¡ td| 	¡  
¡  ƒ | ¡ sNtdƒ dS tdƒ | d¡ ¡ }|S )Nr¸   rÌ   rÍ   Frz   r}   r   rÎ   r¬   rÏ   r¯   r%   r&   rH   r°   )r4   Útyper5   re   r   r   r   Úchange_data_storage2  s"   rÒ   c           	      C   s  t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  |D ]}| d¡ ¡  | d|  ¡ q|D ]}| d¡ ¡  |d|  ¡ q-| 	d	| 
¡ ¡ | 	d
| 
¡ ¡ | 	d| 
¡ ¡ | 	dt  ¡ ¡ | 	dd¡ | 	dd¡ td| ¡  ¡  ƒ | ¡ s~tdƒ dS tdƒ | d¡ 
¡ }|S )NrR   Z25z$Failed to create tool: Cloud OverlapFZCOVERSZccZHEIGHTSZgeoZGROUNDZWINDZCBASEZBLOCKSZINTERVALg     ˆ£@ZMINCOVERg      ð¿r%   r&   rH   ZCOVER)r   r	   r)   r   r*   rI   r/   rJ   rK   rL   rm   rM   r,   r-   r.   )	Ú
cloudcoverrÂ   Z	cloudbaser²   r³   Zlevelsr5   Úlevelre   r   r   r   Úcloud_overlap-  s,   rÕ   c                 C   ó®   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d|  ¡ ¡ | dt  ¡ ¡ | d| ¡ ¡ | dd	¡ td
| 	¡  
¡  ƒ | ¡ sJtdƒ dS tdƒ | d¡ ¡ }|S )Nr¸   Ú5úFailed to create tool: PatchingFÚORIGINALÚ	COMPLETEDÚ
ADDITIONALr#   r   r%   r&   rH   r°   ©rN   rO   r5   re   r   r   r   ÚpatchingN  ó    rÝ   c                 C   rÖ   )Nr¸   r×   rØ   FrÙ   rÚ   rÛ   r#   r?   r%   r&   rH   r°   rÜ   r   r   r   ÚpatchingBsplineh  rÞ   rß   c                 C   óê   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | dd¡ | dd¡ | d	d
¡ | dd¡ | dd¡ | dd¡ | d¡ ¡  	|  
¡ ¡ | d¡ ¡  	| 
¡ ¡ td| ¡  ¡  ƒ | ¡ shtdƒ dS tdƒ | d¡ 
¡ }|S )Nr©   r¾   r¿   Fr#   rk   rÀ   z(a+1)/(b+1)rÁ   ÚCalculationrÃ   rÄ   r   rF   r'   r%   r&   rH   rÅ   rÆ   ©Úobj1Úobj2r5   re   r   r   r   Úcalculate_bias‚  ó(   rå   c                 C   rà   )Nr©   r¾   r¿   Fr#   rk   rÀ   za/(b*0.001)rÁ   rá   rÃ   rÄ   r   rF   r'   r%   r&   rH   rÅ   rÆ   râ   r   r   r   Úsimple_bias¡  ræ   rç   c                 C   óê   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | dd¡ | dd¡ | d	d
¡ | dd¡ | dd¡ | dd¡ | d¡ ¡  	|  
¡ ¡ | d¡ ¡  	| 
¡ ¡ td| ¡  ¡  ƒ | ¡ shtdƒ dS tdƒ | d¡ 
¡ }|S )Nr©   r¾   r¿   Fr#   rk   rÀ   za*brÁ   rá   rÃ   rÄ   r   rF   r'   ÚXGRIDSr%   r&   rH   rÅ   rÆ   râ   r   r   r   ÚbiascorÀ  ræ   rê   c                 C   rè   )Nr©   r¾   r¿   Fr#   rk   rÀ   za/brÁ   rá   rÃ   rÄ   r   rF   r'   ré   r%   r&   rH   rÅ   rÆ   râ   r   r   r   Úbiascor2ß  ræ   rë   c                 C   r½   )Nr©   r¾   r¿   Fr#   rk   rÀ   zifelse(a<1,a*1,a-a+1)rÁ   ÚtccrÃ   rÄ   r   rF   r'   r%   r&   rH   rÅ   rÆ   ©rã   r5   re   r   r   r   Úcapat1þ  s&   rî   c                 C   r½   )Nr©   r¾   r¿   Fr#   rk   rÀ   za*10000rÁ   rì   rÃ   rÄ   r   r@   r'   r%   r&   rH   rÅ   rÆ   rí   r   r   r   Úconvert2uinteger  ó&   rï   c                 C   sÒ   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | dd¡ | dd¡ | d	|¡ | d
d¡ | dd¡ | dd¡ | d¡ ¡  	|  
¡ ¡ td| ¡  ¡  ƒ | ¡ s\tdƒ dS tdƒ | d¡ 
¡ }|S )Nr©   r¾   r¿   Fr#   rk   rÀ   za*10rÁ   rÃ   rÄ   r   r@   r'   r%   r&   rH   rÅ   rÆ   )rã   r   r5   re   r   r   r   Úconvert2uinteger10;  rð   rñ   c                 C   s¤   t  ¡  dd¡}|d u rtdƒ dS | ¡ }| ¡  |dƒ ¡  | ¡ |dƒ |¡ |dƒ d¡ td	| 	¡  
¡  ƒ | ¡ sEtd
ƒ dS tdƒ t  ¡  |¡ dS )Nr    r’   z%Failed to create tool: Export GeoTIFFFr'   r:   ZOPTIONSzCOMPRESS=DEFLATE PREDICTOR=2r%   r&   zokay - geotiff createdT)r   r	   r)   r   r*   rI   rJ   rK   r+   r,   r-   r.   ZDelete_Tool)ÚOBJÚfnamer5   r6   r   r   r   Úexport_geotiffY  s    rô   c                 C   s:  dd l }dd l}dd l}|dvrdnd}d}tj tj |¡d || ¡ ¡¡}	t	| |	ƒ | 
|	¡ d¡| | }
dg| | |d	 d
¡g¡fdg|
d  ¡ fdg|
d  ¡ fdœ}|g d¢|
 ¡ fi}|d |d |d dœ}|jjj|||d}ddd|fD ]	}|| || _q|j|dgdddiid t |	¡ dS )Nr   )ZprrÊ   g!tçk³>r¬   zaux_{0}_{1}.tifÚfloatÚtimeÚdateÚnsÚlatÚyÚlonÚx)rö   rù   rû   ÚmodelÚrealizationÚ
experiment)rý   rþ   rÿ   )ÚcoordsÚ	data_varsÚattrsZdtypeZdouble)Zunlimited_dimsÚencodingT)ÚuuidZ	rioxarrayZnumpyr   ÚpathÚjoinÚdirnamer3   Zuuid4rô   Zopen_rasterioZastypeÚarrayZ
datetime64Zto_numpyZxarray_pluginZxarrayZDatasetr  Z	to_netcdfÚremove)rò   ZvariableZmetadataró   r  ZrioxrZnpÚmulÚaddZ	aux_fnameZdata_inr   r  r  Zdata_outÚkeyr   r   r   Úexport_ncdft  s0   ÿ
þÿ
r  c                 C   s&  t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | dd¡ | dd¡ | d	d
¡ | dd¡ | dd¡ | dd¡ | dd¡ | d¡ ¡  	|  
¡ ¡ | d¡ ¡  	| 
¡ ¡ | d¡ ¡  	| 
¡ ¡ | d¡ ¡  	| 
¡ ¡ td| ¡  ¡  ƒ | ¡ s†tdƒ dS tdƒ | d¡ 
¡ }|S )Nr©   r¾   r¿   Fr#   rk   rÀ   z	d-b*(a-c)rÁ   rá   rÃ   rÄ   r   rF   r?   r'   ré   r%   r&   rH   rÅ   rÆ   )r²   rj   Zreference_demÚtemperaturer5   re   r   r   r   Úlapse_rate_based_downscaling‘  s.   r  c                 C   s  t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | dd¡ | dd¡ | d	|¡ | d
d¡ | dd¡ | dd¡ | d¡ ¡  	|  
¡ ¡ | d¡ ¡  	| 
¡ ¡ | d¡ ¡  	| 
¡ ¡ td| ¡  ¡  ƒ | ¡ sttdƒ dS tdƒ | d¡ 
¡ }|S )Nr©   r¾   r¿   Fr#   rk   rÀ   za+(b-1/b)*(1-c)rÁ   rÃ   rÄ   r   rF   r'   ré   r%   r&   rH   rÅ   rÆ   )r  ZquotientZcloud_coverr   r5   re   r   r   r   Útemp_srad_cc_correctionµ  s*   r  c                 C   sê   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | dd¡ | dd¡ | d	|¡ | d
d¡ | dd¡ | dd¡ | d¡ ¡  	|  
¡ ¡ | d¡ ¡  	| 
¡ ¡ td| ¡  ¡  ƒ | ¡ shtdƒ dS tdƒ | d¡ 
¡ }|S )Nr©   r¾   r¿   Fr#   rk   rÀ   za*(1-0.75*b^3.4)rÁ   rÃ   rÄ   r   rF   r'   ré   r%   r&   rH   rÅ   rÆ   )ZstotrÓ   r   r5   re   r   r   r   Úsurface_radiation×  s(   r  c                 C   sê   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | dd¡ | d|¡ | dd	¡ | d
d¡ | dd¡ | dd¡ | d¡ ¡  	|  
¡ ¡ | d¡ ¡  	| 
¡ ¡ td| ¡  ¡  ƒ | ¡ shtdƒ dS tdƒ | d¡ 
¡ }|S ©Nr©   r¾   r¿   Fr#   rk   rÀ   rÁ   rá   rÃ   rÄ   r   rF   r'   r%   r&   rH   rÅ   rÆ   )rã   rä   Úequr5   re   r   r   r   Úgrid_calculatorø  ræ   r  c                 C   sÒ   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | dd¡ | d|¡ | dd	¡ | d
d¡ | dd¡ | dd¡ | d¡ ¡  	|  
¡ ¡ td| ¡  ¡  ƒ | ¡ s\tdƒ dS tdƒ | d¡ 
¡ }|S r  rÆ   )rã   r  r5   re   r   r   r   Úgrid_calculator_simple  rÈ   r  c                 C   sê   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | dd¡ | d|¡ | dd	¡ | d
d¡ | dd¡ | dd¡ | d¡ ¡  	|  
¡ ¡ | d¡ ¡  	| 
¡ ¡ td| ¡  ¡  ƒ | ¡ shtdƒ dS tdƒ | d¡ 
¡ }|S ©Nr©   r¾   r¿   Fr#   rk   rÀ   rÁ   rá   rÃ   rÄ   r   rF   r'   ré   r%   r&   rH   rÅ   rÆ   )rã   Zxobj2r  r5   re   r   r   r   Úgrid_calculatorX5  ræ   r  c                 C   rè   )Nr©   r¾   r¿   Fr#   rk   rÀ   z
abs((a-b))rÁ   rá   rÃ   rÄ   r   rF   r'   ré   r%   r&   rH   rÅ   rÆ   )r²   Zpblhr5   re   r   r   r   Úcalc_dist2boundT  ræ   r  c                 C   s6  t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d¡ ¡  |  	¡ ¡ | 
dd¡ | 
d|¡ | 
dd	¡ | 
d
| ¡ ¡ | 
d| ¡ ¡ | 
d| ¡ ¡ | 
d| ¡ ¡ | 
d| ¡ ¡ | 
d| ¡ ¡ | 
d| ¡ ¡ | 
dd¡ td| ¡  ¡  ƒ | ¡ sˆtdƒ dS tdƒ | t  d¡¡ ¡  d	¡}|S )Nr¸   r!   r¹   Frz   r´   ZSCALE_UPr•   r   r—   r˜   r™   rš   r›   rœ   r   rž   rŽ   r%   r&   rH   r}   rº   )rs   r§   rÑ   r5   re   r   r   r   Úresample_ups  r¼   r  c                 C   rè   )Nr©   r¾   r¿   Fr#   rk   rÀ   z
abs((b-a))rÁ   rá   rÃ   rÄ   r   rF   r'   ré   r%   r&   rH   rÅ   rÆ   )Z
dist2boundZmaxdist2boundr5   re   r   r   r   Úinvert_dist2bound•  ræ   r  c                 C   s  t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d|¡ | dd¡ | d|¡ | d	d¡ | d
d¡ | dd¡ | d¡ ¡  	|  
¡ ¡ | d¡ ¡  	| 
¡ ¡ | d¡ ¡  	| 
¡ ¡ td| ¡  ¡  ƒ | ¡ sttdƒ dS tdƒ | d¡ 
¡ }|S )Nr©   r¾   r¿   Fr#   rÀ   zb*a/crÁ   rÃ   rÄ   r   rF   r'   ré   r%   r&   rH   rÅ   rÆ   )ZwindhighZwindlowZprecr   rÑ   r5   re   r   r   r   Údownscale_precip´  s*   r  c                 C   sø   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d¡ ¡  |  	¡ ¡ | d¡ ¡  | 	¡ ¡ | 
dd¡ | 
dt  ¡ ¡ | 
d	t  ¡ ¡ | 
d
d¡ td| ¡  ¡  ƒ | ¡ s`tdƒ dS tdƒ |dkro| d	¡ ¡ }|dkrz| d¡ ¡ }|S )Nrg   rh   ri   Fr'   r#   rk   ÚMINÚMAXZPCTL_VALg      I@r%   r&   rH   r   r>   )r   r	   r)   r   r*   rI   r/   rJ   rK   rm   rL   rM   r,   r-   r.   r`   )rã   rä   Zparam1r5   re   r   r   r   Úgrid_statisticsÔ  s*   r  c                 C   s’  t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d	¡¡ | d¡ ¡  |  	¡  
d
¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | d¡ ¡  |  	¡  
d¡¡ | dd¡ | d t  ¡ ¡ | d!t  ¡ ¡ td"| ¡  ¡  ƒ | ¡ s«td#ƒ dS td$ƒ |dkr»| d ¡ ¡ }|dkrÇ| d!¡ ¡ }|S )%Nrg   rh   ri   Fr'   r   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r#   rk   r  r  r%   r&   rH   )r   r	   r)   r   r*   rI   r/   rJ   rK   r1   r2   rL   rM   r,   r-   r.   r`   )ra   Zminmaxr5   re   r   r   r   Ú
get_minmaxô  sT   


r  c                 C   s  t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | dd¡ | d|¡ | dd	¡ | d
d¡ | dd¡ | dd¡ | d¡ ¡  	|  
¡ ¡ | d¡ ¡  	| 
¡ ¡ | d¡ ¡  	| 
¡ ¡ | d¡ ¡  	| 
¡ ¡ td| ¡  ¡  ƒ | ¡ s€tdƒ dS tdƒ | d¡ 
¡ }|S )Nr©   r¾   r¿   Fr#   r@   rÀ   rÁ   rá   rÃ   rÄ   r   rF   r'   r%   r&   rH   rÅ   rÆ   )Zz1Zz2Út1Út2r  r5   re   r   r   r   Útlapse+  s,   r"  c                 C   sÈ   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d¡ ¡  |  	¡ ¡ | 
dd¡ | 
d|¡ | 
d	|¡ | 
d
|¡ | 
d|¡ | 
d|¡ | ¡ sXtd| ¡  ¡  ƒ dS | d¡ ¡  d¡}|S )Nr¸   Z31z!Failed to create tool: Clip GridsFr'   ÚEXTENTr–   ÚXMINÚXMAXÚYMINÚYMAXZBUFFERúfailed to execute tool: ZCLIPPEDr   )r   r	   ÚGet_Toolr   r*   rI   r/   rJ   rK   rm   rL   r.   r,   r-   r1   r2   )rs   ÚxminÚxmaxÚyminÚymaxÚbufferr5   Údsr   r   r   ÚRun_Clip_GridsL  s"   r0  c                 C   sŽ   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d¡ ¡  | ¡ | 	d|¡ | 	dd¡ | 
¡ s>td	| ¡  ¡  ƒ dS | d
¡ ¡ }|S )NrŠ   rÉ   z-Failed to create tool: Clip Grid with PolygonFrz   rŒ   r#  Zpolygonsr(  r}   )r   r	   r)  r   r*   rI   r/   rJ   rK   rL   r.   r,   r-   r1   )ÚgridZpolygonr5   re   r   r   r   Úclip_with_polygoni  s   r2  c                 C   sž   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | d| ¡ | dd¡ | dd	¡ | d
d¡ | dd¡ | ¡ sFtd| ¡  	¡  ƒ dS | 
d¡ ¡ }|S )NrŠ   r9   z/Failed to create tool: Vectorising Grid ClassesFrµ   Z	CLASS_ALLzall classesZCLASS_IDr¯   ZSPLITz!one single (multi-)polygon objectZALLVERTICESr(  rŒ   )r   r	   r)  r   r*   rI   rL   r.   r,   r-   r/   r`   r   r   r   r   ÚRun_Vectorising_Grid_Classes€  s   r3  c                 C   sö   t  ¡  dd¡}|d u rtdƒ dS | ¡  ¡  | dd¡ | d|¡ | dd	¡ | d
d¡ | dd¡ | dd¡ | d¡ ¡  	|¡ | d¡ ¡  	| ¡ | d¡ ¡  	|¡ td| 
¡  ¡  ƒ | ¡ sntdƒ dS tdƒ | d¡ ¡ }|S r  )r   r	   r)   r   r*   rI   rL   r/   rJ   rK   r,   r-   r.   rm   )rã   rä   Zxobj3r  r5   re   r   r   r   Úgrid_calculator3™  s*   r4  )T)NN)NNNN)<ZPySAGAr   r   r   ÚdatetimeZos.pathZpsutilZshutilr   r   r8   r<   rQ   rf   ro   rt   rv   r   r€   r‰   r‘   r”   r¨   r®   r³   r·   r»   rÇ   rË   rÐ   rÒ   rÕ   rÝ   rß   rå   rç   rê   rë   rî   rï   rñ   rô   r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r0  r2  r3  r4  r   r   r   r   Ú<module>   sv   
!3P22 #)"!

$"!"  7!