ARTS Microwave 数据库 及其 python Interface 的简介(二)

File I/O summary

上一期的链接:
ARTS Microwave 数据库 及其 python Interface 的简介(一)


二 ARTS 数据库的 Python Interface

2.1 Python Interface 环境搭建

python Interface 环境.PNG

如果要完整的使用所有的 Python Interface 的功能, 需要安装 python>=3.5 环境下的 netcdf4/numpy/typhon/scipy包(os包应该是python自带的), 这几个库包是可以通过conda 命令直接安装的(当然typhon也推荐手动编译安装)

$ conda install netcdf4 numpy typhon scipy

但是最后一个SHTns这个Fortran库比较特殊, 不能直接通过conda包管理机制安装,需要手动编译安装, SHTns库的作用是把球谐函数(勒让德函数系数存储形式的角函数转化为显式的角度函数)这个fortran库的安装需要依赖快速傅里叶变换库FFTW。

FFTW库有两种安装方式, 一种是手动编译安装, 安装时不要忘记打开一个Flag --enable-share, 否则的话只会生成静态库不会生成动态链接库,SHTns编译时无法链接上。

另一种更简单的方法则是直接使用Ubuntu自带的库包管理工具:

$ sudo apt-get install libfftw3-dev

安装完FFW3后编译SHTns Fortran 库:

shtns.PNG

笔者把 SHTns 直接安装在conda 环境包目录下

$ ./configure --enable-openmp --enable-python
$ make
$ make install 
$ python setup.py install --user

--enable-python 这个Flag 表示安装后能被当前的python环境所识别,集成到当前的python环境下可以被直接调用, 最后还需要用setup.py 安装为当前用户安装

以上环境配置好后就可以使用Python Interface了, Python Interface只是一个工具集, 不需要安装, 当然为了方便也可以为这个包配置一个环境变量方便引用, 更加常用的做法则是直接把这些小工具放到你的python工程里。

2.2 Python Interface 工具集

5- utils.PNG

准确地来说小工具只有4个文件 分别是目录下的 assp/rttov/sph/utils , demo_ssp4arts.py 是一个使用这4个工具文件地示例程序, sph这个文件我们暂时还用不到是有关球谐函数的转化,未来ARTS数据库更新了 Azimuthally random 的数据后或许会用到, 我们现在主要关注assp/rttov/utils 这些文件。

File I/O Summary.png

思来想去还是一张图最能说明整个ARTS database 文件I/O关系网

稍微注明几点, 剩下的各位自己对照着这张文件I/O总结图去看python源代码就能看懂了:

  1. MATLAB 的API基本和python的命名,功能相似, 只是目前有些功能还没有用 MATLAB 实现, 目前python依旧是最好用的database Interface, MATLAB的一些函数工具集和python同名, 就不在图上一一列出了

  2. Create Mix 可以实现把大粒子和小粒子混合生成新的RSSP, 需要输入不同粒子size下两种粒子的权重, 以及两个粒子的S(single scattering property),M(metadata)。 Fullset 中就有6个预置的混合粒子: 具体参考 StandardHabits 中的Readme 文件


    full set.PNG
  1. assp 的含义是 ARTS single scattering property, rssp 的含义是 rttov single scattering property, RTTOV只需要 single scattering albedo, extinction, asymmetry这些衍生量, 不需要完整的 Stokes 向量, 因此生成的.rssp 文件比原始的数据库文件小很多

  2. 可以使用assp的 assp_import_ssdb , 也可以使用 rttov.py中封装好的插值和输入函数 rttov.get_assp, 比较方便, 同时还可以获取 mD list


好了, 就介绍到这里,想要知道更加详细的读者就去审计源码, 不过知道上面这些基本够用

贴出来一个自己写的例程:rssp_test.py

生成自己需要的.rssp, 然后放到rttov12的artsdb文件夹下, 修改arts_mod.F90文件,加上自己的rssp文件, 重新编译RTTOV12, 就可以使用自己定制的粒子散射文件生成Mietable啦!

SSDBpath = ...

outpath = ...

filename = 'myrssp.rssp'


habID = 1 # habit ID
orient = 'totally_random' # orientation

minD = 0. # minimum size to extract
maxD = float("inf") # maximum size to extract
sizeparam = 'dmax' # size parameter to apply extraction limits on.
                    # available (param [unit]): 'dmax' [m], 'dveq' [m], 'mass' [kg]

fmin = 0. # minimum frequency to extract [Hz]
fmax = float("inf") # maximum frequency to extract

tmin = 0. # minimum temperature to extract [K]
tmax = float("inf") # maximum temperature to extract


try:
  import utils
  import assp
  import rttov
except ImportError:
  #try import of Python interface package from current location (by inserting
  # current location at start of sys.path)
  # (ie see, whether we are inside a DataInterfaces folder)
  #implicitly also imports (with lower priority) if Python interface package is
  # a subfolder to any of the other PYTHONPATH entries.
  try:
    import os.path
    os.path.sys.path.insert(0,'')
    from Python import utils
    from Python import assp
    from Python import rttov
  except ImportError:
    #finally, try DataInterfaces folder in SSDBpath
    db_interface_path =  os.path.join(os.path.dirname(SSDBpath),'DataInterfaces')
    #if os.path.isdir(db_interface_path):
    os.path.sys.path.append(db_interface_path)
    try:
      from Python import utils
      from Python import assp
      from Python import rttov
    except ImportError:
      raise Exception(\
        'Script requires utils and assp from the SSDB python interface,\n' + \
        'but import failed.\n' + \
        'Maybe you are neither in the SSDB DataInterfaces folder\n' + \
        'nor in its Python subfolder nor have added the folder to your PYTHONPATH?' )
except Exception as e:
  print('Script requires utils and assp from the SSDB python interface,\n' + \
        'but import failed with following error message:\n' + \
        '  %s%\n' %str(e))


# Init database
utils.ssdb_init( SSDBpath )

# Import data, with some cropping in size and freq
S,M,mD = rttov.get_assp( habID, orient, allow_nodata=False,
                             size_range=[minD, maxD], size_type=sizeparam,
                             freq_range=[fmin, fmax],
                             temp_range=[tmin, tmax] )

rssp = rttov.calc_rssp(S, M, mD)


rttov.write_rssp(rssp, filename,outpath)

你可能感兴趣的:(ARTS Microwave 数据库 及其 python Interface 的简介(二))