U
    ôDëeXø  ã                   @   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djd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(dkdFdG„Z)dldHdI„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:dS )mé    )Úsaga_apiNTc                 C   sº   t  d¡ tjdkrRtjd d tjd  d tjd< t  ¡  tjd d d¡ nt  ¡  t d	¡d¡ t  d¡ | r®t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   úc/p/projects/montevitis/users/menz/CHELSA/scripts/chelsa_isimip3b_ba_1km/functions/saga_functions.pyÚLoad_Tool_Libraries    s    

"
r   c                    s  t  d¡ d}t‡ fdd„dD ƒƒr6t  ¡  tˆ ƒ¡}t‡ fdd„dD ƒƒr^t  ¡  tˆ ƒ¡}t‡ fdd„dD ƒƒr†t  ¡  tˆ ƒ¡}d	ˆ kr t  ¡  tˆ ƒ¡}t‡ fd
d„dD ƒƒrÈt  ¡  	tˆ ƒ¡}|d ksÜ| 
¡ dkrðtdˆ  d ƒ dS tdˆ  d ƒ |S )Nr   c                 3   s   | ]}|ˆ kV  qd S ©Nr   ©Ú.0Ús©Úpath_to_sagadatar   r   Ú	<genexpr>8   s     z load_sagadata.<locals>.<genexpr>)z.sgrdz.sg-grdzsg-grd-zc                 3   s   | ]}|ˆ kV  qd S r   r   r   r   r   r   r   <   s     )zsg-gdszsg-gds-zc                 3   s   | ]}|ˆ kV  qd S r   r   r   r   r   r   r   @   s     )z.txtz.csvz.dbfz.shpc                 3   s   | ]}|ˆ kV  qd S r   r   r   r   r   r   r   H   s     )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 kr$tdƒ dS | ¡ }|dƒ | ¡ |dƒ d¡ |dƒ d¡ |d	ƒ d
¡ td| ¡  ¡  ƒ | ¡ sŒt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     r6   c                 C   sÀ   t  ¡  dd¡}|d kr$tdƒ dS | ¡ }|dƒ | ¡ |dƒ d¡ |dƒ d¡ |d	ƒ d¡ |d
ƒ d¡ td| ¡  ¡  ƒ | ¡ sšt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-   r.   r/   r1   )Zncdffiler3   r4   r5   r   r   r   Úimport_ncdfl   s"    r:   c                 C   s0  t  ¡  dd¡}|d k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_Itemr/   r0   ÚSet_ParameterÚSG_Get_Create_Pointerr*   r+   r,   r.   )ÚFile1ÚFile2r3   ÚListr   r   r   Úpolynomial_trends…   sH    
rO   c                 C   sÊ  t  ¡  dd¡}|d k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| ¡  ¡  ƒ | ¡ svt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>   r?   r@   rA   rB   rC   rD   rE   é   é   é   é   é   é   é   é   é   é   é   é   é   ZEXTREMEr#   r$   rF   ZLAPSEZTEXTREMEZTIME)r   r	   r'   r   r(   rG   r-   rH   rI   r/   r0   rJ   r*   r+   r,   ÚasDataObject)ÚextremeZparamÚdictÚtimesZparam2r3   ÚDatar   r   r   Úextreme_lapserates¸   s„    



