折叠脉冲星搜索和定时数据的智能rfi去除算法

clfd的Python项目详细描述


CLFD

注意:现在可以通过pip install安装0.3.0版。现有用户:升级到0.3+之前,请阅读下面的安装说明

cl f d代表cleanfoldeddata,并实现用于折叠的脉冲星搜索和脉冲星定时数据的智能干扰消除算法。它们基于一种简单的离群点检测方法,只需要很少甚至不需要人工输入,这是它们有效性的主要原因。这些清理算法最初是为完成对高时间分辨率宇宙(HTRU)测量的重新处理而开发的,可以归功于发现了几个原本会被忽略的脉冲星。

引文

如果使用clfd有助于产生科学出版物的项目,请引用文章
"高时间分辨率宇宙调查XIV:通过GPU加速后处理发现23个脉冲星"

有关clfd算法的详细说明以及它们在真实帕克斯数据上可以做什么的可视化演示,请参见第2.4节。其思想是将每个轮廓(每个通道和每个子积分有一个轮廓)转换为一组代表性特征(例如标准差、峰峰差),并在生成的特征空间中标记异常值。从v0.2.2开始,clfd输出报告图,以可视化异常值标记过程以及应用于干净存档的二维时频掩码。这是在脉冲星J0735-62的帕克斯观测上运行的clfd的输出,其中红线界定了每个特征自动推断的可接受值范围:

转角图

profile mask

与现有数据格式的接口

清洗算法的实现与输入输出数据格式完全分离,可以方便地实现与任何折叠数据格式的接口。目前,clfd可以通过psrchive的python绑定读写psrfits归档文件。如果有任何感兴趣的表达,可以添加到presto的pfd存档的接口。

python版本

clfd的核心与python 2.7和python 3完全兼容,但请注意,psrchive的python绑定仅适用于大多数系统上的python<;=2.7。如果您计划在虚拟环境中安装clfd,使用conda或任何类似的替代方案。

依赖关系

严格依赖:

  • numpy
  • 熊猫

可选,但建议:

  • pytables:以HDF5格式保存和加载清理报告
  • matplotlib:打印清洁报告

安装

这里有三个主要的选择,按推荐的降序排列。 对现有用户的重要提示:0.3.0版中setup.py中的包名已从clfd pulsar更改为clfd。这有可能引起一些麻烦。从早于v0.3.0的版本升级时,用户应该首先,键入pip uninstall clfd pulsar,彻底卸载任何旧版本的clfd。另外,如果您创建了一个名为clfd的shell别名,该别名指向apps/cleanup.py,请将其删除,因为新的安装脚本现在会自动创建它(通过控制台脚本入口点)。

使用PIP安装

最简单的方法是使用pip install,它从python包索引中提取最新版本并安装所有缺少的依赖项:

pip install clfd

安装后,导入模块并运行单元测试:

In [1]: import clfd

In [2]: clfd.test()
.................
----------------------------------------------------------------------
Ran 17 tests in 1.261s

OK

注意,如果无法导入psrchive python绑定,那么将跳过所有与psrchive相关的测试,这些测试将在上面的输出中可见。如果pytables不可用,与保存/加载报告相关的测试也将被跳过。

最后,检查clfd的主命令行应用程序是否已放置在路径中:

clfd -h

您应该会看到应用程序的完整帮助,有关详细信息,请参见下一节。

可编辑安装

或者,您可以克隆存储库,并在clfd的基本目录中键入:

make install

这只是在编辑模式下运行pip install,这意味着您可以自由编辑代码。它还使用pip

安装所有必需的依赖项。

蟒蛇法

如果不允许您安装带有pip(在某些计算集群中可能是这种情况)或喜欢使用它的旧版本的软件包,则只需克隆存储库并将clfd的基本目录添加到pythonpath环境变量中,但是N:

  1. 您必须手动安装所需的依赖项。
  2. 主命令行应用程序clfd(见下文)将自动放置在您的路径中,这意味着您可能希望创建一个指向clfd/apps/cleanup.py的shell别名,以使生活变得愉快。

