跳到内容

jeffdaily/parasail公司

存储库文件导航

parasail:成对序列对齐库

主控形状:地位 地位 地位 地位

开发:地位 地位 地位 地位

作者:Jeff Daily(jeffrey.daily@gmail.com)

目录

介绍

返回顶部

parasail是一个SIMD C(C99)库,包含Smith-Waterman(本地)、Needleman-Wunsch(全局)和各种半全局成对序列对齐算法的实现。这里,半全局意味着在查询或目标序列开始之前或结束之后的插入可以不受惩罚。parasail实现了矢量化成对序列比对的最常见算法,包括对角线[Wozniak,1997]、分块[Rognes和Seeberg,2000]、分条[Farrar,2007]和前缀扫描[Daily,2015]。因此,除了在当今最先进的CPU上提供迄今为止性能最好的算法的实现外,parasail还是这些算法的参考实现。

parasail目前以三种变体实现上述算法,1)返回对齐分数和结束位置,2)另外返回对齐统计信息(精确匹配数、相似性数和对齐长度),和3)将回溯存储为SAM CIGAR字符串以供以后检索的功能。之所以存在这三种变体,是因为parasail旨在实现高性能;计算额外的统计信息或回溯比简单地计算对齐分数要慢。根据您的需要选择适当的实现。

注意:当任何算法打开缺口时,仅应用缺口打开惩罚。

指令集和CPU调度

返回顶部

parasail支持SSE2、SSE4.1、AVX2、AltiVec和NEON指令集。在许多情况下,编译器可以编译主机CPU不支持的指令集的源代码。代码仍在编译中,但是parasail在运行时使用CPU调度来正确选择支持的最高级别指令集的适当实现。这使得parasail可以由维护人员编译和分发,以获得最佳可用系统,同时仍然允许分发使用较少的CPU运行。

编译和安装

返回顶部

基于GNU autotools的安装是首选方法,尽管CMake构建也同样有效。还有一个贡献的介子建造。提供了各种构建文件,因为使用首选的构建工具将parasail作为子模块包含在其他项目中通常更容易。已尽一切努力使安装过程顺利进行。例如,不需要外部依赖项。但是,如果您仍然遇到问题,请提出问题.

自动工具生成

如果您是从git克隆构建的,那么必须首先使用以下命令生成autotools文件自动侦察-fi。自定义源分发版将已经包含生成的autotools文件。

parasail遵循其他基于GNU autotools安装的典型configure、make、make安装步骤。默认情况下,这将构建一个静态和共享库以及parasail_aligner应用程序。目前没有自动测试套件,但正在运行进行检查将构建一些额外的测试程序,如test_isa,用于报告编译器和CPU功能。

默认情况下,运行“makeinstall”会将parasail安装到/usr/local中。您将在/usr/local/include中找到parasail.h头文件,在/usr/local/lib中找到parassail库,例如libparasail.a。如果在配置期间指定不同的前缀,例如configure--前缀=/some/other/path,然后在include和lib目录中查找parasail.h头和libparasail.so库。

不要忘记将应用程序链接到parasail库。例如,gcc foo.c-I/where/you/installed/include-L/where/owe/installed/lib-lparasail。否则,您将看到以下错误未定义对“parasail_sw”的引用.

CMake构建

CMakeLists.txt文件将编译并链接parasail库以及parasail_aligner应用程序和test_isa测试程序。它构建了其他一些测试程序。

如果您熟悉CMake,那么构建过程应该很熟悉。例如,在基于Linux的系统上,为构建创建一个目录。在副帆的震源分布范围内这样做是安全的。例如:

解压缩parasail-v1.0.1.zip光盘副尾-1.0.1mkdir构建光盘建造cmake。。制作

默认情况下,CMake将构建parasail共享库。为了编译静态库,添加-DBUILD_SHARED_LIBS=关闭到您的克马克调用,或使用ccmake公司实用程序来切换选项。静态库和共享库必须作为单独的cmake项目构建。

介子建造

请遵循http://mesonbuild.com/Quick-guide.html如何使用介子。Meson构建文件由@SoapZA维护。此版本当前仅支持SSE和AVX ISA。

ARM的交叉编译

使用Ubuntu 16.04 LTS(Xenial),您可以使用基于x86_64的构建平台为基于ARM的平台进行编译。首先,您需要安装必要的软件包。有几种不同的ARM平台可以使用Ubuntu包进行编译;这里没有介绍平台的细节。

安装必备软件包

