相对于开/闭场线边界的位置

ocbp的Python项目详细描述


Build StatusCoverage StatusDocumentation StatusDOI

概述

ocbpy是一个python模块,它可以在aacgm坐标和磁性之间进行转换。 相对于开阔地调整纬度和当地时间的坐标系 闭合场线边界(ocb)。这对统计特别有用 磁极的研究,其中相对于固定磁坐标的网格划分 系统会导致不同物理区域的平均值,例如极光 和极冠测量。此坐标系在:

ocbs必须从这个坐标变换的观测中获得。 在英国南极考察队的IMAGE Auroral Boundary data project 从三个极光仪器提供北半球ocb的位置 2000年5月3日03:01:42 UT-2002年8月22日00:01:28,尽管不是所有时间 这些文件中包含了对ocb的高质量估计。 推荐的选择条件作为默认值包含在ocboundary类中。

目前,支持来自以下数据集的文件:

这些例程可以用作为其他数据集编写例程的指南。

python版本

这个模块已经在Python2.7、3.4-3.6版本上进行了测试。本地测试 也执行了3.3,但下一版本可能不支持。

依赖关系

列出的依赖项使用以下版本进行测试:

  • 日期时间
  • 纽比(1.11.3、1.12.1、1.14.1)
  • 行车日志
  • 设置工具(36.0.1)

使用python模块unittest执行测试

安装

安装现在可以通过pypiPyPI version

    $ 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))

现在的数字应该是:

OCB Example

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java只创建一次Springbean,即使多次调用也是如此   AmazonWeb服务如何在AWS工作区上运行Java代码而不使用键?   java Lwjgl安装错误   java从URL读取文本文件并输出到TextView   图论Java显示错误Java。lang.OutOfMemoryError   多线程Java多线程执行超过循环边界   java我怎样才能使这段代码只打印最终答案?   返回字符的Java方法抱怨没有返回字符。   java失败于ServiceSuccess方法?   mysql错误:java。util。ArrayList无法转换为java。串   Java解压在处理xlsx文件后退出   java在Windows Live服务中使用RestEasy时,如何解组返回的联系人列表?   java需要嵌套if的建议   java使用Set属性在JSP:UseBean中设置javascript变量值   java为什么在println时即使有值显示也会出现空指针异常?   任何使用系统的替代方案。在用Gradle构建的java控制台应用程序中?   使用泛型的方法的java单元测试   x509certificate在JAVA中如何将证书与CSR进行匹配