用于与猫鼬可见性格式(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和数据的块存储。