相对于开/闭场线边界的位置
ocbp的Python项目详细描述
概述
ocbpy是一个python模块,它可以在aacgm坐标和磁性之间进行转换。 相对于开阔地调整纬度和当地时间的坐标系 闭合场线边界(ocb)。这对统计特别有用 磁极的研究,其中相对于固定磁坐标的网格划分 系统会导致不同物理区域的平均值,例如极光 和极冠测量。此坐标系在:
Chisham,G.(2017),高纬度发展的新方法 电离层气候和经验模型,地球物理杂志 研究:空间物理学, doi:10.1002/2016JA023235.
ocbs必须从这个坐标变换的观测中获得。 在英国南极考察队的IMAGE Auroral Boundary data project 从三个极光仪器提供北半球ocb的位置 2000年5月3日03:01:42 UT-2002年8月22日00:01:28,尽管不是所有时间 这些文件中包含了对ocb的高质量估计。 推荐的选择条件作为默认值包含在ocboundary类中。
目前,支持来自以下数据集的文件:
- SuperMAG(在http://supermag.jhuapl.edu提供)
- 超暗涡度(在gchi@bas.ac.uk与气相色谱接触)
这些例程可以用作为其他数据集编写例程的指南。
python版本
这个模块已经在Python2.7、3.4-3.6版本上进行了测试。本地测试 也执行了3.3,但下一版本可能不支持。
依赖关系
列出的依赖项使用以下版本进行测试:
- 日期时间
- 纽比(1.11.3、1.12.1、1.14.1)
- 行车日志
- 设置工具(36.0.1)
使用python模块unittest执行测试
安装
$ pip install ocbpy
您也可以签出存储库并自行安装:
$ git clone git://github.com/aburrell/ocbpy.git;
将目录切换到存储库文件夹并运行setup.py文件。为了 本地安装在“install”之后使用“-user”标志。
$ cd ocbpy/
$ python setup.py install
要运行单元测试,
$ python setup.py test
示例
在ipython中,运行:
import numpy as np
import ocbpy
然后初始化一个ocb类对象。这使用默认的图像fuv文件和 需要几分钟才能加载。
ocb = ocbpy.ocboundary.OCBoundary()
print ocb
输出应如下:
Open-Closed Boundary file: ~/ocbpy/ocbpy/boundaries/si13_north_circle
Source instrument: IMAGE
Open-Closed Boundary reference latitude: 74.0 degrees
219927 records from 2000-05-05 11:35:27 to 2002-08-22 00:01:28
YYYY-MM-DD HH:MM:SS NumSectors Phi_Centre R_Centre R R_Err Area
-----------------------------------------------------------------------------
2000-05-05 11:35:27 4 356.93 8.74 9.69 0.14 3.642e+06
2000-05-05 11:37:23 5 202.97 13.23 22.23 0.77 1.896e+07
2002-08-21 23:55:20 8 322.60 5.49 15.36 0.61 9.107e+06
2002-08-22 00:01:28 7 179.02 2.32 19.52 0.89 1.466e+07
得到第一个好的ocb记录,它将是记录索引27。
ocb.get_next_good_ocb_ind()
print ocb.rec_ind
27
现在绘制OCB的位置
首先初始化该图
import matplotlib.pyplot as plt
f = plt.figure()
ax = f.add_subplot(111, projection="polar")
ax.set_theta_zero_location("S")
ax.xaxis.set_ticks([0, 0.5*np.pi, np.pi, 1.5*np.pi])
ax.xaxis.set_ticklabels(["00:00", "06:00", "12:00 MLT", "18:00"])
ax.set_rlim(0,25)
ax.set_rticks([5,10,15,20])
ax.yaxis.set_ticklabels(["85$^\circ$","80$^\circ$","75$^\circ$","70$^\circ$"])
在AACGM坐标系中标记圆中心的位置
phi_cent_rad = np.radians(ocb.phi_cent[ocb.rec_ind])
ax.plot([phi_cent_rad], [ocb.r_cent[ocb.rec_ind]], "mx", ms=10, label="OCB Pole")
在绘图时计算OCB在AACGM坐标中的位置
lon = np.arange(0.0, 2.0 * np.pi + 0.1, 0.1)
del_lon = lon - phi_cent_rad
lat = ocb.r_cent[ocb.rec_ind] * np.cos(del_lon) + np.sqrt(ocb.r[ocb.rec_ind]**2 - (ocb.r_cent[ocb.rec_ind] * np.sin(del_lon))**2)
ax.plot(lon, lat, "m-", linewidth=2, label="OCB")
ax.text(lon[35], lat[35]+1.5, "74$^\circ$", fontsize="medium", color="m")
为OCB坐标添加参考标签
lon_clock = list()
lat_clock = list()
for ocb_mlt in np.arange(0.0, 24.0, 6.0):
aa,oo = ocb.revert_coord(74.0, ocb_mlt)
lon_clock.append(oo * np.pi / 12.0)
lat_clock.append(90.0 - aa)
ax.plot(lon_clock, lat_clock, "m+")
ax.plot([lon_clock[0], lon_clock[2]], [lat_clock[0], lat_clock[2]], "-", color="lightpink", zorder=1)
ax.plot([lon_clock[1], lon_clock[3]], [lat_clock[1], lat_clock[3]], "-", color="lightpink", zorder=1)
ax.text(lon_clock[2]+.2, lat_clock[2]+1.0, "12:00",fontsize="medium",color="m")
ax.text(lon[35], olat[35]+1.5, "82$^\circ$", fontsize="medium", color="m")
现在添加点在aacgm坐标中的位置,计算 相对于OCB的位置,并在图例中输出两个坐标
aacgm_lat = 85.0
aacgm_lon = np.pi
ocb_lat, ocb_mlt = ocb.normal_coord(aacgm_lat, aacgm_lon * 12.0 / np.pi)
plabel = "Point (MLT, lat)\nAACGM (12:00,85.0$^\circ$)\nOCB ({:.0f}:{:.0f},{:.1f}$^\circ$)".format(np.floor(ocb_mlt), (ocb_mlt - np.floor(ocb_mlt))*60.0, ocb_lat)
ax.plot([aacgm_lon], [90.0-aacgm_lat], "ko", ms=5, label=plabel)
ax.legend(loc=2, fontsize="small", title="{:}".format(ocb.dtime[ocb.rec_ind]), bbox_to_anchor=(-0.4,1.15))
现在的数字应该是: