没有合适的资源?快使用搜索试试~ 我知道了~
≥ ≥ ≥≥软件X 12(2020)100634原始软件出版物SWIGLAL:LALSuite引力波数据分析库的Python和Octave接口卡尔·韦特ARC引力波发现卓越中心(OzGrav)和引力天体物理中心,澳大利亚国立大学,堪培拉,ACT 2600澳大利亚马克斯·普朗克引力物理研究所(阿尔伯特·爱因斯坦研究所),D-30167 Hannover,Germanyar t i cl e i nf o文章历史记录:收到2020年收到修订版2020年10月4日接受2020年关键词:引力波软件包装Python八度a b st ra ct用C语言编写的LALSuite数据分析库实现了成功探测引力波的关键例程,例如描述两个黑洞或两颗中子星合并的模板波形。SWIGLAL是LALSuite的一个组件,它为Python和Octave提供接口,使LALSuite例程可以直接从这些语言编写的脚本它使现代引力波数据分析软件(用于引力波的首次探测)能够用Python编写,从而受益于其易于开发和丰富的功能集,同时仍然可以访问LALSuite提供的例程的计算速度和科学可信度。©2020作者由爱思唯尔公司出版这是CC BY许可下的开放获取文章(http://creativecommons.org/licenses/by/4.0/)中找到。代码元数据当前代码版本6.21.0用于此代码版本的代码/存储库的永久链接https://github.com/ElsevierSoftwareX/SOFTX_2020_119法律代码许可证GPL-2.0使用git的代码版本控制系统软件代码语言、工具和服务使用C和SWIG指令、Python、Octave、LALSuite依赖性编译要求、操作环境依赖性SWIG 2.0.12、Python 2.6、NumPy 1.3、Octave 3.2.0如果可用,链接到开发人员文档/手册请参阅https://github.com/kwwette/swiglal/blob/master/README.md有关问题的支持电子邮件,请参阅https://github.com/kwwette/swiglal/blob/master/README.md1. 动机和意义编程语言的选择是科学软件设计中的一个关键决定。像C这样的语言提供了程序员和机器架构之间的低层次抽象,并被编译为机器代码以获得最佳性能。然而,缺乏抽象给开发人员带来了更大的负担,需要手动处理低级任务,例如内存管理,这会降低手头的科学问题。高级脚本语言,其中Python [1]和Octave [2]是两个例子,从机器架构中提供了更高层次的抽象,使开发人员能够专注于算法,减少开发时间,并促进新想法的快速原型化他们还联系人:ARC引力波传播卓越中心(OzGrav)和引力天体物理中心,澳大利亚国立大学,堪培拉,ACT 2600澳大利亚。电子邮件地址:karl. anu.edu.au。https://doi.org/10.1016/j.softx.2020.100634提供更丰富的特性集,这些特性可以内置于语言中,也可以通过从中央存储库下载的易于安装的软件包获得然而,它们通常不会编译成机器代码,因此性能可能与低级机器代码所提供的性能不匹配。通常,新的软件包将希望利用现有的库,这些库提供特别有效、经过良好测试并且被更广泛的科学界信任和/或难以重新实现的例程。在这种情况下,开发人员可能会被限制使用特定的语言-与现有库相同的这个问题的一个解决方案是围绕现有的库编写一个软件包装器,然后公开其例程,以便可以从所选的编程语言例如,软件包装器可以使开发人员能够使用C编写的库,同时还受益于开发的便利性和高级语言(如Python)提供的丰富功能集2352-7110/©2020作者。由爱思唯尔公司出版这是CC BY许可下的开放获取文章(http://creativecommons.org/licenses/by/4.0/)。可在ScienceDirect上获得目录列表SoftwareX期刊主页:www.elsevier.com/locate/softxK. Wette软件X 12(2020)1006342∼表1由SWIGLAL接口导出到LALSuite 6.67版库的常量、变量、函数和类的数量,以及每个库的C代码(C)的估计总行数(非空白、非注释)。请注意,SWIGLAL为LAL和LALSupport库提供了一个接口,因此这两个库是一起计算的。常数变量功能类LOCLAL(支持)71264174518238kLALBurst942322kLALFrame544254127kLAL推断45414162228kLALInspiral20453585833kLALMetaio55451183kLALPulsar156962314832kLAL模拟209427141292k总14441734184454236K引力波的第一次探测,来自两个黑洞的合并[3]和两个中子星[4],通过许多其他进步,数据分析软件的仔细实施和严格测试成为可能。LALSuite(LSC Algorithm Library Suite; [5])是一个用于引力波数据分析的软件例程集合,用C语言编写,自2000年以来开发截至6.67 [6]版,LALSuite提供了230个可执行文件,9个库,它们共同导出了大量的符号,并代表了数十万行C代码的重要代码库(表1)。它为固定宽度的整数、浮点数和复数提供了原子数据类型;还提供了称为“结构”的复合数据类型,以及创建、销毁和操作它们的函数。(C中的结构在概念上等同于Python和其他高级语言中的类;本文将在下文中使用术语LALSuite库提供了大量经过良好测试的例程用于引力波数据分析,特别是用于寻找双黑洞和双中子星,这已经由LIGO科学合作组织和Virgo合作组织的成员仔细审查。这些包括这些事件的模板信号波形,正如广义相对论所预测的那样,它们往往是复杂的数学表达式[例如,[7]这是一个耗时的实施和验证。最近的引力波数据分析软件试图利用Python的易于开发和广泛的包库;然而,如果不能访问LALSuite例程,开发人员将面临在Python中重新实现和重新验证例程的额外负担。本文介绍了SWIGLAL,它提供了Python和Octave接口到LALSuite提供的库。这些接口使现代引力波数据分析软件能够受益于高级语言编程的优势,同时保留对可信代码库的访问和LALSuite代码库的计算效率。2. 软件描述和示例SWIGLAL接口的生成使用SWIG(Simplified Wrapper andInterface Generator; [8] ) , 一 个 软 件 开 发 工 具 。 SWIG 解 析C/C++库的头文件,并识别库导出的符号。然后,它生成将库与各种高级语言(包括Python和Octave)连接所需的包装器代码。因为它直接将C/C++头文件作为输入,SWIG不需要为每个导出的符号专门编写额外的代码。考虑到LALSuite导出的符号数量很大(表1),SWIG提供的自动化功能减轻了LALSuite开发人员的维护负担。SWIG包装器代码可以是通过添加修改SWIG生成的包装器代码的指令来进一步定制。例如,可以将特定的指令应用于每个类,以便添加构造函数和析构函数。然而,SWIG并没有提供一个通用的框架来自动化许多指令对任意类别的符号的应用为了完全自动化接口生成,SWIGLAL运行了两次SWIG:第一次作为一个简单的C/C++头解析器,然后作为一个包装器代码生成器。工作流程如下:1. 对于每个LALSuite库,SWIGLAL生成一个基本的SWIG接口,该接口简单地合并了该库提供的所有C头文件。2. 基本SWIG接口通过其-xml选项输入到SWIG由LALSuite库标题导出的所有符号3. XML语法树是自定义Python脚本generate_swig_iface.py的输入。 它解析XML语法 树,收集有关导出的符号的信息,并生成完整的SWIG接口,该接口使用附加的SWIG指令来增强基本接口,以实现所需的功能。4. 完整的SWIG接口通过其-python或-octave选项输入到SWIG,以分别生成Python或Octave的包装器代码,然后将其编译为dy-namically命名的modules模块. Python模块使用import指令加载;Octave模块通过简单地调用库的名称来加载,例如该工作流在LALSuite使用的GNU Autoconf/Automake构建系统中作为宏和构建规则的集合来实现。Autoconf宏执行配置任务 , 例 如 查 找 swig 二 进 制 文 件 的 兼 容 版 本 , 并 确 定 构 建Python/Octave模块所需的C/C++预处理器/编译器/链接器标志Automake 宏 实 现 了 构 建 基 本 和 完 整 SWIG 接 口 以 及Python/Octave模块的工作流,如上所述。SWIGLAL的一个关键设计目标是,在所支持的高级语言中,接口应该尽可能类似于用该语言编写的本机代码。 为此,SWIGLAL提供了一个自定义SWIG指令库,这些指令修改包装器代码,以在本机Python/Octave代码的预期行为和C语言LALSuite库的语义之间进行调解。接口文件SWIGCommon.i提供了所有语言中使用的通用指令,而SWIG-Python.i和SWIGOctave.i分别提供特定于Python和Octave接口的每个LALSuite库还可以提供特定于图书馆的指令。有时也需要将SWIG指令直接添加到C头文件中,以便进一步修改特定函数或类的包装器代码SWIGLAL提供了许多宏,这些宏在SWIGCommon.i中定义,然后添加到#ifdefSWIG中的C头文件中。. . #endif块,并包装在一个共同的宏,SWIGLAL();图。1显示了一个使用示例。这种方法使添加到C头文件中的与SWIG相关 的 代 码 尽 可 能 简 洁 。 图 1 提 供 了 一 个 示 例 : 公 开LALREAL4Vector所需的大量代码类作为本机脚本语言数组隐藏在ARRAY_STRUCT_1D()宏。本节的其余部分描述了在实现SWIGLAL接口的目标时遇到的一些问题与原生Python/Octave代码非常相似,以及如何解决这些问题。K. Wette软件X 12(2020)1006343∼Fig. 1. 在 LAL 类 REAL4Vector 的 包 装 中 使 用 SWIGLAL ( ) 宏 的 示 例 。ARRAY_STRUCT_1D()宏将REAL4Vector类的“data "字段公开图2a. LAL类LIGOTimeGPS的%swiglal_struct_extend()宏的扩展示例。该类只包含静态字段,因此SWIGLAL为该类提供了构造函数、复制构造函数和析构函数。SWIG%extend指令将方法添加到现有类;解释以类命名的方法作为建造者,而方法 命名 后,带有前缀""的类的%swiglal_new_instance ( )宏 使 用 XLALCalloc ( ) 分 配 新 的 LIGOTimeGPS 实例 ;%swiglal_new_copy ( ) 宏 创 建 现 有 LIGO-TimeGPS 实 例 的 副本; %swiglal_struct_call_dtor()宏调用析构函数XLALFree()。图2b. LALREAL4Vector类的%swiglal_struct_extend()宏的扩展示例。因为这个类指向动态分配的内存中的“data”字段(图10)。1),只提供了析构函数,它调用析构函数XLALDestroyREAL4Vector()。2.1. 类构造函数和析构函数根据内存需求,可以将LALSuite类分为两组。只包含静态字段且不指向动态分配内存的类可以解析树以确定析构函数. . ’’ exists for 然后,脚本输出对宏的调用%swiglal_struct_extend()图2a和图2b示出了针对仅具有静态字 段 的 类 ( LIGOTimeGPS ) 和 具 有 动 态 分 配 的 内 存 的 类(REAL4Vector)的%swiglal_struct_extend()的扩展的两个示例。提供正确的析构函数是必要的,以使用户从手动内存管理中解放出来,高级语言预计将处理这些内存管理。为带有静态字段的类提供构 造 函 数 提 供 了 从 高 级 语 言 创 建 新 类 的 方 法 , 而 无 需 访 问XLALMalloc()等低级内存函数。2.2. 内存所有权范式LALSuite假定所有类实例都被引用一次。当一个类实例被销毁时,所有与该实例相关的动态分配的内存都被释放,包括父实例所指向的其他类的任何实例;换句话说,父实例然而,高级语言允许对一个特定的类实例进行多个引用,并且只有在没有对该实例的引用时才释放内存。类实例负责释放它们自己的内存,但不图图3a和3b说明了这些不同之间的紧张关系存 储 器 所 有 权 的 不 同 范 例 可 能 潜 在 地 引 起 问 题 。LALREAL4TimeSeries类包含一个指向REAL4Vector类的实例的指针,2及其构造函数,结构函数创建和销毁与REAL4TimeSeries实例相关的所有动态内存,包括REAL4Vector指针(图10)。3a)。然而,在Python中,REAL 4 TimeSeries和REAL 4Vector实例没有父子关系;用户可以自由地创建REAL 4 TimeSeries实例(图1)。 3b,第2行),存储它指向的REAL4Vector实例的引用[第6行],然后删除REAL4TimeSeries实例[第7行]并假设REAL4Vector实例将继续有效[第8行]。这与LALSuite内存所有权模型不兼容,这将破坏REAL4Vector实例以及指向它的REAL4TimeSeries,破坏用户存储到REAL4Vector为了解决这个问题,SWIGLAL接口实现了跟踪实例之间的存储器所有权关系的系统。在图3b的第6行中,SWIGLAL 修改 "ts“ 的 ”data" 字段的包装器代码,以记录分配给"ts_data“的REAL4Vector实例”www.example.com“ts.data该记录存 储 在 称 为 父 映 射 的 关 联 数 组 中 。父 映 射 还 记 录“www.example.com”被访问次数的引用计数ts.data然后,在第7行, Pythondel 操作符在“ts” 上被调用由于 ts.data“ ts " 拥 有 "ww w . e x a m p l e . c o m ”“ 的 内 存 , 因 此 不 会 调 用 析 构 函 数X L A L D e s t r o y R E A L 4 T i m e S e r i e s(),因此为R E A L 4 V e c t o r 实例分 配的内存将 存储“最后,在第10行,Python直接分配,XLALMalloc()/XLALCalloc()和XLALFree()。1对于类,del运算符在'' ts_data ''上调用;这里SWIGLAL检查谁拥有''ts_data ''的内存(即原始指向动态分配的内存、自定义构造函数和提供了析构函数;它们通常以前缀为"“XLALCreate的类命名。 . .“和"XLALDestroy。. . ''。SWIGLALgenerate_swig_iface.py脚本使用XML确定每个LALSuite类属于哪个组1 这些是LALSuite中free(),但也提供可选的内存调试功能。是否存在对该内存的任何未完成的引用。由于“ts "和" ts_data "都2 严格 我说,REAL4TimeSeries是 定义与 一 指针 到REAL4Sequence是REAL4Vector的同义词。K. Wette软件X 12(2020)1006344图3a. 图示 的 存储器 所有权 跟踪 在 SWIGLAL: 定义 LALREAL4TimeSeries类。 该类的“data "字段指向REAL4Vector类的实例。 XLALLIGREAL4TimeSeries()函数为新的REAL4TimeSeries实例和“data "字段指向的新REAL4Vector实例分配内存。XLALDe-stroyREAL 4 TimeSeries()函数销毁REAL 4 TimeSeries实例和指向的REAL 4Vector实例。图3b. SWIGLAL中的内存所有权跟踪说明:Python中的示例用法。用户在第2行创建一个新的REAL4TimeSeries实例,并在第3行和第4行为REAL4Vector实例指向的数据数组赋值。用户在第5行存储了对REAL4TimeSeries实例的“data”成员的引用,并尝试在第6行使用Python del运算符删除REAL4TimeSeries实例。但是,这不会立即触发对XLALDestroyREAL4TimeSeries()的调用,因为SWIGLAL知道用户保留了变量"ts_data“中对REAL4Vector实例的引用。因此,REAL4Vector实例中包含的数据仍然是可访问的(第8行),并且只有在“ts_data "被销毁时(第9行)才调用XL A L D e s t r o y R E A L 4 T i m e S e r i e s ( ) 。SWIGLAL内存所有权跟踪系统,结合Python和Octave中对象的本机引用计数,完全将用户从任何手动内存管理中解放出来,这 适 合 于 高 级 语 言 , 同 时 尊 重 LALSuite 内 存 管 理 范 式 。 由LALSuite函数分配的内存仅在不再使用时才释放,相反,仅在需要时才保留,从而最大限度地减少内存使用。2.3. 固定长度和动态大小的数组引力波数据分析经常涉及对大型时域和/或频域数据系列的操作,并且LALSuite提供了许多函数和类来表示此类数据,例如REAL4Vector(图10)。 1)和REAL4TimeSeries(图 3a)类。这样的数据应该可以作为本机数组对象从SWIGLAL接口中访问,并且以有效的方式访问,而无需在C类实例和其高级语言表示之间复制数据。见图4。在 引力波事件GW 150914发生时,来自LIGO Hanford探测器的白化、带通滤波应变数据,由附录中列出的Python脚本示例输出。SWIGLAL提供了几种类型映射,用于将数值数组转换为原生数组对象;对于Python,使用NumPy [16]数组,而对于Octave,使用原生矩阵类型(或其子类)。对于固定长度的C数组,SWIGLAL支持一维和二维数组;为函数参数和C结构字段提供类型映射。动态分配的数组通常在LALSuite中实现为特定的类; SWIGLAL提供了添加到这些类中的指令以提供类型转换。对于REAL4Vector类,例如(图1),ARRAY_STRUCT_1D()宏修改了“data "字段的包装器代码,因此例如在 Python 中,它接受任何有效的浮点数序列,并 将 ”data" 字 段 暴 露 为 直 接 访 问 底 层 C 内 存 的 NumPy 数 组[ 17 ]视图。一些LALSuite数组类只存储数组数据,而不存储其他任何东西 : REAL4Vector ( 图 1 ) 。1 ) 是 这 样 一 个 类 , 而REAL4TimeSeries(图。3a)包含附加字段。SWIGLAL为纯数组类(如REAL4Vector)提供了额外的类型映射,以便函数可以接 受 类 实 例 和 本 机 数 组 对 象 作 为 参 数 。 例 如 , 一 个 以REAL4Vector实例为参数的函数的Python接口也将接受适当类型的NumPy数组。2.4. 示例:提取GW 150914图4示出了附录中列出的示例Python脚本的输出,其提取了第一次检测到的引力波事件GW 150914时的应变数据[cf.图1/3]。该脚本在事件发生时从LIGO Hanford检测器[18]读取应变数据,可从[19]获得;对数据进行白化和带通滤波,以便事件清晰可见;并在事件附近绘制处理后的应变数据。该脚本并不打算作为引力波数据分析的最佳实践信号处理的示例,而是作为通过SWIGLAL接口利用LALSuite例程的强大功能,在3. 影响表2显示了LALSuite本身中Python代码和其他七个引力波数据分析包对SWIGLAL接口的使用。该表为每个LAL套件K. Wette软件X 12(2020)1006345∼∼∼∼∼表2LALSuite本身以及PyCBC、GstLAL、Bilby、GWpy、PyFstat、CWInPy和OctApps包对SWIGLAL接口的使用。每个表格部分的标题给出了软件包的名称和版本,以及用C、Python和/或Octave编写的(非空白、非注释)代码行的百分比。这些列给出引用每个LALSuite库的SWIGLAL接口的源文件的数量(在每个包的总数中),以及每个包引用的SWIGLAL接口导出的不同常量、变量、函数和类的数量。对于函数,所表示的C代码(包括嵌套调用)的总(非空白、非注释)行的估计值为在括号中给出。请注意,SWIGLAL为LAL和LALSupport库提供了一个接口,因此这两个库是一起计算的。来源常数变量功能()类LALSuite,版本6.67 [5]。C语言占 95%,Python占 5%。LAL(支持)71/22225332(3k)18LALBurst39/222001(0.5k)0LALFrame8/2220020(4k)4LAL推断27/2227324(93k)4LALInspiral7/222005(1k)1LALMetaio8/222000(0)2LALPulsar10/2229043(16k)21LAL模拟20/2220040(60 k)0PyCBC,版本1.15.4 [9]。Python100%。LAL(支持)41/30916032(3k)20LALFrame2/3092025(6k)1LALPulsar1/309105(2k)2LAL模拟14/3094150(61 k)1GstLAL,版本1.5.1a.C语言占 52%,Python占 48%。LAL(支持)41/1176116(2k)11LAL模拟9/117007(59k)0Bilby,版本0.6.5 [10]。Python100%。LAL(支持)8/83 3 05(1k)8LAL模拟5/83 0 018(59 k)0GWpy,版本1.0.1 [11].Python100%。LAL(支持)10/2671083(1k)4LALFrame2/267009(3k)2PyFstat,版本1.3 [12]。Python100%。LAL(支持)6/28815(1k)6LALPulsar6/2810122(14k)21CWInPy,版本0.2.1 [13]。Python100%。法律援助(支助)3/42 2 04(1k)4LAL推断14/42 0 10(0)0脉冲星2/42 0 01(1k)0LAL模拟1/42 0 09(1k)0OctApps,版本0.2 [14].倍频程:倍频程100%LAL(支持)9/243709(1k)5LALPulsar7/24329122(13k)20a包括软件包:GstLAL Ugly,版本1.6.6; GstLAL Inspiral,版本1.6.9; GstLAL Calibration,版本1.2.11; GstLAL Burst,版本0.2.0[15]。图书馆:引用该库的SWIGLAL接口的源文件的数量(在软件包总数之外)(例如,通过使用"import“在Python中导入接口),以及软件 包 引 用 的 不 同 符 号 的 数 量 。 该表 还列 出 了由 每个 包引 用的LALSuite函数表示的C代码总行数的估计值;估计值包括对其他LALSuite 函 数 的 任 何 嵌 套 调 用 。 LALSuite 中 的 Python 代 码 是SWIGLAL的主要用户,就源文件(3PyCBC [20PyCBC在超过10%的源文件中使用了LAL库,主要用于操作时域和频域数据序列。它使用来自LALFrame的25个函数来读取和写入引力波观测站产生的标准Frame格式的引力波数据。它使用来自LALSimulation的50个函数来生成模板波形,用于重力波数据的匹配滤波。它使用LALPulsar的一些函数来生成模板库[27]。总线路PyCBC使用的LALSuite代码的最大值为1072k。 虽然主要GstLAL是用C语言编写的,它使用LAL库中的16个函数操作时域和频域数据,并从Python脚本计算引力波观测的地心时间延迟。它使用来自LALSimulation的7个函数GstLAL从Python中使用的LALSuite代码的总行数为61k。Bilby [28]的目标是成为一个用户友好的贝叶斯推断包,用于引力波数据分析[例如29]。它通过SWIGLAL接口在其源文件的5-10%中访问LALSuiteLAL库用于处理时间和频率域引力波数据,并且LAL模拟用于生成用于计算贝叶斯似然函数的模板波形。总共使用了6万行LALSuite代码GWpy [30]是一个通用的软件包,用于轻松访问,可视化和研究引力波数据。它使用了LAL和LALFrame库,主要用于操纵重力-Frame格式的波形数据,占其源文件的约1.5%。它总共使用了14000行LALSuite代码K. Wette软件X 12(2020)1006346FF→−∗→PyFstat [31]、CWInPy [32]和OctApps [33]是数据分析软件包,专注于寻找来自快速旋转中子星的连续引力PyFstat使用LAL和LALPulsar(在其源文件的20%中)来计算-statistic [34],这是连续引力波搜索的标准数据分析例程CWInPy使用一些LALSuite例程来处理频域数据,在时间标准之间转换,以及访问引力波观测站的属性Oc- tApps使用主要来自LALPulsar的例程来计算统计量及其相关的参数空间度量[35],以设计连续的引力波搜索。PyFstatOctApps使用14 k-15 k行的LALSuite代码,而CWInPy使用3 k行4. 结论LALSuite是重力波数据分析软件栈中一个重要的、经过良好测试的组件。SWIGLAL创新性地使用SWIG为LALSuite for Python和Octave提供自动生成的接口,重点是sis致力于在这些语言中建模本机代码行为。 这些接口促进了用Python编写的现代引力波数据分析软件的开发,特别是PyCBC,它被用于首次发现引力波。各种各样的Python和Octave软件包广泛使用这些接口进行引力波数据分析,这证明了SWIGLAL的影响和实用性。竞合利益作者声明,他们没有已知的竞争性财务利益或个人关系,可能会影响本文报告的工作确认我 非 常 感 谢 Adam Mercer 帮 助 我 在 LALSuite 中 集 成 和 维 护SWIGLAL,也非常感谢Kipp Cannon、Jolien Creighton、NickolasFotopoulos、Duncan Macleod和Leo Singer对改进和bug修复的贡献。我感谢大卫·凯特尔和邓肯·麦克劳德对手稿的有益评论。这项工作得到了澳大利亚研究委员会(项目编号CE170100004)和德国马克斯·普朗克学会的支持。该论文的文献号为LIGO-P2000094。阑尾用于提取GW 150914时应变数据的Python脚本示例输入端口l a l进口l a l f r a m e as l a l f r进口numpyas NP进口物料清单p y p l o t as p l t#阅读S T R A I N数据在时间关于GW 150914#-帧菲莱下载 http://www. gw − o pe ns c i e nce .组织/f r a m e_ f i l e = l a l f r.Fr文件打开URL(“./H− H1_GWOSC_4KHZ_R1− 1126259447− 32。gwf“)gw_strain=lalfr. F rFil eRe andREAL8TimeSeries(frame_file,“H1:GWOSC−4KHZ_R1_STRAIN“,0)#计算平均功率s p e c t r a ln n n s i t y外来资产S T R A I N数据psd_segment_len=int(4. 0/gw_strain. deltaT)psd_window=lal. CreateTukeyREAL8Window(psd_segment_len,0. 5)fft_plan=lal. CreateForwardREAL8FFTPlan(psd_segment_len,0)gw_psd_length=psd_segment_len//2+1gw_psd=lal. CreateREAL8FreuencySeries(“psd“,gw_strain. epoch,0,0,lal. DimensionlesUnit,(请注意,如果您的浏览器没有自动跳转,请点击这里)我爱你。REAL8AveragSpectrumWelch(gw_psd,gw_strain,psd_segment_len,psd_window,n→fft_plan)gw_psd_f=gw_psd. f0+np. arange(gw_psd. datata。 length)将w_psd。deltaF;#t r a nsformS T R A I N数据到Fo u r i e r domaingw_furier_legh=gw_strain. datata 。length//2+1如果F = 0,则gw_f〇r_delt aF=0。5/gw_strain. deltaT/(gw_forurier_legth1)fft_plan=lal. CreateForwardREAL8FFTPlan(gw_stran. datata。length,0)gw_furier=lal. CreateCO MPLEX16FrencySeries(“forier“,gw_strain. epoch,0,gw_for ur_deltaF,阿利湖Di m e n s i o n l e sUnit,g w_f o r_le n gt h)gw_fourier_f = gw_fourier_f。f0 + np。a r a n g e(g w_f o r i e r.)数据L e n g t h)g w_f o r i e r. delt aF;lalal. REAL8ForwardFFT(gw_forier. datata,gw_strain. data,fft_plan)联系我们S T R A I N数据I nFo u r i e r domaingw_psd_at_f,则r_f=np。 interp(gw_forier_f,gw_psd_f,gw_psd. datata 。 datata)gw_f〇urier. datata。 data=gw_forier. datata。 data/np. sqrt(gw_psd_at_fourier_f)#t r a nsform白化S T R A I N数据回来到时间域fft_plan=lal. CreateReverseREAL8FFTPlan(gw_stran. datata。 length,0)lal.REAL8ReversFFT(gw_strain. datata,gw_forier. data,fft_plan)K. Wette软件X 12(2020)1006347−−- -−#波段通过电影白化时间s e r i e s之间50和300 Hz我爱你。 HighPasREAL8TimeSeries(gw_stran,50,0. 1,6)1a1. LowPasREAL8TimeSeries(gw_strain,30 0,0. (第1、6段)#e x t r a c ts t r a in data [0 .15,0。第10页]秒周围 GW 150914time_of_GW150914 = l a l. LIGOTimeGPS(“1126259462. 4“)first_sample=int(time_of_GW1509140. 15)gw_strain. epoch)/gw_strain. deltaT)num_samples=int(0. 25/gw_s。deltaT)gw_strain=lal. CutREAL8时间序列(gw_stran,first_ sample,num_samples)gw_strain_t=float(gw_strain. epoch−time_of_GW150914)+np. arange(gw_strain. datata。length)→gw_strain. deltaT#p l o tS T R A I N数据plt。 plot(gw_strain_t,gw_strain. datata。 data/max(gw_strain. datata 。data),“k“)pl t.t i t l e(“ De mons t ration o f SWIGLAL:s t r a i ndata tGW 150914“)p l t。 x l a b e l(f“Time r e l a t i v e to GPS{time_of_GW150914}”)plt. ylabel(“Amplitude/maximumamplitude“)p l t。显示()引用[1] Python软件基金会Python语言参考。2020年,URLhttps://docs.python.org/reference/网站。[2] 杨伟,王伟,王伟. GNU Octave手册:用于数值计算的高级交互式语言。2020年,网址https://www.gnu.org/software/octave/doc/。[3] Abbott BP,et al.黑洞双星引力波的观测孔合并。PhysRevLett2016;116(6):061102。http://dx.doi.org/10.1103/PhysRevLett.116.061102,arXiv:1602.03837。[4] Abbott BP,et al. GW170817:从一个天体二进制中子明星螺旋式的。PhysRevLett2017;119(16):161101。网址://dx.doi.org/10.1103/PhysRevLett.119.161101,arXiv:1710.05832。[5] LIGO科学合作。LIGO算法库- LALSuite,免费软件(GPL)。2018年12月28日,中国科学院出版社。http://dx.doi.org/10.7935/GT1W-FZ16[6] 默瑟河 顶层:标记为版本6.67。 GitLab 2020. URLhttps://git.ligo.org/lscsoft/lalsuite/-/tags/lalsuite-v6.67网站。[7] 张文辉,张文辉,张文辉.从二元黑洞吸入的最后阶段的引力波的检测模板家 庭 : 非 旋 转 的 情 况 。 Phys Rev D 2003;67 ( 2 ) : 024016 。http://dx.doi.org/10 的 网 站 。 1103/PhysRevD.67.024016 , arXiv : gr-qc/0205122。[8] 比兹利DM.SWIG:一个易于使用的脚本语言集成工具用C和C++。在:第四届USENIX Tcl/Tk研讨会会议记录。TCLT
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 平尾装配工作平台运输支撑系统设计与应用
- MAX-MIN Ant System:用MATLAB解决旅行商问题
- Flutter状态管理新秀:sealed_flutter_bloc包整合seal_unions
- Pong²开源游戏:双人对战图形化的经典竞技体验
- jQuery spriteAnimator插件:创建精灵动画的利器
- 广播媒体对象传输方法与设备的技术分析
- MATLAB HDF5数据提取工具:深层结构化数据处理
- 适用于arm64的Valgrind交叉编译包发布
- 基于canvas和Java后端的小程序“飞翔的小鸟”完整示例
- 全面升级STM32F7 Discovery LCD BSP驱动程序
- React Router v4 入门教程与示例代码解析
- 下载OpenCV各版本安装包,全面覆盖2.4至4.5
- 手写笔画分割技术的新突破:智能分割方法与装置
- 基于Koplowitz & Bruckstein算法的MATLAB周长估计方法
- Modbus4j-3.0.3版本免费下载指南
- PoqetPresenter:Sharp Zaurus上的开源OpenOffice演示查看器
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功