o
    Míh  ã                   @   sL   d dl Z d dlZd dlmZ d dlmZmZ d dlmZ G dd„ de	ƒZ
dS )é    N)ÚPath)Úget_dir_pathÚchecker)Ú	gen_scripc                   @   sª   e Zd ZdZdd„ Zedd„ ƒZejdd„ ƒZedd„ ƒZejd	d„ ƒZed
d„ ƒZ	e	jdd„ ƒZ	edd„ ƒZ
e
jdd„ ƒZ
edd„ ƒZejdd„ ƒZdd„ Zdd„ ZdS )Úgenerate_gridszx
    generate_grids class handles all type of grid & SCRIP file generation.
    Returns lists of SCRIP filenames.
 
    c                 K   sœ   |  dd ¡| _|  dd ¡| _|  dd ¡| _|  dd ¡| _|  dd ¡| _|  dd¡| _|  dd¡| _|  d	d
¡| _|  dd¡| _	t
 tt| jƒƒd ¡| _d S )NÚresÚiresÚfileÚinfileÚgridÚindÚ ÚoutÚxdimÚlonÚydimÚlatz	/log.ggen)ÚgetÚ_resÚ_iresÚ_fileÚ_infileÚ_gridÚ_indirÚ_outdirr   r   ÚloggingÚ	getLoggerÚstrr   Úlogger)ÚselfÚkwargs© r!   úT/global/cfs/cdirs/e3sm/www/hass877/share/emis_processing/FlexEmis/src/ggen/ggrids.pyÚ__init__   s   zgenerate_grids.__init__c                 C   ó   | j S ©N)r   ©r   r!   r!   r"   r      ó   zgenerate_grids.resc                 C   óN   dg| _ dd„ | d¡D ƒ}tt|ƒƒD ]
}| j  || ¡ q| j  d¡ d S )Nr   c                 S   ó   g | ]}|  ¡ ‘qS r!   ©Ústrip©Ú.0Úxr!   r!   r"   Ú
<listcomp>!   ó    z&generate_grids.res.<locals>.<listcomp>ú,)r   ÚsplitÚrangeÚlenÚappendÚremove©r   ÚvalZressÚzzr!   r!   r"   r      ó
   c                 C   r$   r%   )r   r&   r!   r!   r"   Úinres&   r'   zgenerate_grids.inresc                 C   r(   )Nr   c                 S   r)   r!   r*   r,   r!   r!   r"   r/   -   r0   z(generate_grids.inres.<locals>.<listcomp>r1   )r   r2   r3   r4   r5   r6   r7   r!   r!   r"   r;   *   r:   c                 C   r$   r%   ©r	   r&   r!   r!   r"   r   2   r'   zgenerate_grids.gridc                 C   sä   t | jƒt|ƒ }tt t|ƒ¡ƒdkrt t|ƒ¡| _d S tt t|ƒ¡ƒdkr3t t|ƒ¡| _d S | jd krpdg| _dd„ t|ƒ d¡D ƒ}tt|ƒƒD ]}t | jƒt|| ƒ }tt|ƒƒ | j 	|¡ qN| j 
d¡ d S d S )Nr   c                 S   r)   r!   r*   r,   r!   r!   r"   r/   ?   r0   z'generate_grids.grid.<locals>.<listcomp>r1   )r   r   r   r4   Úglobr   r2   r3   r   r5   r6   ©r   r8   ZdirvalÚfilesr9   r	   r!   r!   r"   r   6   s   
ùc                 C   r$   r%   r<   r&   r!   r!   r"   r	   F   r'   zgenerate_grids.filec                 C   sÖ   t | jƒt|ƒ }tt t|ƒ¡ƒdkrt t|ƒ¡| _d S tt t|ƒ¡ƒdkr3t t|ƒ¡| _d S dg| _dd„ t|ƒ d¡D ƒ}tt|ƒƒD ]}t | jƒt|| ƒ }tt|ƒƒ | j 	|¡ qI| j 
d¡ d S )Nr   c                 S   r)   r!   r*   r,   r!   r!   r"   r/   S   r0   z'generate_grids.file.<locals>.<listcomp>r1   )r   r   r   r4   r=   r   r2   r3   r   r5   r6   r>   r!   r!   r"   r	   J   s   c                 C   r$   r%   )r
   r&   r!   r!   r"   r
   Z   r'   zgenerate_grids.infilec                 C   sš   t t|ƒƒ ¡ st| jƒt|ƒ }tt|ƒƒ t t|ƒ¡| _| jg krKdg| _dd„ | d¡D ƒ}t	t
|ƒƒD ]
}| j || ¡ q8| j d¡ d S d S )Nr   c                 S   r)   r!   r*   r,   r!   r!   r"   r/   f   r0   z)generate_grids.infile.<locals>.<listcomp>r1   )r   r   Úis_filer   r   r   r=   r   r2   r3   r4   r5   r6   )r   r8   r?   r9   r!   r!   r"   r
   ^   s   
ûc                 C   sâ   g }| j dkr>| j D ]1}| j dt|ƒ ¡ t|| j| j| j| jd| j	| j
d ¡ }| j dt|ƒ ¡ | t|ƒ¡ q
|S | jD ]-}| j d¡ t| j|| j| j| jd| j	| j
d ¡ }| j dt|ƒ ¡ | t|ƒ¡ qA|S )a`  
        Generate SCRIP files from input NetCDF files or resolution.
        Input resolution:
            For SE grids integer values (4, 30, 120 etc.)
            For RLL grids use latitudexlongitude (64x128, 180x360 etc.)

        Returns
        -------
        in_file_list : List
            List of SCRIP file names for the input mesh.

        Nz
Input Resolution: T©r   r	   ÚpathZfdirr   Úncr   r   ú
Generated zT
Specifying input file suppresses resolution.
(Recommended for SE to RLL conversion))r   r   Úinfor   r   r   r   r   r   r   r   Úget_scrip_filer5   r   r   )r   Zin_file_listÚrÚfnameÚfr!   r!   r"   Úget_inp_scripk   s   

(
û(zgenerate_grids.get_inp_scripc                 C   sî   g }| j dkrB| j D ]5}| j d| ¡ | j d¡ t| j| j| j| j|d| j| j	d 
¡ }| j dt|ƒ ¡ | t|ƒ¡ q
|S | jD ]/}| j d| ¡ t|| j| j| j| j d| j| j	d 
¡ }| j dt|ƒ ¡ | t|ƒ¡ qE|S )aa  
        Generate SCRIP files from output grid file or resolution.
        Output resolution:
            For SE grids integer values (4, 30, 120 etc.)
            For RLL grids use latitudexlongitude (64x128, 180x360 etc.)

        Returns
        -------
        out_file_list : List
            List of SCRIP file names for the output mesh.

        Nz
Using specified grid file: z,
Specifying grid file suppresses resolution.TrA   rD   z
Output Resolution: )r   r   rE   r   r   r   r   r   r   r   rF   r   r5   r   )r   Zout_file_listÚgrH   rG   r!   r!   r"   Úget_out_scrip‡   s   

(
û(zgenerate_grids.get_out_scripN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   Úpropertyr   Úsetterr;   r   r	   r
   rJ   rL   r!   r!   r!   r"   r      s2    









r   )r=   r   Úpathlibr   Úsrc.ggen.utilsr   r   Zsrc.ggen.gen_scrip_filer   Úobjectr   r!   r!   r!   r"   Ú<module>   s    