ESA.instrument.ak_file_m
index
/home/lfeng/otool/ESA/instrument/ak_file_m.py

Reading  averaging kernel (AK) file to grdfile_desc_fl. 
 
Authors: L. Feng, Edinburgh University
History: v0.9, 2012.06.28
History: v0.95, 2013.02.24
   
Functions
=================================================
 
# file (data) access
 
1 . aod_rescale: rescale AOD axis 
2.  open_ak_file: set up class file_desc_cl for file access
3. read_ak_file: read AK  data into class file_desc_cl
4. load_ak_file: add AK data into class file desc when necessary 
5. get_ak: get ak values
6. close_ak_file: delete class file_desc_cl
7. get_ak_column_name:  check names of columns in AK file
 
# file manage 
 
8. get_ak_file_ref:     check ref number for AK files
9. decode_ak_ref:       decode ref number into viewmode and surface type 
 
10. get_ak_sur_type:     check names of surface types
11. get_ak_surf_type_id: check id of surface types
 
 
12. get_ak_viewmode:     check names of viewmode
13. get_ak_viewmode_id:  check id of viewmode

 
Modules
       
ESA.util.message_m
numpy
ESA.util.otool_grdfile_io
ESA.util.otool_obj
ESA.util.time_module

 
Functions
       
add_ak_data(fdesc, ref, **keywords)
Inputs:
=====================================
1. fdesc:<grdfile_io_cl>: class for file access
2. ref:<str/numeric>: reference for data sets read from file 
3. keywords:<dict>: extra parameters
----Reserved words
--->'ak_viewmode_dict':<dict>: dictionary for view mode
--->'ak_surf_type_dict': <dict>: dictionary for surface type
---> ax_colnm_lst: <list, t:str>: column name for horizontal axis
---> zname: <str>: axis name for vertical (e.g.,  log10(pressure)) axis
---> zval: <array, (nz,)>: vertical axis 
--->'replaces': <dict>: words to be replaced when decoding line 
 
 
Returns:
=====================================
1. idx:<int>: index of the data set with reference =ref.
aod_rescale(grd, aod_axnm='aod', scale_factor=10.0)
rescaling aod axis in a grid 
 
Inputs:
----------------------------------------------
1. grd:<gp_grid_cl>: grid 
2. aod_axnm:<str>: AOD axis name
3. scale_factor:<float>: scaling factor
 
Returns:
------------------------------------------
1. grd:<gp_grid_cl>: grid after axis aod is re-scaled
close_ak_file(fdesc)
Close fdesc file 
 
Inputs:
--------------------------------------------------
1. fdesc:<file_desc_cl>: class for file access
 
Returns:
1. None
decode_ak_ref(ref, **keywords)
check file reference
for averaging kernels 
 
Inputs:
----------------------------------------------------
1. ref:<int>: reference number 
2. keywords:<dict>: additional inputs 
---reserved words
--->'ak_viewmode_dict':<dict>: dictionary for view mode
--->'ak_surf_type_dict': <dict>: dictionary for surface type
 
 
 
Returns:
------------------------------------------------------
1. surface_type:<str>: surface type 
2. viewmode:<str>: view mode
get_ak_column_name()
check column names defined in AK file 
    
Returns
---------------------------------------
1. fl_colnm_lst:<list, str>: name of columns in file
get_ak_data(fdesc, osza, oaod, iviewmode, isurf_type, **keywords)
Read cloud data at given point 
 
Inputs:
----------------------------------------------
1. fdesc:<grdfile_io_cl>: file access 
2. osza:<array, (nob,)>: solar zenith angles of observation
3. oaod:<array, (nob,)>: aerosol optical depth 
 
4. iviewmode:<int/array>: view mode ID (see Note 1)
5. isurf_type:<int/array>:  surface type ID (see Note 1)
6. keywords:<dict>: extra inputs
 
---Reserved Entries
---common_ref:<str/numeric>: the reference shared by observations. 
--->'ak_viewmode_dict':<dict>: dictionary for view mode
--->'ak_surf_type_dict': <dict>: dictionary for surface type
---> ax_colnm_lst: <list, t:str>: column name for horizontal axis
---> zname: <str>: axis name for vertical (e.g.,  log10(pressure)) axis
---> zval: <array, (nz,)>: vertical axis 
--->'replaces': <dict>: words to be replaced when decoding line 
 
Returns:
------------------------------------------------
1. zval:<array, (nob, nz)>: vertical coordinate (logp)
2. ak:<array, (nob, nz)>: averaging kernel at the (osza, oaod)
 
 
 
Notes:
---------------------------------------------
1. if iviewmode and isurf_type are either given as a single integer or  
an array of the same size of osza
get_ak_file_ref(iviewmode, isurf_type, **keywords)
check file reference for averaging kernels 
 
Inputs:
----------------------------------------------------
1. isurf_type:<int/array>: type of surface 
---type includes: 
2. iviewmode: <int/array>: view model 
 
3. keywords:<dict>: extra information
 
