TESによる水同位体データの解析についてまとめる。 TESデータの読み込み、水同位体比の計算、そして描画までについて。
同位体NICAMの気候値と比較するのが目的であるため、TES L3の月データを使用。
import h5py
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import matplotlib.colors as colors
from mpl_toolkits.basemap import Basemap
f1 = h5py.File('./TES-Aura_L3-H2O-M2007m07_F01_11.he5', 'r')
f2 = h5py.File('./TES-Aura_L3-HDO-M2007m07_F01_11.he5', 'r')
読み込んだデータは階層構造になっている。 データの階層構造がどのようになっているかは、下記のように確認できる。
for k in f:
print (k)
for k in f1['HDFEOS']['GRIDS']['NadirGrid']['Data Fields']:
print (k)
for k in f2['HDFEOS']['GRIDS']['NadirGrid']['Data Fields']:
print (k)
H2OやHDOのデータは下記のように取得できる。
h2o = f1['HDFEOS']['GRIDS']['NadirGrid']['Data Fields']['H2O'].value
hdo = f2['HDFEOS']['GRIDS']['NadirGrid']['Data Fields']['HDO'].value
取得したデータの構造は下記の通り。 左から高さ、緯度、経度の順番になっている。欠損値は-999.0
print h2o.shape
print np.max(h2o), np.min(hdo)
緯度、経度、気圧のデータも格納されているの取得可能。 それぞれのデータについても表示する。
lon = f1['HDFEOS']['GRIDS']['NadirGrid']['Data Fields']['Longitude'].value
lat = f1['HDFEOS']['GRIDS']['NadirGrid']['Data Fields']['Latitude'].value
pres = f1['HDFEOS']['GRIDS']['NadirGrid']['Data Fields']['Pressure'].value
print (pres)
print lon
print lat
TES観測による水素同位体比を計算する。 SMOWの値が必要で、Wordan et al. (2007). Natureによると、ここでの値はVSMOW=3.1110-4とのこと。 基本的にはδ=(R/VSMOW-1)1000で算定できる。
# 欠損値の処理
h2o[np.where(h2o==-999.)] = np.nan
hdo[np.where(hdo==-999.)] = np.nan
# Wordan2007では、850-550hPaにおける値を使用していたので、ここでも同様に算定。
ahdo = np.nanmean(hdo[0:2,:,:],axis=0)
ah2o = np.nanmean(h2o[0:2,:,:],axis=0)
iso1=ahdo/ah2o
iso1 = (iso1/(3.11*0.0001)-1)*1000
iso1[np.where(ah2o==0.)]=np.nan
print np.nanmax(iso1), np.nanmin(iso1)
LonMin, LonMax = np.min(lon), np.max(lon)
LatMin, LatMax = np.min(lat), np.max(lat)
plt.rcParams['figure.figsize'] = (12.0, 12.0)
fig = plt.figure(figsize = (8, 6))
setcmap = cm.rainbow
setcmap.set_under('#aaaaaa')
setcmap.set_over('#ff0000')
bounds = np.array([-250, -200, -150, -100, -50, 0, 50])
m=Basemap(projection='cyl',resolution='l',llcrnrlon=LonMin,llcrnrlat=LatMin,urcrnrlon=LonMax,urcrnrlat=LatMax)
m.drawcoastlines(color='k',linewidth=0.4)
cs = m.imshow(iso1,interpolation='nearest',cmap=setcmap,norm=colors.BoundaryNorm(bounds, 256))
cax = fig.add_axes([0.1,0.05,0.8,0.025])
cb = plt.colorbar(cs,cax,orientation='horizontal',extend='both')
cb.ax.tick_params(labelsize=14)
plt.show()
dat=iso1.reshape(-1)
plt.hist(iso1,normed=True)
plt.show()