sudo apt-get安装\gcc-arm-linux-gnueabi公司\g++-臂-linux-gnueabi\gcc-arm-linux-gnueabihf\g++-臂-linux-gnueabihf\gcc-aarch64-linux-gnu\g++-aarch64-linux-gnu

运行configure进行交叉编译

autotools和CMake构建都可以进行交叉编译,但是autotools构建很简单。设置--主机--建造选项并指定交叉编译器而不是标准编译器。如果安装了zlib,则必须显式禁用在parasail中包含它,因为上面的默认ubuntu包没有提供它--主机选项--宿主arm-linux-gnueabi--主机臂-linux-gnueabihf根据需要。

#对于aarch64./configure CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-nu-g++--构建x86_64-pc-linux-gnu--主机aarch64-linux-gnu LDFLAGS=-static--不带-zlib#对于gnueabi./configure CC=arm-linux-gnueabi-gcc CXX=arm-lineux-gnue abi-g++--构建x86_64-pc-linux-gnu--主机arm-linux-gnueabi LDFLAGS=-static--不带-zlib#对于gnueabihf./configure CC=arm linux gneabihf gcc CXX=arm-linux-gneabihf-g++--构建x86_64-pc-linux-gnu--主机arm linux gneabihf LDFLAGS=-static--不带zlib

请注意,您实际上不需要指定科科斯群岛CXX公司以上(--主机参数将作为前缀添加到海湾合作委员会克++自动),但如果您忘记安装前提条件步骤中的某个软件包,那么显式将提前报告错误。

使用QEMU验证交叉编译的ARM可执行文件