rc   c                 C   sº   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  |D ] }| d¡ ¡  | d|  ¡ q4| 	dd¡ | 	d	t  
¡ ¡ td
| ¡  ¡  ƒ | ¡ sštdƒ dS tdƒ | ¡ }|d	ƒ ¡ }|S )NÚstatistics_gridÚ4ú+Failed to create tool: Statistics for GridsFr%   Úlapser!   úB-Spline InterpolationÚMEANr#   r$   rF   )r   r	   r'   r   r(   rG   r-   rH   rI   rJ   rK   r*   r+   r,   ÚasGrid)r`   ra   r3   Ú	timestampr4   rb   r   r   r   Úget_mean_dicto  s"    rl   c                 C   sf  t  ¡  dd¡}|d k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!| ¡  ¡  ƒ | ¡ sFtd"ƒ dS td#ƒ | ¡ }|d ƒ ¡ }|S )$Nrd   re   rf   Fr%   r   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r!   rh   ri   r#   r$   rF   ©r   r	   r'   r   r(   rG   r-   rH   rI   r/   r0   rJ   rK   r*   r+   r,   rj   ©Úobjr3   r4   rb   r   r   r   Úget_mean$  sN    
rp   c                 C   sf  t  ¡  dd¡}|d k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!| ¡  ¡  ƒ | ¡ sFtd"ƒ dS td#ƒ | ¡ }|d ƒ ¡ }|S )$Nrd   re   rf   Fr%   r   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r!   rh   ZSUMr#   r$   rF   rm   rn   r   r   r   Úget_sumV  sN    
rq   c                 C   sÐ   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | d¡ ¡  |  	¡ ¡ | 
dd¡ | 
dd	¡ td
| ¡  ¡  ƒ | ¡ sˆtdƒ dS tdƒ | t  d¡¡ ¡  d¡}|d krÌ| t  d¡¡ ¡  d¡}|S )NÚpj_proj4Ú13ú:Failed to create tool: Change Longitudinal Range for GridsFÚINPUTÚ	DIRECTIONr   ÚPATCHTr#   r$   rF   ÚOUTPUT©r   r	   r'   r   r(   rG   r-   rH   rI   rj   rJ   r*   r+   r,   r.   r/   r0   )ro   r3   rN   r   r   r   Úchange_latlongˆ  s"    rz   c                 C   s®   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | d¡ ¡  |  	¡ ¡ | 
d|¡ | 
dd¡ td	| ¡  ¡  ƒ | ¡ sˆtd
ƒ dS tdƒ | t  d¡¡ ¡  d¡}|S )Nrr   rs   rt   Fru   rv   rw   Tr#   r$   rF   rx   r   ry   )ro   Ú	directionr3   rN   r   r   r   Úchange_latlong360§  s    r|   c                 C   s¸   t  ¡  dd¡}|d k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 )Nrr   r   z6Failed to create tool: Set Coordinate Reference SystemFZ
CRS_METHOSr   Ú	CRS_PROJ4ú$+proj=longlat +datum=WGS84 +no_defs ÚCRS_FILEr9   ÚCRS_EPSGéæ  ÚCRS_EPSG_AUTHÚEPSGÚPRECISEr%   r#   r$   rF   T)r   r	   r'   r   rJ   r-   rH   rI   rj   r*   r+   r,   )ro   r3   r   r   r   Úset_2_latlongÀ  s"    r…   c                 C   s´   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | d¡ ¡  |  	¡ ¡ | 
dd¡ | 
dd	¡ | 
d
d¡ td| ¡  ¡  ƒ | ¡ s”t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$   rF   ZPOINTS)r   r	   r'   r   r(   rG   r-   rH   rI   rj   rJ   r*   r+   r,   r.   ÚasShapes©ro   r3   rb   r   r   r   Úgridvalues_to_pointsÙ  s     r   c                 C   sÆ   t  ¡  dd¡}|d k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 )Nrr   Ú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   r9   r€   r   r‚   rƒ   r„   ÚSOURCEZTRANSFORM_ZTZCOPYr#   r$   rF   ZTARGET)
r   r	   r'   r   rJ   r*   r+   r,   r-   r‹   rŒ   r   r   r   Úreproject_shapeù  s&    r   c                 C   s2  t  ¡  dd¡}|d k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_splinere   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$   rF   ZTARGET_OUT_GRID)r   r	   r'   r   rJ   ÚGet_CellsizeÚGet_XMinÚGet_XMaxÚGet_YMinÚGet_YMaxÚGet_NXÚGet_NYr*   r+   r,   r(   rj   )ÚshapeÚtemplateZlevr3   r4   rb   r   r   r   Úmultilevel_B_spline  s4    
r¤   c                 C   sÂ   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | d|  ¡ ¡ | d| ¡ ¡ | dd¡ | d	d
¡ | dd¡ | dd¡ td| ¡  	¡  ƒ | 
¡ s¨t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$   rF   ÚDIR)r   r	   r'   r   r(   rG   rJ   rj   r*   r+   r,   r-   )ZuwindZvwindr3   rb   r   r   r   Úpolar_coords:  s$    rª   c                 C   sÞ   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | d| ¡ ¡ | d|  ¡ ¡ | dd¡ | d	t  ¡ ¡ | d
d¡ | dd¡ | dd¡ | dd¡ td| 	¡  
¡  ƒ | ¡ sÄt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$   rF   ZEFFECT©r   r	   r'   r   r(   rG   rJ   rj   rK   r*   r+   r,   r-   )ÚdirÚdemr3   rb   r   r   r   Ú
windeffectV  s(    r¯   c                 C   s„  t  ¡  dd¡}|d k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!| ¡  ¡  ƒ | ¡ sjtd"ƒ dS td#ƒ | d$¡ ¡ }|S )%Nrr   re   z7Failed to create tool: Coordinate Transformation (Grid)Fr}   r~   r   r9   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$   rF   ÚGRID)r   r	   r'   r   rJ   rj   r›   rœ   r   rž   rŸ   r    r¡   r*   r+   r,   r-   ©ro   r£   r3   rb   r   r   r   Úproj_2_latlongt  s@    
r³   c                 C   s8  t  ¡  dd¡}|d k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: ResamplingFru   r°   Z
SCALE_DOWNrh   r‘   r   r“   r”   r•   r–   r—   r˜   r™   rš   rŠ   r#   r$   rF   rx   ©r   r	   r'   r   r(   rG   r-   rH   rI   rj   rJ   r›   rœ   r   rž   rŸ   r    r¡   r*   r+   r,   r.   r/   r0   r²   r   r   r   Úresample  s0    
r·   c                 C   sÆ   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | 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!   rh   ÚFORMULAz	a*9.80665ÚNAMEÚgeopotentialÚFNAMEÚ
USE_NODATAr%   r#   r$   rF   ÚRESULT©r   r	   r'   r   r(   rG   rJ   r-   rH   rI   rj   r*   r+   r,   rŒ   r   r   r   Úcalc_geopotential¿  s$    rÁ   c                 C   sž   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | d|  ¡ ¡ | dt  ¡ ¡ | dd¡ td	| 	¡  
¡  ƒ | ¡ s„td
ƒ dS tdƒ | d¡ ¡ }|S )Nr´   Ú7z!Failed to create tool: Close GapsFru   r¿   Z	THRESHOLDçš™™™™™¹?r#   r$   rF   r¬   rŒ   r   r   r   Ú	closegapsÜ  s    rÄ   c                 C   sª   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | d|  ¡ ¡ | dt  ¡ ¡ | dd¡ | d	d
¡ td| 	¡  
¡  ƒ | ¡ stdƒ dS tdƒ | d¡ ¡ }|S )Nr´   Ú11ú*Failed to create tool: Change Data StorageFru   rx   ÚOFFSETr¨   ÚSCALEr«   r#   r$   rF   r¬   )r2   r3   rb   r   r   r   Úchange_data_storageõ  s     rÉ   c                 C   s¶   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | d|  ¡ ¡ | dt  ¡ ¡ | d|¡ | dd	¡ | d
d¡ td| 	¡  
¡  ƒ | ¡ sœtdƒ dS tdƒ | d¡ ¡ }|S )Nr´   rÅ   rÆ   Fru   rx   r‰   rÇ   r¨   rÈ   r«   r#   r$   rF   r¬   )r2   Útyper3   rb   r   r   r   Úchange_data_storage2  s"    rË   c           	      C   s  t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  |D ] }| d¡ ¡  | d|  ¡ q4|D ] }| d¡ ¡  |d|  ¡ qZ| 	d	| 
¡ ¡ | 	d
| 
¡ ¡ | 	d| 
¡ ¡ | 	dt  ¡ ¡ | 	dd¡ | 	dd¡ td| ¡  ¡  ƒ | ¡ sütdƒ dS tdƒ | d¡ 
¡ }|S )NrP   Z25z$Failed to create tool: Cloud OverlapFZCOVERSZccZHEIGHTSZgeoZGROUNDZWINDZCBASEZBLOCKSZINTERVALg     ˆ£@ZMINCOVERg      ð¿r#   r$   rF   ZCOVER)r   r	   r'   r   r(   rG   r-   rH   rI   rJ   rj   rK   r*   r+   r,   )	Ú
cloudcoverr¼   Z	cloudbaser®   r¯   Zlevelsr3   Úlevelrb   r   r   r   Úcloud_overlap+  s,    rÎ   c                 C   s®   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | d|  ¡ ¡ | dt  ¡ ¡ | d| ¡ ¡ | dd	¡ td
| 	¡  
¡  ƒ | ¡ s”tdƒ dS tdƒ | d¡ ¡ }|S )Nr´   Ú5úFailed to create tool: PatchingFÚORIGINALÚ	COMPLETEDÚ
ADDITIONALr!   r   r#   r$   rF   r¬   ©rL   rM   r3   rb   r   r   r   ÚpatchingL  s     rÕ   c                 C   s®   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | d|  ¡ ¡ | dt  ¡ ¡ | d| ¡ ¡ | dd	¡ td
| 	¡  
¡  ƒ | ¡ s”tdƒ dS tdƒ | d¡ ¡ }|S )Nr´   rÏ   rÐ   FrÑ   rÒ   rÓ   r!   r=   r#   r$   rF   r¬   rÔ   r   r   r   ÚpatchingBsplinef  s     rÖ   c                 C   sÞ   t  ¡  dd¡}|d k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!   rh   rº   z(a+1)/(b+1)r»   ÚCalculationr½   r¾   r%   r#   r$   rF   r¿   rÀ   ©Úobj1Úobj2r3   rb   r   r   r   Úcalculate_bias€  s&    rÛ   c                 C   sÞ   t  ¡  dd¡}|d k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!   rh   rº   za/(b*0.001)r»   r×   r½   r¾   r%   r#   r$   rF   r¿   rÀ   rØ   r   r   r   Úsimple_biasž  s&    rÜ   c                 C   sÞ   t  ¡  dd¡}|d k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!   rh   rº   za*br»   r×   r½   r¾   r%   ÚXGRIDSr#   r$   rF   r¿   rÀ   rØ   r   r   r   Úbiascor¼  s&    rÞ   c                 C   sÞ   t  ¡  dd¡}|d k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!   rh   rº   za/br»   r×   r½   r¾   r%   rÝ   r#   r$   rF   r¿   rÀ   rØ   r   r   r   Úbiascor2Ú  s&    rß   c                 C   sÆ   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | 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!   rh   rº   zifelse(a<1,a*1,a-a+1)r»   Útccr½   r¾   r%   r#   r$   rF   r¿   rÀ   ©rÙ   r3   rb   r   r   r   Úcapat1ø  s$    râ   c                 C   sÒ   t  ¡  dd¡}|d k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¥   r¸   r¹   Fr!   rh   rº   za*10000r»   rà   r½   r¾   r‰   r>   r%   r#   r$   rF   r¿   rÀ   rá   r   r   r   Úconvert2uinteger  s&    rã   c                 C   sÒ   t  ¡  dd¡}|d k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!   rh   rº   za*10r»   r½   r¾   r‰   r>   r%   r#   r$   rF   r¿   rÀ   )rÙ   r   r3   rb   r   r   r   Úconvert2uinteger104  s&    rä   c                 C   s¤   t  ¡  dd¡}|d kr$tdƒ dS | ¡ }| ¡  |dƒ ¡  | ¡ |dƒ |¡ |dƒ d¡ td	| 	¡  
¡  ƒ | ¡ sŠtd
ƒ dS tdƒ t  ¡  |¡ dS )Nr   rŽ   z%Failed to create tool: Export GeoTIFFFr%   r8   ZOPTIONSzCOMPRESS=DEFLATE PREDICTOR=2r#   r$   zokay - geotiff createdT)r   r	   r'   r   r(   rG   rH   rI   r)   r*   r+   r,   ZDelete_Tool)ÚOBJÚfnamer3   r4   r   r   r   Úexport_geotiffR  s     rç   c                 C   s>  dd l }dd l}dd l}|dk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œ}|dddg|
 ¡ 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Údirnamer1   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_ncdfm  s0    ÿ
