用于与猫鼬可见性格式(MVF)数据集交互的卡鲁阵列望远镜数据访问库

katdal的Python项目详细描述


卡特达尔

此包用作数据访问库以与块存储交互 以及猫鼬射电望远镜及其前身制作的hdf5文件 (KAT-7和边缘探测器),统称为猫鼬能见度 格式(MVF)数据集。它小心地使用内存,允许数据集 已检查并部分加载到内存中。数据集可以连接并 通过灵活的选择机制进行拆分。此外,它还提供了一个脚本 将这些数据集转换为CASA测量集。

快速教程

通过单个函数打开任何数据集以获取数据集对象:

importkatdald=katdal.open('1234567890.h5')

打开功能自动确定版本和存储位置 数据集的。版本大致与各种乐器对应:

- v1 : Fringe Finder (HDF5 file)
- v2 : KAT-7 (HDF5 file)
- v3 : MeerKAT (HDF5 file)
- v4 : MeerKAT (RDB file + chunk store based on objects in Ceph)

每个mvfv4数据集被分割成一个redis转储(aka rdb )文件,其中包含 以望远镜状态数据库和块存储形式的元数据 包含拆分成许多小块或块的可见性数据(通常 由网络上的ceph对象存储提供服务)。rdb文件是主条目 指向数据集,可直接从猫鼬SDP访问 如果您有适当的权限,请存档:

# This is just for illustration - the real URL looks a bit differentd=katdal.open('https://archive/1234567890/1234567890_sdp_l0.rdb?token=AsD3')

多个数据集(甚至是不同版本的)也可以连接起来 一起(只要它们具有相同的转储速率):

d=katdal.open(['1234567890.h5','1234567891.h5'])

通过打印对象检查数据集的内容:

print(d)

下面是一个典型的输出:

===============================================================================
Name: 1313067732.h5 (version 2.0)
===============================================================================
Observer: someone  Experiment ID: 2118d346-c41a-11e0-b2df-a4badb44fe9f
Description: 'Track on Hyd A,Vir A, 3C 286 and 3C 273'
Observed from 2011-08-11 15:02:14.072 SAST to 2011-08-11 15:19:47.810 SAST
Dump rate: 1.00025 Hz
Subarrays: 1
ID  Antennas                            Inputs  Corrprods
 0  ant1,ant2,ant3,ant4,ant5,ant6,ant7  14      112
Spectral Windows: 1
ID  CentreFreq(MHz)  Bandwidth(MHz)  Channels  ChannelWidth(kHz)
 0  1822.000         400.000          1024      390.625
-------------------------------------------------------------------------------
Data selected according to the following criteria:
subarray=0
ants=['ant1', 'ant2', 'ant3', 'ant4', 'ant5', 'ant6', 'ant7']
spw=0
-------------------------------------------------------------------------------
Shape: (1054 dumps, 1024 channels, 112 correlation products) => Size: 967.049 MB
Antennas: *ant1,ant2,ant3,ant4,ant5,ant6,ant7  Inputs: 14  Autocorr: yes  Crosscorr: yes
Channels: 1024 (index 0 - 1023, 2021.805 MHz - 1622.195 MHz), each 390.625 kHz wide
Targets: 4 selected out of 4 in catalogue
ID  Name    Type      RA(J2000)     DEC(J2000)  Tags  Dumps  ModelFlux(Jy)
 0  Hyd A   radec      9:18:05.28  -12:05:48.9          333      33.63
 1  Vir A   radec     12:30:49.42   12:23:28.0          251     166.50
 2  3C 286  radec     13:31:08.29   30:30:33.0          230      12.97
 3  3C 273  radec     12:29:06.70    2:03:08.6          240      39.96
Scans: 8 selected out of 8 total       Compscans: 1 selected out of 1 total
Date        Timerange(UTC)       ScanState  CompScanLabel  Dumps  Target
11-Aug-2011/13:02:14 - 13:04:26    0:slew     0:             133    0:Hyd A
            13:04:27 - 13:07:46    1:track    0:             200    0:Hyd A
            13:07:47 - 13:08:37    2:slew     0:              51    1:Vir A
            13:08:38 - 13:11:57    3:track    0:             200    1:Vir A
            13:11:58 - 13:12:27    4:slew     0:              30    2:3C 286
            13:12:28 - 13:15:47    5:track    0:             200    2:3C 286
            13:15:48 - 13:16:27    6:slew     0:              40    3:3C 273
            13:16:28 - 13:19:47    7:track    0:             200    3:3C 273

打印输出的第一段显示数据的静态信息 集合,包括观察者、转储速率和所有可用子阵列和光谱 数据集中的窗口。第二段(虚线之间)将亮显 活动的选择条件。最后一段显示动态信息 受选择的影响,包括整个可见性数组 形状、天线、频道频率、目标和扫描信息。

数据集是围绕三维可见性数组的概念构建的 具有时间、频率和相关积的维度。这反映在 数据集的形状

d.shape

它返回 (1054、1024、112) ,意味着1054转储1024个通道112 相关产品。

让我们选择数据集的子集:

d.select(scans='track',channels=slice(200,300),ants='ant4')print(d)

这将导致以下打印输出:

===============================================================================
Name: /Users/schwardt/Downloads/1313067732.h5 (version 2.0)
===============================================================================
Observer: siphelele  Experiment ID: 2118d346-c41a-11e0-b2df-a4badb44fe9f
Description: 'track on Hyd A,Vir A, 3C 286 and 3C 273 for Lud'
Observed from 2011-08-11 15:02:14.072 SAST to 2011-08-11 15:19:47.810 SAST
Dump rate: 1.00025 Hz
Subarrays: 1
ID  Antennas                            Inputs  Corrprods
 0  ant1,ant2,ant3,ant4,ant5,ant6,ant7  14      112
Spectral Windows: 1
ID  CentreFreq(MHz)  Bandwidth(MHz)  Channels  ChannelWidth(kHz)
 0  1822.000         400.000          1024      390.625
-------------------------------------------------------------------------------
Data selected according to the following criteria:
channels=slice(200, 300, None)
subarray=0
scans='track'
ants='ant4'
spw=0
-------------------------------------------------------------------------------
Shape: (800 dumps, 100 channels, 4 correlation products) => Size: 2.560 MB
Antennas: ant4  Inputs: 2  Autocorr: yes  Crosscorr: no
Channels: 100 (index 200 - 299, 1943.680 MHz - 1905.008 MHz), each 390.625 kHz wide
Targets: 4 selected out of 4 in catalogue
ID  Name    Type      RA(J2000)     DEC(J2000)  Tags  Dumps  ModelFlux(Jy)
 0  Hyd A   radec      9:18:05.28  -12:05:48.9          200      31.83
 1  Vir A   radec     12:30:49.42   12:23:28.0          200     159.06
 2  3C 286  radec     13:31:08.29   30:30:33.0          200      12.61
 3  3C 273  radec     12:29:06.70    2:03:08.6          200      39.32
Scans: 4 selected out of 8 total       Compscans: 1 selected out of 1 total
Date        Timerange(UTC)       ScanState  CompScanLabel  Dumps  Target
11-Aug-2011/13:04:27 - 13:07:46    1:track    0:             200    0:Hyd A
            13:08:38 - 13:11:57    3:track    0:             200    1:Vir A
            13:12:28 - 13:15:47    5:track    0:             200    2:3C 286
            13:16:28 - 13:19:47    7:track    0:             200    3:3C 273

与第一次打印相比,静态信息保持不变 而动态信息现在反映选定的子集。有很多 可能的选择标准,如下所示:

importkatdald=katdal.open('1234567890.h5')
0

请参见 数据集的docstring。选择 以获取更多详细信息(即 选择吗? 在ipython中)。注意只有一个子阵和一个光谱 必须选择窗口。

一旦选择了数据的子集,就可以访问数据并 数据集对象上的时间戳:

importkatdald=katdal.open('1234567890.h5')
1

注意 [:] 索引,因为 vis timestamp 属性是 特殊的lazyindexer对象,它只在 您使用索引,以免无意中将整个数组加载到内存中。

对于示例数据集,如果没有选择, vis 数组的形状为 (1054102112) 。时间维度用 d标记。时间戳 d.信道频率的频率维和相关积维 通过 d.corru products

数据集对象中的另一个关键概念是 传感器 。它们被命名为 从数据集中加载的任意数据的时间序列 ( 实际的 传感器)或在飞行中计算的( 虚拟的 传感器)。两种变体 通过 传感器缓存 访问(可用作 d.sensor )并缓存 在第一次进入之后。数据集对象还提供了方便 显示常用传感器的属性,如下图所示:

importkatdald=katdal.open('1234567890.h5')
2

其他有用的属性包括 ra dec lst mjd u v w 目标x 目标y 。这些都是一维的 根据当前选择动态更改长度的numpy数组。

与Katdal的前身(scape)一样,有一个 数据集。 这允许您单步执行数据集中的扫描。它返回 每次迭代时扫描索引、扫描状态和目标对象,并更新 数据集上的活动选择,仅包括当前扫描。 也可以使用 dataset.compscans 生成器,生成复合扫描索引label 为了方便起见,在每次迭代中都要首先确定目标。这两个迭代器也可以 一起用于遍历数据集结构:

importkatdald=katdal.open('1234567890.h5')
3

最后,数据集中的所有目标(或字段)都存储在一个目录中 可在 d.catalogue 上获得,原始HDF5文件仍可以通过 对于单个文件数据集(v3 或更大的)。在v4数据集上, d.source 提供对底层的访问 元数据的telstate和数据的块存储。

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

推荐PyPI第三方库


热门话题
另一个布局上的java Access文本视图   安卓在Java中,我什么时候应该用*导入整个包,而不是从包中导入单个对象?   JavaSpringMVC:请解释@RequestParam和@ModelAttribute之间的区别   java Flyway Ant构建未迁移   java“没有可供下载的文件”   如何解决java静态名称冲突?   我是否需要框架来补充JavaEE6、JSF2 WebApp?哪一个?   java如何传递HttpServletRequest参数?   只有java的视频不会播放声音。为什么?   java在Maven3中做这样的属性重写工作吗?   java计算Android中两个标记之间的距离   Javascript页面加载中的java复选框持久性问题   java序列化lambda函数的映射   java使用jersey、maven和eclipse配置swagger   java我可以在oncreate方法之外使用setContentView吗?   java在使用JAXRS响应类返回实体时遇到异常   java规范了加密和解密文本的文本编写方法   java如何更改ChoiceBox的默认大小?   java在Android上暂时禁用PIN/密码锁