Returns:
------------------------------------------------------
1. ref:<int/array>: reference number 
 
Notes:
---------------------------------
1, ref_no=1000*iviewmode+isurf_type
get_ak_surf_type(isurf_type, **keywords)
Get surface type 
 
 
Inputs:
---------------------------------------------------------
 
1. iviewmode:<int>: ID for view mode 
2. keywords:<dict> extra inputs
 
---reserved keywords: 
---> 'ak_surf_type_dict':<dict>: surface type for documented averaging kernel. 
 
 
Returns:
------------------------------------------------------------
1. surf_type:<str>: the matched surface_type
get_ak_surf_type_id(surf_type, **keywords)
Get surface type 
 
 
Inputs:
---------------------------------------------------------
 
1. surf_type:<str>: surface type 
 
2. keywords:<dict> extra inputs
 
---reserved keywords: 
---> 'ak_surf_type_dict':<dict>: surface type for documented averaging kernel. 
 
 
Returns:
------------------------------------------------------------
1. isurf_type:<int>: the matched surface type ID
get_ak_viewmode(iviewmode, **keywords)
Get viewmode.
 
Inputs:
---------------------------------------------------------
 
1. iviewmode:<int>: ID for view mode 
2. keywords:<dict> extra inputs
 
---reserved keywords: 
---> 'ak_viewmode_dict':<dict>: the view modes for documented averaging kernel. 
 
 
Returns:
------------------------------------------------------------
1. viewmode:<str>: the matched view mode
get_ak_viewmode_id(viewmode, **keywords)
Get viewmode ID
 
Inputs:
---------------------------------------------------------
 
1. viewmode:<str>: for view mode 
2. keywords:<dict> extra inputs
 
---reserved keywords: 
---> 'ak_viewmode_dict':<dict>: the view modes for documented averaging kernel. 
 
 
Returns:
------------------------------------------------------------
1. iviewmode:<Int>: the view model ID
open_ak_file(flnm, datapath, viewtype, viewmode, surface, yyyy, mm, dd, **keywords)
setup fdesc for average kernal data
Inputs:
-----------------------------------------------------------
1. flnm:<str>:   name of file (reserved for future use )
2. datapath:<str>: file path
3. viewtype:<str>: instrument type 
4. viewmode:<str>: nadir or glint view
5. surface:<str>: surface type
6. yyyy: <int>: year
7. mm: <int>: month
8. dd:<int>: day 
 
9. keywords:<dict>: extra inputs for file reading 
----Reserved words
--->'fl_colnm_lst':<list, t:str>: names of all columns in the
--->'ak_viewmode_dict':<dict>: dictionary for view mode
--->'ak_surf_type_dict': <dict>: dictionary for surface type
--->'delim':<str>: splitor in averaging kernel (text) file
 
 
Returns:
--------------------------------------------------------
1. fdesc:<file_desc_cl>: class for file access
read_ak_file(fdesc, **keywords)
Read averaging kernel data into fdesc
 
Inputs:
--------------------------------------------------
1. fdesc:<grdfile_desc_cl>: class for file access
2. keywords:<dict>: extra for data reading. 
 
---Reserved Entries
--->replaces: <dict, old:new>: texts should be replaced. 
---> zname: <str>: axis name for vertical (e.g.,  log10(pressure)) axis
---> zval: <array, (nz,)>: vertical axis 
---> ax_colnm_lst: <list, t:str>: column name for horizontal axis
 
Returns:
-------------------------------------
1. fdesc:<grdfile_desc_cl>:class for file access  
 
 
Notes:
-------------------------------------
1.fdesc.grd_lst and fdesc.gdata_lst will store 1) grid; and 2) gridded data

 
Data
        ak_axis_name = ['sza', 'aod']
ak_data_start = 1
ak_filename_format = 'aknorm_XSURFACEX.XEXTX'
ak_header_start = 0
ak_lc_stype_lst = ['conifer', 'conifer', 'conifer', 'conifer', 'conifer', 'conifer', 'conifer', 'conifer', 'conifer', 'conifer', 'conifer', 'conifer', 'conifer', 'conifer', 'conifer', 'soil', 'soil', 'soil', 'desert', 'ocean', ...]
ak_zname = 'lgp'
ak_zval = array([ 0. , 1.84509804, 2. , 2...6, 2.92941893, 2.97772361, 3. ])
def_ak_colnm_lst = ['sza', 'aod']
def_ak_pres = array([ 1., 70., 100., 200., 350., ..., 650., 750., 850., 950., 1000.])
def_ak_replaces = {'od': '0.'}
def_ak_surf_type = ['soil', 'ocean', 'snow', 'desert', 'conifer']
def_ak_surf_type_dict = {'conifer': 1, 'desert': 4, 'ocean': 0, 'snow': 2, 'soil': 3}
def_ak_viewmode = ['nadir', 'glint']
def_ak_viewmode_dict = {'glint': 1, 'nadir': 0}
def_aod_scale = 10.0