þÿ
r   c                 C   s  t  ¡  dd¡}|d k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ƒ | d¡ 
¡ }|S )Nr¥   r¸   r¹   Fr!   rh   rº   z	d-b*(a-c)r»   r×   r½   r¾   r=   r%   rÝ   r#   r$   rF   r¿   rÀ   )r®   rg   Zreference_demÚtemperaturer3   rb   r   r   r   Úlapse_rate_based_downscalingŠ  s,    
r  c                 C   sö   t  ¡  dd¡}|d k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!   rh   rº   za+(b-1/b)*(1-c)r»   r½   r¾   r%   rÝ   r#   r$   rF   r¿   rÀ   )r  ZquotientZcloud_coverr   r3   rb   r   r   r   Útemp_srad_cc_correction­  s(    r  c                 C   sÞ   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | 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!   rh   rº   za*(1-0.75*b^3.4)r»   r½   r¾   r%   rÝ   r#   r$   rF   r¿   rÀ   )ZstotrÌ   r   r3   rb   r   r   r   Úsurface_radiationÎ  s&    r  c                 C   sÞ   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | 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!   rh   rº   r»   r×   r½   r¾   r%   r#   r$   rF   r¿   rÀ   )rÙ   rÚ   Úequr3   rb   r   r   r   Úgrid_calculatorî  s&    r  c                 C   sÆ   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | 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  r3   rb   r   r   r   Úgrid_calculator_simple  s$    r  c                 C   sÞ   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | 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!   rh   rº   r»   r×   r½   r¾   r%   rÝ   r#   r$   rF   r¿   rÀ   )rÙ   Zxobj2r  r3   rb   r   r   r   Úgrid_calculatorX)  s&    r	  c                 C   sÞ   t  ¡  dd¡}|d k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!   rh   rº   z
abs((a-b))r»   r×   r½   r¾   r%   rÝ   r#   r$   rF   r¿   rÀ   )r®   Zpblhr3   rb   r   r   r   Úcalc_dist2boundG  s&    r
  c                 C   s8  t  ¡  dd¡}|d k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µ   Fru   r°   ZSCALE_UPr‘   r   r“   r”   r•   r–   r—   r˜   r™   rš   rŠ   r#   r$   rF   rx   r¶   )ro   r£   rÊ   r3   rb   r   r   r   Úresample_upe  s0    
r  c                 C   sÞ   t  ¡  dd¡}|d k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!   rh   rº   z
abs((b-a))r»   r×   r½   r¾   r%   rÝ   r#   r$   rF   r¿   rÀ   )Z
dist2boundZmaxdist2boundr3   rb   r   r   r   Úinvert_dist2bound‡  s&    r  c                 C   sö   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | 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º   zb*a/cr»   r½   r¾   r%   rÝ   r#   r$   rF   r¿   rÀ   )ZwindhighZwindlowZprecr   rÊ   r3   rb   r   r   r   Údownscale_precip¥  s(    r  c                 C   sø   t  ¡  dd¡}|d k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rÞ| d	¡ ¡ }|dkrô| d¡ ¡ }|S )Nrd   re   rf   Fr%   r!   rh   ÚMINÚMAXZPCTL_VALg      I@r#   r$   rF   r   r<   )r   r	   r'   r   r(   rG   r-   rH   rI   rj   rJ   rK   r*   r+   r,   r^   )rÙ   rÚ   Zparam1r3   rb   r   r   r   Úgrid_statisticsÄ  s*    r  c                 C   s’  t  ¡  dd¡}|d k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"| ¡  ¡  ƒ | ¡ sVtd#ƒ dS td$ƒ |dkrv| d ¡ ¡ }|dkrŽ| d!¡ ¡ }|S )%Nrd   re   rf   Fr%   r   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r!   rh   r  r  r#   r$   rF   )r   r	   r'   r   r(   rG   r-   rH   rI   r/   r0   rJ   rK   r*   r+   r,   r^   )r_   Zminmaxr3   rb   r   r   r   Ú
get_minmaxä  sT    