我强烈建议您使用上述方法之一,除非您没有其他选择。

命令行用法

如果安装顺利,命令行应用程序clfd现在应该出现在路径中,并且可以从任何地方调用。它指向apps子目录中的cleanup.py脚本,可以一次批处理多个文件/存档。有关命令行参数的详细帮助:

clfd -h

在绝大多数情况下,使用默认参数运行应该非常有效。例如,要处理一批psrchive存档文件,这些文件放在~/folded\u data目录中:

clfd ~/folded_data/*.ar

这将保持输入文件的完整性,并生成放置在同一目录中的已清理副本,并附加一个附加的扩展名.clfd。HDF5格式的报告文件也保存为basename_clfd_report.h5,其中basename是不带扩展名的存档文件名。报表存储clfd在存档上运行的所有输入和输出,它们可以在ipython中轻松地进行交互加载和操作。有关详细信息,请参见下面的"使用报表"部分。

>>>fromclfdimportReport>>>r=Report.load("SomeArchive_clfd_report.h5")>>>r.corner_plot()>>>r.profile_mask_plot()

可以使用--destike选项启用坏时间阶段容器的屏蔽。然而,它在默认情况下是被禁用的,因为它很可能会影响来自非常明亮的低dm脉冲星的脉冲,而且它在最坏的rfi环境中也会失败。使用该选项时请小心,并检查您是否从中获得了数据质量的提高。

交互式使用

命令行应用程序可能是完成任务的最实用的方法,但它只调用可访问的函数。对用户也是。检查或绘制中间输出可能有用。下面的示例展示了计算步骤:特征化、异常值标记和将异常值掩码应用到原始存档。

>>>importpsrchive>>>importclfd# Load folded archive produced with PSRCHIVE>>>cube=clfd.DataCube.from_psrchive("archive.ar")# Compute chosen profile features.# The output is a pandas DataFrame with feature names as columns, and (subint, channel) tuples as rows.>>>features=clfd.featurize(cube,features=('std','ptp','lfamp'))>>>print(features)stdptplfampsubintchannel000.0428260.2249360.78601210.0002100.0033670.00336720.0027790.0067570.00928330.0027780.0067570.020955............5710200.0507080.3097640.17127710210.0486850.2727270.92834910220.0552100.3145841.46364910230.0583380.3468011.077389[59392rowsx3columns]# From there, compute profile mask, optionally excluding some known bad channels from the analysis. # The example archive here contains Parkes BPSR data, and we know that the first 150 channels are always bad.>>>stats,mask=clfd.profile_mask(features,q=2.0,zap_channels=range(150))# 'stats' contains the 1st and 3rd quantiles, inter-quartile range and min/max acceptable values for each feature.# vmin = q1 - q x iqr# vmax = q3 + q x iqr# Where 'q' is the parameter passed to the profile_mask function above.>>>print(stats)stdptplfampq10.0372990.2028170.376125q30.0400310.2350030.918363iqr0.0027330.0321850.542239vmin0.0318330.138447-0.708352vmax0.0454970.2993732.002841# 'mask' is a boolean array of shape (num_subints, num_channels), whose value is True for bad profiles.# Any frequency channels specified via the 'zap_channels' argument above are forcibly set to True>>>mask.shape(58,1024)>>>maskarray([[True,True,True,...,False,False,False],[True,True,True,...,False,False,False],[True,True,True,...,False,False,False],...,[True,True,True,...,False,False,False],[True,True,True,...,False,False,False],[True,True,True,...,True,True,True]])# Applying the mask to the original archive and saving the output is a format-dependent operation. # For each format there is a corresponding Handler class in the clfd.handlers sub-module, which implements methods to apply a mask to the original file and save the output.>>>fromclfd.interfacesimportPsrchiveInterface# In PSRCHIVE, every profile has a weight parameter. This sets the weight of every bad profile to 0.# We can then save the clean data as a new archive in PSRFITS format.>>>PsrchiveInterface.apply_profile_mask(mask,archive)>>>PsrchiveInterface.save("archive_clean.ar",archive)# Optionally, we can then use the zero DM spike removal algorithm. Here the idea is to look for# outliers in the zero DM time-phase plot, and replace them by appropriate values (inferred # from the data) across the frequency dimension.>>>tpmask,valid_chans,repvals=clfd.time_phase_mask(cube,q=4.0,zap_channels=zap_channels)# 'mask' is a boolean array of shape (num_subints, num_phase_bins), whose value is True for bad time-phase bins.# 'valid_chans' is the list of channels NOT included in zap_channels# 'repvals' is a numpy array with the same shape as the data cube, containing appropriate replacement values>>>PsrchiveInterface.apply_time_phase_mask(tpmask,valid_chans,repvals,archive)>>>PsrchiveInterface.save("archive_cleanest.ar",archive)

使用报表

运行主命令行应用程序将生成报告文件,其中包含有关所执行清理的一些有用信息。报告存储在存档上运行的CLFD的所有输入和输出。注意:报告是开发中的一个非常重要的功能,将来可能会有所改变。此时(v0.2.2及更高版本),报表对象具有以下属性:

  • 频率:频道频率(以MHz为单位)
  • 功能名称:使用的功能名称列表
  • 功能:函数返回的pandas.dataframe
  • stats函数返回的pandas.dataframe
  • profmask:函数返回的布尔配置文件掩码。这是一个具有形状的numpy数组(num_subints,num_channels)
  • q mask:传递到profile\u mask()的tukey参数的值
  • zap_channels:传递到profile_mask()的zap_channels参数
  • tpmask:如果调用了函数(即当使用--destike选项调用清理可执行文件时),则由time-phase\u mask()返回的掩码。如果未调用time_phase_mask(),则tpmask将为none。否则,tpmask是具有形状的numpy数组(num_subints,num_phase_bin)。
  • qspike:传递给time_phase_mask()的tukey参数"q"的值。如果未调用time_phase_mask(),则tpmask将为none
  • 版本:用于生成此报表的CLFD版本。

有两种方法可以生成漂亮的曲线图,您可以看到上面的示例:

  • corner_plot():剖面特征和单个特征直方图的成对散点图。每个点代表一个单独的配置文件(每个(subint,channel)元组有一个配置文件),红线代表每个特性的内联(即可接受)值范围。任何超出内部范围的内容都在输出存档中标记为异常和零加权。
  • profile_mask_plot():二维剖面图,以及每个通道和每个子集成中屏蔽的数据部分。

在以后的版本中将添加更多的属性和绘图。

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

推荐PyPI第三方库


热门话题
java将一个节点拖到另一个不运行JavaFX的节点中   java如何在spring boot中创建完全自定义的查询   java Arraylist和ArrayListBlockingQueue之间的区别是什么?   java Weblogic会中断长时间运行的线程吗   java如何调用displayAd()方法?   使用数组在两个组之间进行java IPL匹配   java如何在Eclipse中的org下创建测试套件。朱尼特   java获取屏幕上任意点的鼠标坐标   正则表达式需要java正则表达式方面的帮助   如何使用Java获取Ram大小和硬盘大小?   java如何将所需长度设置为数组中的整数?   安卓应用程序启动前的java程序已终止   swing设置要在Java代码中打印的页边距   迭代期间java故障安全迭代器的删除   java如何在main中调用方法,以便它们在同一行上输出?   编译Java:尝试播放mp3文件时出错   java如何使用Spring数据Rest在POST调用中保存嵌入对象   java JAXWS如何在端点外部注入SecurityContext