安装QEMU(https://www.qemu.org/)包。sudo apt-get安装qemu。成功后制作你应该有应用程序/parasail_aligner.QEMU将允许您在x86_64 linux平台上运行交叉编译的二进制文件。您必须指定对应于所需ARM平台的QEMU_LD_PREFIX。使用-L(左)选择相应的qemu启动器。

#对于aarch64qemu-aarch64-L/usr/aarch64-linux-gnu/应用程序/parasail_aligner#对于gnueabiqemu-arm-L/usr/arm-linux-gnueabi/应用程序/parasail_aligner#对于gnueabihfqemu-arm-L/usr/arm-linux-gnueabihf/应用程序/parasail_aligner

C接口示例

返回顶部

所有parasail函数在返回类型和参数方面都具有相同的函数签名。

parasail_结果_t* parasail函数名(常数 烧焦 * 常数限制s1,常数 整数 s1长度,常数 烧焦 * 常数限制第2页,常数 整数 s2长度,常数 整数 打开,常数 整数 缺口,常数 副邮件矩阵* 矩阵);

差距拉大了(打开)和间隙扩展(缺口)惩罚作为正值传递给函数。缺口开放惩罚必须大于或等于缺口扩展惩罚。当任何算法打开间隙时,仅应用间隙打开惩罚。

相对于传统的数据库查询使用,s1是查询序列,s2是数据库序列。对于返回DP表或最后一行和最后一列的函数,DP表的维度为s1Len x s2Len,其中s1Len是行数,s2Len是列数(按C行主顺序)。

返回类型是C结构。用户应将结果视为不透明指针,并对结果属性使用getter函数。还有其他函数可以确定哪种对齐函数产生了结果。

类型定义 结构 副疾病结果{整数 分数/*校准分数*/
    整数 结束查询(_Q)/*查询序列的结束位置*/
    整数 结束引用(_R)/*参考序列的结束位置*/
    整数 旗帜/*各种标志的位字段*/
    空隙 *额外的}parasail_结果_t/*在parasail.h中,result getter函数*/
副轨道_检波器_t* parasail_result_get_cigar公司(parasail_结果_t *结果,常数 烧焦 *序列分析,整数 莉娜,常数 烧焦 *序列B,整数 透镜,常数 副邮件矩阵 *矩阵);整数 parasail结果获取核心(结果);整数 parasail结果获取结束查询(结果);整数 副邮件结果获取结束(结果);整数 副邮件结果获取匹配(结果);整数 parasail结果类似(结果);整数 副邮件结果获取长度(结果);整数* parasail结果获取核心表(结果);整数* 副邮件结果获取匹配表(结果);整数* parasail结果获取相似表(结果);整数* parasail结果获取长度表(结果);整数* 副轨道_结果_获取_核心_低(结果);整数* 副邮件结果获取匹配行(结果);整数* parasail_result_get_simir_row(结果);整数* 副轨道_结果_获得_长度_低(结果);整数* 副邮件结果获取核心(结果);整数* 副邮件结果获取匹配项col(结果);整数* parasail结果get_similar_col(结果);整数* 准故障结果集长度(结果);整数* parasail结果获取跟踪表(结果);整数* parasail_结果_获取_跟踪_表格(结果);整数* parasail结果获取跟踪表(结果);整数 副邮件_结果_新(结果);整数 parasail_result_is_sg(结果);整数 副邮件结果(结果);整数 副邮件_结果_饱和(结果);整数 parasail结果绑定(结果);整数 副邮件结果扫描(结果);整数 parasail结果_条带化(结果);整数 副邮件结果_诊断(结果);整数 parasail_result_is_阻塞(结果);整数 副邮件结果统计(结果);整数 副邮件结果统计表(结果);整数 parasail_result_is_stats_rowcol(结果);整数 parasail结果表(结果);整数 parasail_result_is_rowcol(结果);整数 副邮件结果跟踪(结果);

您必须使用释放返回的并行邮件结果void parasail_result_free(parasail_ result_t*result).

标准函数命名约定

返回顶部

parasail库中有1000多个函数,但大多数是常见主要算法的变体。下表描述了该函数使用的主要算法和简写名称。

算法 函数名称
Smith-Waterman局部线形 开关
Needleman-Wunsh全球联盟 西北
半全局,不惩罚s1/query开头的间隙 sg _ qb
半全局,不惩罚s1/查询末尾的差距 sg _ qe
半全局,不惩罚s1/query开头和结尾的差距 sg _ qx(sg _qx)
半全局,不惩罚s2/数据库开始时的缺口 sg数据库
半全局,不惩罚s2/数据库末尾的差距 sg_de(标准偏差)
半全局,不惩罚s2/数据库开头和结尾的差距 sg_dx公司
半全局,不惩罚s1/查询开头和s2/数据库结尾的差距 sg _ qb _ de
半全局,不惩罚s2/数据库开头和s1/查询结尾的差距 sg _ qe _ db
半全局,不惩罚s1/查询开头和s2/数据库开头的缺口 sg _ qb _ db
半全局,不惩罚s2/数据库末尾和s1/查询末尾的差距 sg _ qe _ de
半全局,不惩罚两个序列开头和结尾的间隙 新加坡

丹妮·杜兰德博士的计算基因组学课程对各种比对算法进行了很好的总结在这里。相同的文档被本地复制到此回购,以防此链接断开在这里.

为了更容易找到您要查找的函数,函数名遵循命名约定。下面将使用集合表示法{}表示必须进行选择,括号[]表示名称的可选部分。

  • 非矢量化的参考实现。
    • 必需,请从上表中选择算法。
    • 可选返回对齐统计信息。
    • 可选返回DP表或最后一行/列。
    • 可选使用前缀扫描实现。
    • parasail{nw,sg,sgqb,sgq,sg qx,sg_db,sg _de,sg d_dx,sg q b_de,sg q e db,sg g q b de,sw}[状态][{表,rowcol}][扫描]
  • 非矢量化、可回溯的引用实现。
    • 必需,请从上表中选择算法。
    • 可选使用前缀扫描实现。
    • parasail{nw,sg,sgqb,sgq,sgx,sg_db,sgde,sgd_dx,sg qb_de,sg q e db,sg g q b db,s g q e de,sw}trace[扫描]
  • 矢量化。
    • 必需,请从上表中选择算法。
    • 可选返回对齐统计信息。
    • 可选返回DP表或最后一行/列。
    • 必需的,选择矢量化策略——条带化是一个很好的起点,但扫描对于全局对齐来说通常更快。
    • 可选,选择矢量指令集。否则,我们会为您选择最好的。
    • 必需,请选择解决方案宽度。'sat’将尝试8位解决方案,但如果检测到溢出,它将执行16位操作。在某些情况下可以更快,尽管16位通常就足够了。
    • parasail_{nw,sg,sg_qb,sgqe,sgxqx,sg_db,sgde,sg _dx,sg qb_de,sg-qe_db,sg q e_de,sw}[状态][{表,rowcol}]{字符串,扫描,诊断}[{_sse2_128,_sse41_128,_avx2_256,_altivec128,_neon_128}]{_8,_16,_32,_64,_sat}
  • 矢量化,可追溯。
    • 必需,请从上表中选择算法。
    • 必需的,选择矢量化策略——条带化是一个很好的起点,但扫描对于全局对齐来说通常更快。
    • 可选,选择矢量指令集。否则,我们会为您选择最好的。
    • 必需,请选择解决方案宽度。'sat’将尝试8位解决方案,但如果检测到溢出,它将执行16位操作。在某些情况下可以更快,但16位通常就足够了。
    • parasail_{nw、sg、sg_qb、sg_qe、sg_qx、sg_db、sg_de、sg_dx、sg_qb_de、sg_qe_db、sg_qe_de、sw}_trace{_striped、_scan、_diag}[{_sse2_128、_sse41_128、_avx2_256、_altive_128、_neon_128}]{_8、_16、_32、_64、_sat}

例如:

  • parasail_nw_stats_striped_sse41_128_16是Needleman-Wunsh全局对齐,带有对齐统计信息,对sse41 16位整数使用带条向量。
  • 副翼_ sg是半全局的,不惩罚两个序列的开始或结束间隙,没有对齐统计信息,没有矢量化代码(即串行)。
  • 副轨_宽_宽_长_宽x2_256_8是Smith-Waterman局部对齐,没有对齐统计信息,并对avx2 8位整数使用前缀扫描向量。
  • parasail_nw_stats_scan_16是Needleman-Wunch全局对齐,具有对齐统计信息,使用前缀扫描向量,分派到最佳CPU指令集,并使用16位整数。
  • 副轨_横档_横档_16是半全局对齐,无对齐统计信息,输出DP表的最后一行和最后一列,使用条带化向量,分派到16位整数的最佳CPU指令集。
  • 副轨道(带轨道)使用本地对齐,可追溯,分派到最佳CPU指令集,并在尝试16位解决方案之前尝试8位解决方案。
  • 副轨sgqxtracestriped_32是半全局对齐,不惩罚查询的开始或结束间隙,可回溯,分派给最佳CPU指令集,使用32位整数作为解决方案。

功能调度员

返回顶部

如前一节所述,如果函数名中省略了指令集和向量宽度,则此函数是CPU调度函数。假设大多数用户将使用调度功能;为特定指令集(如AVX2)调用函数需要用户首先检查CPU是否支持该指令集并处理任何错误。如果不支持某个指令集,但仍调用该指令集特定的函数,则会返回NULL并将errno设置为ENOSYS,而不会导致非法的指令错误。

调用调度函数的计算成本是最小的——第一次调用它时,它将设置一个指向调度函数的内部函数指针,然后将使用已建立的指针直接调用函数。

配置文件函数命名约定

返回顶部

文献中已经指出,在使用striped[Farrar,2007]或scan[Daily,2015]向量策略时,通过重用查询序列可以获得一些性能。有一个特殊的函数子集支持这种行为。对于条带化和扫描向量实现只有,可以创建查询配置文件并在后续路线中重用。这可以显著加快数据库搜索等应用程序的速度。

  • 可选,为返回统计信息的函数准备查询配置文件。统计信息需要分配额外的数据结构。
  • 可选,选择矢量指令集。否则,我们会为您选择最好的。
  • 必需,请选择解决方案宽度。'sat将为8位和16位解决方案分配配置文件。
  • parasail_profile_create[_stats][{_sse_128,_avx_256,_altive_128,_neon_128}]{_8,_16,_32,_64,_sat}

这是一个概要文件创建函数的示例函数签名。

parasail_profile_t* 副邮件_配置文件_创建_8(常数 烧焦 * 常数限制s1,常数 整数 s1长度,常数 副副翼* 矩阵);

完成后,千万不要忘记释放配置文件。只有一个函数用于释放配置文件内存,它将处理由各种配置文件创建函数创建的所有配置文件。

空隙 parasail_profile_free(无副邮件配置文件)(parasail_profile_t *轮廓);

配置文件数据结构是parasail公共接口的一部分,但您应该将配置文件视为不透明指针,而不是试图访问其成员。

替换矩阵

返回顶部

parasail捆绑了许多替换矩阵,包括PAM和BLOSUM。要使用它们,请包含适当的标头,或按名称查找它们(对于命令行解析很有用)。例如

#包括 “parasail.h”
#包括 “parasail/mattrics/blosum62.h”
#包括 “parasail/matrix_lookup.h”

整数 主要的(整数 argc公司,烧焦 **自动变速箱) {常数 烧焦 *s1 = “asdf”常数 烧焦 *第2页 = “asdf”整数 s1长度 =(整数)斯特伦(s1);整数 s2长度 =(整数)斯特伦(第2页);parasail_结果_t *结果 = 无效的常数 副邮件矩阵 *矩阵 = 无效的/*注意运算符“&”的地址*/
        结果 = 副帆(s1,s1长度,第2页,s2长度,11,1,&副翼_伞62);parasail_result_free(无结果)(结果);矩阵 = 副邮件矩阵查找(“pam100”);结果 = 副帆(s1,s1长度,第2页,s2Len公司,11,1,矩阵);parasail_result_free(无结果)(结果);}

您还可以使用简单的匹配/不匹配值创建自己的矩阵。对于更复杂的矩阵,可以从复制内置矩阵或启动simple并根据需要修改值。例如

#包括 “遮阳伞.h”
#包括 “parasail/mattrics/blosum62.h”
#包括 “parasail/matrix_lookup.h”

整数 主要的(整数 argc公司,烧焦 **自动变速箱) {常数 副邮件矩阵 *矩阵 = 无效的副邮件矩阵 *用户矩阵(_M) = 无效的矩阵 = 副邮件矩阵查找(“blosum62”);用户矩阵 = 副邮件矩阵副本(矩阵);/*替换[2,4]位置的值*/
        副邮件矩阵设置值(用户矩阵,2,4,200);无副邮件矩阵(用户矩阵);用户矩阵 = 副邮件矩阵创建(“ACGT”,2,-1)/*替换[1,1]位置的值,以获得更大的匹配*/
        副邮件矩阵设置值(用户矩阵,1,1,20);无副邮件矩阵(用户矩阵);}

您还可以创建职位特定的评分矩阵。你可以提供值的数组,或从内置矩阵开始并转换它。

#包括 “parasail.h”
#包括 “parasail/mattrics/blosum62.h”

整数 主要的(整数 argc公司,烧焦 **自动变速箱){常数 副邮件矩阵 *内部矩阵 = 无效的副邮件矩阵 *用户矩阵 = 无效的常数 烧焦 *pssm_字母表 = “abcdef”常数 烧焦 *pssm_查询 = “asdf”整数 pssm查询长度 = 4常数 整数 pssm_值[]={0,1,2,,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23};常数 整数 pssm_行 = 4用户矩阵(_M) = 副邮件矩阵创建(pssm_字母表,pssm_值,pssm_行);无翼伞(用户矩阵);内部矩阵 = 副邮件矩阵查找(“blosum62”);用户矩阵 = 副邮件矩阵转换成方形(内部矩阵,pssm_查询,pssm查询长度);无副邮件矩阵(用户矩阵);}

您还可以使用函数解析简单的矩阵文件副邮件矩阵来自文件如果文件采用以下格式之一:

广场

##任何以“#”开头的行都是注释。##需要一行字母。第一列是#字母表并假定与第一个字母表行相同。##最后一行和最后一列*必须是要表示的非字母字符#字母表之外的任何输入序列字符。#A T G C S W R Y K M B V H D N U公司*A 5-4-4-4-4 1 1-4-4 1-4-1-1-1-1-2-4-5电话-4 5-4-4 1-4 1-1-4-1-1-2 5-5政府-4-4 5-4 1-4 1-4 1-4-1-4-1-2-4-5C-4-4-4 5 1-4-4 1-4 1-1-1-1-4-2-4-5S-4-4 1 1-1-4-2-2-1-3-1-4-5W 1 1-4-4-1-2-2-2-3-1-1-1-1-5R 1-4 1-4-2-2-1-4-2-2-3-1-3-1-1-4-5Y-4 1-4 1-2-2-4-1-2-1-3-3-1-1-5K-4 1 1-4-2-2-2-1-4-1-3-1-1 1 1-5M 1-4-4 1-2-2-4-1-3-1-1-3-1-3-1-4-5B-4-1-1-1-3-3-1-1-3-1-2-2-2-2-1-5V-1-4-1-1-1-3-3-1-2-1-2-1-4-5H-1-1-4-1-3-1-3-1-1-3-1-2-1-2-1-1-1-1-5D-1-1-1-4-3-1-1-3-1-3-2-2-1-1-1-1-5编号-2-2-2-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-2-1-2-1-5U-4 5-4-4 1-4 1-1-4-1-1-2 5-5*-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5

位置特定评分矩阵(pssm)

##任何以“#”开头的行都是注释。##需要字母表的第一行。#包含代表序列的第一列是可选的,但包含在下面的示例中。#A G I L V M F W P C S T Y N Q H K R D E公司Y-5-6 3-4 2 1 4-3 0-5 0-4 6 0-5-4-5 2-6-5S-1-5 2-2 0-4 1-6 0 1 3-4-4-5-1 1-5-1C-4-6-5-5-4-5-6-6-6-6-12-4-4-6-6-6-7-7-7-7D-1-5-7-7-6-6-7-7-7-7-5-5-7-3-1-6-4-3-3-0-17-2G 0 4 1-2-2-5-6-6-5-2 0 2-4 3-5-5-5 0C-4-6-5-5-4-5-6-6-6-6-12-4-4-6-6-6-7-7-7-7L-4 3-1 3-1-3-5-6-5-60-4-5 1 3-5 1 0-1-1K-2 1 1-2-1 3-5-6-5-5 2 2 0 1 1 2-4-4 0P-2 0-4 0-2-4-5-5 5-5-3-1 1 1-3 2-4 4 1 3I-5-7 7 1 0-2 3-5-6-5 0-4-4-1-6 3-6-6 6-6

SSW库仿真

这个SSW库使用SSE2指令和条带向量执行Smith-Waterman局部对齐。其结果提供查询和引用序列的主要分数、次要分数、对齐的开始和结束位置,以及SAM香烟。有一些parasail函数可以模拟这种行为,唯一的例外是parasails不计算次要分数。

类型定义 结构 副邮件结果{单位16_t 得分1整数32_t 参考开始1整数32_t 参考结束1内部32(_t) 阅读开始1整数32_t 读取结束1uint32_t中 *雪茄内部32(_t) 香烟Len}副邮件结果副邮件结果* 副邮件_ssw(常数 烧焦 * 常数限制s1,常数 整数 s1Len公司,常数 烧焦 * 常数限制第2页,常数 整数 s2长度,常数 整数 打开,常数 整数 缺口,常数 副邮件矩阵* 矩阵);副邮件结果* parasail_ssw_配置文件(常数 parasail_profile_t * 常数限制轮廓,常数 烧焦 * 常数限制第2页,常数 整数 s2长度,常数 整数 打开,常数 整数 缺口);parasail_profile_t* parasail_ssw_输入(常数 烧焦 * 常数限制s1,常数 整数 s1长度,常数 副邮件矩阵* 矩阵,常数 整数8_t 记分_大小);空隙 无副邮件结果(副邮件结果 *结果);空隙 parasail_profile_free(无副邮件配置文件)(parasail_profile_t *轮廓);

函数查找

返回顶部

通常用于命令行或用户输入解析,可以使用parasail函数的字符串名称访问这些函数。例如

#包括 “parasail.h”
#包括 “parasail/mattrics/blosum62.h”

整数 主要的(整数 argc公司,烧焦 **自动变速箱) {常数 烧焦 s1 = “asdf”常数 烧焦 第2页 = “asdf”整数 s1长度 =(整数)斯特伦(s1);整数 s2长度 =(整数)斯特伦(第2页);parasail_结果_t *结果 = 无效的常数 副邮件矩阵 *矩阵 = 无效的parasail_function_t *功能 = 无效的功能 = parasail_lookup_function函数(自动变速箱[1]);结果 = 功能(s1,s1长度,第2页,s2长度,11,1,&副翼_伞62);parasail_result_free(无结果)(结果);/*“parasail_”前缀是可选的*/
        功能 = parasail_lookup_函数(“nw_striped_32”);结果 = 功能(s1,s1长度,第2页,s2长度,11,1,&半故障_损失62);parasail_result_free(无结果)(结果);}

带状全局对齐

返回顶部

有一个版本的带状全局对齐可用。虽然它没有矢量化,但它可能仍然比使用其他副尾巴全局对齐功能更快,尤其是对于大型序列。函数签名与其他parasail函数类似,唯一的例外是k个,带宽。

parasail_结果_t* parasail_nw_banded(常数 烧焦 * 常数限制s1,常数 整数 s1长度,常数 烧焦 * 常数限制第2页,常数 整数 s2长度,常数 整数 打开,常数 整数 缺口,常数 整数 k个,常数 副邮件矩阵* 矩阵);

职位特定评分矩阵对齐

返回顶部

如果得分矩阵是PSSM(见上文),则对齐函数将忽略查询序列,而使用矩阵中的PSSM得分。所有校准功能都支持此新模式。唯一的例外是一组“stats”函数,它们返回得分和对齐统计信息(匹配、不匹配等),而不提供完整的雪茄或回溯。这些统计函数用于计算精确匹配的计数。

不只是为省略两个输入序列之一的PSSM矩阵创建全新的API,而是使用旧的签名。此设计决策促进了API兼容性并保留了函数查找。如果替代矩阵类型被检测为PSSM,则第一个序列将被忽略。如果你知道你的矩阵是PSSM,你应该传入一个空指针。

例子:

结果 = 副帆(无效的,0,第2页,s2长度,11,1,矩阵_pssm);

文件输入

返回顶部

如果在配置步骤中找到zlib,Parasail可以解析这些文件的FASTA、FASTQ和gzipped版本。此外,在解析文件时会计算一些统计信息。

类型定义 结构 准静态{尺寸_t 烧焦 *}副轨道字符串类型定义 结构 副航次{准ail_string_t 名称副轨道字符串 评论副轨道字符串 序列副轨道字符串 质量}副故障序列类型定义 结构 副航次{副航次 *序列号大小_t 尺寸_t 字符大小_t 最短的尺寸_t 最长的浮动 意思是浮动 标准偏差}副尾序列副尾序列* 副邮件序列来自文件(常数 烧焦 *文件名);空隙 parasail_sequences_free(副尾序列 *序列);

错误信息和回跟踪

返回顶部

Parasail支持打印到stdout的回溯,从结果访问SAM CIGAR字符串,以及返回三个对齐字符串。您必须使用可追溯的对齐功能。有关如何使用可追溯对齐功能的详细信息,请参阅上面的C接口描述。

打印回溯

返回顶部

空隙 parasail_traceback_通用(常数 烧焦 *序列分析,整数 莉娜,常数 烧焦 *序列B,整数 透镜,常数 烧焦 *名称A,常数 烧焦 *名称B,常数 副邮件矩阵 *矩阵,parasail_结果_t *结果,烧焦 比赛,/*用于匹配的字符*/
        烧焦 销售时点情报系统,/*用于正值不匹配的字符*/
        烧焦 否定,/*用于负值不匹配的字符*/
        整数 宽度,/*包裹前要显示的回溯宽度*/
        整数 名称_宽度,整数 使用状态(_S));/*如果为0,则不显示统计信息;如果非零,则显示摘要统计信息*/

空隙 parasail_traceback_generic_extra(副轨道回退通用附加)(常数 烧焦 *序列分析,整数 莉娜,常数 烧焦 *序列B,整数 lenb公司,常数 烧焦 *名称A,常数 烧焦 *名称B,常数 副邮件矩阵 *矩阵,parasail_结果_t *结果,烧焦 比赛,/*用于匹配的字符*/
        烧焦 销售时点情报系统,/*用于正值不匹配的字符*/
        烧焦 否定,/*用于负值不匹配的字符*/
        整数 宽度,/*包裹前要显示的回溯宽度*/
        整数 名称_宽度,整数 使用状态(_S),/*如果为0,则不显示统计信息;如果非零,则显示摘要统计信息*/
        整数 整数_宽度,/*用于引用和查询索引的宽度*/
        文件 *流动);/*打印到自定义文件流*/

例如,parasail_traceback_generic(序列A,字符串(序列A),序列B,字符串(seqB),“查询:”,“目标:”,矩阵,结果,“|”,“*”,“*',60,7,1)可能会产生以下结果:

目标:81 EVAKDADLVIEAIPE--IFDLKKVFSEIEQYCP 112|*||***||*|**|*  **|***|***|*****|查询:170 EEAKNLGLVAEVFPQERFWDEVMKLAREVAELPP 203长度:34身份:11/34(32.4%)相似度:32/34(94.1%)差距:2/34(5.9%)得分:37

山姆雪茄

返回顶部

SAM香烟使用parasail_result_get_cigar()对CIGAR进行编码,因此使用解码函数来确定序列中每个uint32_t的CIGAR操作和长度。此外,查询和引用序列开始位置作为返回的CIGAR结构的一部分提供。完成后不要忘记释放香烟结构。

类型定义 结构 副翼_雪茄_{uint32_t中 *序列整数 伦恩整数 开始查询(_Q)整数 贝格_雷夫}副轨道_检波器_t副轨道_检波器_t* parasail_result_get_cigar公司(准故障结果 *结果,常数 烧焦 *序列分析,整数 莉娜,常数 烧焦 *序列B,整数 透镜,常数 副邮件矩阵 *矩阵);空隙 副轨_无间隙(副轨道_检波器_t *雪茄);uint32_t中 parasail_cigar编码(uint32_t中 长度,烧焦 op_字母);副轨道_检波器_t* 副轨道_检波器_编码_字符串(常数 烧焦 *雪茄);烧焦 parasail_cigar_decode_op(uint32_t中 香烟_ int);uint32_t中 parasail_cigar_decode_len(uint32_t中 香烟_ int);烧焦* parasail_cigar解码(副轨道_检波器_t *雪茄);

回溯字符串

返回顶部

回溯可以作为三个字符串的集合返回,所有字符串长度相等,表示回溯。中的索引查询裁判字符串由破折号表示-. Thecomp公司字符串表示查询裁判字符串,可以使用自定义字符比赛(完全匹配),销售时点情报系统(正值不精确匹配),以及否定(负值不匹配)。

类型定义 结构 并行跟踪_{烧焦 *查询烧焦 *comp公司烧焦 *裁判}parasail_traceback_t外部的 parasail_traceback_t* parasail_result_get_traceback返回(parasail_结果_t *结果,常数 烧焦 *序列分析,整数 莉娜,常数 烧焦 *序列号B,整数 透镜,常数 副邮件矩阵 *矩阵,烧焦 比赛,烧焦 销售时点情报系统,烧焦 否定);外部 空隙 parasail_traceback_free(parasail_traceback_t *追溯);

语言绑定

返回顶部

信用证++

返回顶部

C是parasail的本机API。之所以直接支持C++,是因为parasail.h头文件使用通用的C++包含保护(#ifdef__cplusplus)将“C”所有函数外部化。安装parasail后,将“parasail.h”添加到源代码中。

蟒蛇

返回顶部

Python绑定作为副尾帆项目。

生锈

返回顶部

生锈装订作为伞兵项目。

Java语言

返回顶部

Java绑定作为parasail—java语言项目。

Windows内部版本

返回顶部

自1.0.1版起,Windows平台完全受支持。CMake构建是在Windows上构建parasail的首选方法。使用CMake GUI应用程序,可以为Visual Studio 2010、2012或2013配置parasail构建。其他版本也可以工作,但未经测试。32位和64位Windows版本都应该可以工作。Visual Studio 2010不支持AVX。使用Visual Studio 2012或更新版本。

示例应用程序

返回顶部

除了parasail库之外,还有一个二进制文件也被编译和安装。请参见应用程序自述了解更多详细信息。

引用parasail

返回顶部

如果需要,请引用以下文件。

每天,杰夫。(2016). Parasail:SIMD C库,用于全局、半全局、,和局部成对序列比对。BMC生物信息学, 17(1), 1-11.doi:10.1186/s12859-016-0930-z

http://dx.doi.org/10.1186/s12859-016-0930-z

许可证:Battelle BSD风格

返回顶部

版权所有(c)2015,巴特尔纪念研究所

  1. 巴特尔纪念研究所(以下简称巴特尔)特此授予允许任何人或实体合法获得本文件副本软件和相关文档文件(以下简称“软件”)重新发布并使用源代码和二进制文件中的软件表格,可以修改也可以不修改。该个人或实体可以使用,复制、修改、合并、发布、分发、再授权和/或销售软件的副本,并可能允许其他人这样做,但须遵守以下条件:

    • 重新分发源代码必须保留上述版权请注意,此条件列表和以下免责声明。

    • 二进制形式的重新分发必须复制上述版权注意,此条件列表和以下免责声明随附的文件和/或其他材料分配。

    • 除了此处使用的名称外,巴特尔纪念馆(Battelle Memorial)Institute或Battelle可以任何形式使用巴特尔的明确书面同意。

    • 以任何形式重新分发软件和出版物根据使用软件执行的工作,应包括以下引用作为参考:

    每天,杰夫。(2016). Parasail:全球SIMD C库,半全局和局部成对序列比对。BMC公司生物信息学, 17(1), 1-11. doi:10.1186/s12859-016-0930-z

  2. 本软件由版权持有者和贡献者提供“原样”和任何明示或暗示的保证,包括但不包括仅限于适销性和适用性的默示保证出于特定目的,特此声明。在任何情况下都不得使用电池或出资人对任何直接、间接、偶然、,特殊、惩戒性或后果性损害(包括但不包括仅限于采购替代货物或服务;损失使用、数据或利润;或业务中断)根据任何责任理论,无论是合同责任还是严格责任,或以任何方式产生的侵权行为(包括疏忽或其他)使用该软件,即使被告知可能此类损坏。