r  c                 C   s  t  ¡  dd¡}|d k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¥   r¸   r¹   Fr!   r>   rº   r»   r×   r½   r¾   r%   r#   r$   rF   r¿   rÀ   )Zz1Zz2Út1Út2r  r3   rb   r   r   r   Útlapse  s*    r  c                 C   sÈ   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | d¡ ¡  |  	¡ ¡ | 
dd¡ | 
d|¡ | 
d	|¡ | 
d
|¡ | 
d|¡ | 
d|¡ | ¡ s°t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(   rG   r-   rH   rI   rj   rJ   r,   r*   r+   r/   r0   )ro   ÚxminÚxmaxÚyminÚymaxÚbufferr3   Údsr   r   r   ÚRun_Clip_Grids;  s"    r"  c                 C   sŽ   t  ¡  dd¡}|d k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 PolygonFru   rˆ   r  Zpolygonsr  rx   )r   r	   r  r   r(   rG   r-   rH   rI   rJ   r,   r*   r+   r/   )ÚgridZpolygonr3   rb   r   r   r   Úclip_with_polygonX  s    r$  c                 C   sž   t  ¡  dd¡}|d kr$tdƒ dS | ¡  ¡  | d| ¡ | dd¡ | dd	¡ | d
d¡ | dd¡ | ¡ sŒtd| ¡  	¡  ƒ dS | 
d¡ ¡ }|S )Nr†   r7   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(   rG   rJ   r,   r*   r+   r-   r^   rŒ   r   r   r   ÚRun_Vectorising_Grid_Classeso  s    r%  )T)NN)NNNN);ZPySAGAr   r   r   ÚdatetimeZos.pathZpsutilÚshutilr   r   r6   r:   rO   rc   rl   rp   rq   rz   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"  r$  r%  r   r   r   r   Ú<module>   sr   
!3P22 #)"!

#! " 7 