折叠脉冲星搜索和定时数据的智能rfi去除算法
clfd的Python项目详细描述
CLFD
注意:现在可以通过 如果使用 有关 清洗算法的实现与输入输出数据格式完全分离,可以方便地实现与任何折叠数据格式的接口。目前, 严格依赖: 可选,但建议: 这里有三个主要的选择,按推荐的降序排列。
对现有用户的重要提示:0.3.0版中 最简单的方法是使用pip install,它从python包索引中提取最新版本并安装所有缺少的依赖项: 安装后,导入模块并运行单元测试: 注意,如果无法导入psrchive python绑定,那么将跳过所有与psrchive相关的测试,这些测试将在上面的输出中可见。如果 最后,检查 您应该会看到应用程序的完整帮助,有关详细信息,请参见下一节。 或者,您可以克隆存储库,并在 这只是在编辑模式下运行pip install,这意味着您可以自由编辑代码。它还使用 如果不允许您安装带有 我强烈建议您使用上述方法之一,除非您没有其他选择。 如果安装顺利,命令行应用程序 在绝大多数情况下,使用默认参数运行应该非常有效。例如,要处理一批 这将保持输入文件的完整性,并生成放置在同一目录中的已清理副本,并附加一个附加的扩展名 可以使用 命令行应用程序可能是完成任务的最实用的方法,但它只调用可访问的函数。对用户也是。检查或绘制中间输出可能有用。下面的示例展示了计算步骤:特征化、异常值标记和将异常值掩码应用到原始存档。 运行主命令行应用程序将生成报告文件,其中包含有关所执行清理的一些有用信息。报告存储在存档上运行的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
的输出,其中红线界定了每个特征自动推断的可接受值范围:与现有数据格式的接口
clfd
可以通过psrchive的python绑定读写psrfits归档文件。如果有任何感兴趣的表达,可以添加到presto的pfd存档的接口。python版本
clfd
的核心与python 2.7和python 3完全兼容,但请注意,psrchive的python绑定仅适用于大多数系统上的python<;=2.7。如果您计划在虚拟环境中安装clfd
,使用conda或任何类似的替代方案。依赖关系
numpy
熊猫
pytables
:以HDF5格式保存和加载清理报告
matplotlib
:打印清洁报告
安装
setup.py
中的包名已从clfd pulsar
更改为clfd
。这有可能引起一些麻烦。从早于v0.3.0的版本升级时,用户应该首先,键入pip uninstall clfd pulsar,彻底卸载任何旧版本的
clfd
。另外,如果您创建了一个名为clfd
的shell别名,该别名指向apps/cleanup.py
,请将其删除,因为新的安装脚本现在会自动创建它(通过控制台脚本入口点)。使用PIP安装
pip install clfd
In [1]: import clfd
In [2]: clfd.test()
.................
----------------------------------------------------------------------
Ran 17 tests in 1.261s
OK
pytables
不可用,与保存/加载报告相关的测试也将被跳过。clfd
的主命令行应用程序是否已放置在路径中:
clfd -h
可编辑安装
clfd
的基本目录中键入:make install
pip
蟒蛇法
pip
(在某些计算集群中可能是这种情况)或喜欢使用它的旧版本的软件包,则只需克隆存储库并将clfd
的基本目录添加到pythonpath
环境变量中,但是N: 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)
使用报表
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()
:二维剖面图,以及每个通道和每个子集成中屏蔽的数据部分。推荐PyPI第三方库