计算机执行的生物序列鉴定系统和方法

文档序号:432367阅读:627来源:国知局

专利名称::计算机执行的生物序列鉴定系统和方法
技术领域
:本发明整体上涉及生物序列的处理。
背景技术
:对于监视和诊断应用,精密标准的病原体鉴定和近邻(near-neighbor)区分是重要的;因此在临床环境中,期望在这种非常特异的水平上进行监控的检验(l-3)。为了成功使用任何基于DNA或RNA检测的方法,这些检验必须要结合核酸序列信息的大数据库进行检验设计,以确保提供期望的信息,并解释原始数据。许多充分建立的技术例如实时PCR使用经过测序的基因组一段独特的短序列以提供良好的特异性(4)。这些技术能够通过选择充分数量的区段,对遗传上接近的生物提供精密标准的鉴定。然而,这些被选择的区段,尽管在开始的选择处理中是特异性的,但之后由于更多的生物被测序,所以发现所选择的区段特异性变得较低。特别的,这对于属于高突变率家族的病原体,以及对于具有相对较少被筌定邻近(neighboring)病原体的5病原体是个难题。另外,实时PCR不能够检测新的显著突变的存在,也不能够解析碱基序列的细节。类似地,在其他检测技术中的进展已经提供了获得病原体鉴定的方法,但受到使用PCR的某些或所有问题的影响(5-8)。高密度的再测序微阵列能够产生不同长度的区段,直接序列信息的102~105个碱基对(bp)。它们已经被成功地用于从病毒、细菌和真核细胞基因组才企测病单核苷酸多态性(SNP)以及遗传变体(9-16)。它们用于SNP检测的应用已经明确地建立了它们提供可靠质量的序列信息的能力。在多数情况中,微阵列被设计为研究有限量遗传类似的目标病原体,对于许多情况,该检测方法仅依靠识别用于鉴定的杂交模式(12、14、15、17、18)。利用SNP检测所需的再测序微阵列解析连续碱基的能力,最近再测序已经通过使用不同方法成功地用于对多种细菌和病毒病原体进行病原体鉴定,同时允许对紧密相关的病原体进行详细区分,并追踪目标病原体在体内的突变(19-21)。这种新的方法与之前的工作不同,其使用经过解析的碱基作为对DNA数据库进行相似性搜索的查询以从所观察到的杂交鉴定最可能的种类和变体,其与所述石威基响应(basecalls)配对。该系统能够同时冲企测26个病原体,并能够检测多种病原体的存在。一种软件程序-再测序病原体鉴定(腿sequencing£athogenIdentifier)(REPI)被用于简化使用基本局部比对搜索工具(旦asicLocalAlignmentSearchIool)(BLAST)进行遗传数据库相似性;险索的数据分析(22)。该REPI程序使用BLAST的默认设置,并如果期望值低于10"的话,则仅返回代表可能杂交的序列,其中所述期望值表示通过BLAST程序所计算到在数据库中随机出现所发现序列配对的可能性的量。这筛选出了所有具有不充分信号的全部情况;然而对于检测到何种病原体(或多种病原体)以及可能是何种程度区分的最终确定需要对所返回的结果进行人工检查。这种方法成功地使对各种腺病毒的精密区分以及对FluA和FluB的抹鉴定与传统的取样结果一致(19、20)。这种方法的两个重要优点是所述信息一直以最可能详细的水平被回收,以及其能够仍然识别具有最新突变的生物。这种方法还很好地保持了特异性,因为其不依赖于短序列的独特性,随着更多的生物被测序,所述短序列的独特性被不断破坏。尽管这种分析方法具有实用性,但仍有许多确定其是耗费时间的,没有被优化成将灵^:性最大化,具有复杂的结果,其仅适合专家,并且其含有多余或重复的信息。该处理是耗费时间的,因为仅有原始的筛选是自动处理的,而其他步骤需要在完成检测之前进行人工解释。因为使用简单的标准(期望的分界值是IO力)以及非优化的BLAST参数以考虑被检测的病原体,所以REPI算法提供了候选生物的列表,而没有做出最终简单的结论,其也不涉及一种原型序列相对于其他序列的结果。而是,使用人工处理来作出最后的决定,但由于REPI提供了所有类似的结果并且使用含有多余查询的公共核酸序列,因此大量无用的数据被呈给用户。另外,利用人工处理,不可能确定所开发的算法通用于已经被提供核酸碱基解析序列信息的所有生物。
发明内容本发明的一种方法包括将查询中为分类数据库提供多个参照序列,以得到多个分类结果;以及基于分类结果报告分类鉴定。所述参照序列是对遗传数据库查询的输出,所述遗传数据库查询返回对每种参照序列的评分。本发明的另一种用于处理从4t险获得的生物序列的方法包括将位于生物序列中预先确定的位置列表中的碱基响应转换成N;以及确定生物序列中相对于参照序列的单核苷酸多态性比例。预先确定的位置列表中的每个查询都代表物质与用于产生生物序列的微阵列杂交的能力。所述物质不是目标病原体的核酸。通过参考下面对实施例实施方式以及附图的描述,将容易获得对本发名更完整的理解。图1是表示三个主要任务的关系以及与任务相关的子任务的逻辑的算法示意图。任务I进行过滤和子序列的选择,接着确定原型序列与何种数据库记录最相似。任务n描绘是否原型序列鉴定支持共同的生物鉴定。任务in进行最终的检查以及从微阵列数据确定所检测的生物。ProSeq:原型序列;SubSeq:子序列;HybSeq:杂交的序列。图2是对任务1的过滤子任务的详细示意图。对于每个ProSeq,引物区被标记为N(不确定的)响应,接着从HybSeq计算UniRate。对于通过UniRate要求的ProSeq,—种校正的滑动窗口算法用于产生一种SubSeq,所述SubSeq能够用作对BLAST的查询。将成功产生的SubS叫的同一性(ProSeq中的起始位置和长度)置于文档中,用于通过BLAST进行批量查询。图3是对任务1中对每条SubSeq进行生物鉴定的子任务的详细示意图。每个向BLAST发出的SubSeq都返回了包含在返回阵列中的可能配对的列表,通过发现最佳的比特评分(bitscore)/期望值对(最大评分(MaxScore))以对其进行分类。如果MaxScore高于MIN(1(T6),则所有含有该最佳评分的返回被分类为新的阵列等级1。接着在方法部分中所描述的详细决定处理鉴定所述SubSeq的生物。图4是任务1中基于SubSeq所发现的结果确定ProSeq的生物的子任务的详细示意图。对特定ProSeq的所有SubSeq进行相互比较,以确定两个最佳评分SubSeq。如果仅存在一个SubS叫或者一个被评分为比其他的高得多,则所述ProSeq遗传该SubSeq的特征。其他情况中,根据本专利文本中的描述,确定通用的分类种类。图5.对流感ANA1ProSeq和A/Weiss/43、A/PuertoRico/8/34抹的比对。还显示了A/puertoRico/8/34的原始和经过过滤的杂交芯片结果。*表示完全匹配的序列。实施本发明的模式在下面的描述中,为了解释而不是为了限制的目的,提供了具体的细节以提供对本发明的完整理解。然而,对于本领域的技术人员明显的是,可以以不同于这些具体细节的其他实施方式实施本发明。在其他情况中,省略了对公知方法和设备的详细描述,以使对本发明的描述不会由于有不必要的细节而变得难懂。这里所使用的术语"序列,,指核酸序列例如DNA或RNA或蛋白质序列。这里所使用的"碱基"和"碱基响应(basecall),,指核苷酸碱基或氨基酸。这里所使用的术语"分类"可以指对病原体任何水平或类别的鉴定,其包括但不限于属、种、林和亚抹。这里所使用的术语"报告,,包括将信号从一个系统传输到另一个系统,以及产生任何形式的人可读的报告。所有所公开的方法都可以是在具有进行所述方法的装置的设备上由计算机执行。所公开的是一种新的软件专家系统,计算机执行的生物序列鉴定(Computer-ImplementedBiologicalSequenceIdentifier)系统2.0(CIBSI2.0),其可以成功地使用来自用户指定昂飞(Affymetrix)再测序微阵列的被解析碱基序列的信息,以提供对被检测生物的简单列表。通过将新的特征引入到完全自动的病原体鉴定中,该算法解决了之前方法的缺点。该筒单的程序能够以提高的灵敏性对包含在RPMvl微阵列上的全部26种病原体进行正确地确定(19、20、23),可以单独岸佥测或组合才企测。尽管目前该程序孚皮用于再测序^f敛阵列,但所开发的方法仍可通用,因为仅该算法的第一部分处理对微阵列特异的问题,而其余的则解决适合用作BLAST算法查询的序列。在开发通用的鉴定算法中,鉴定和解析了使得它们的应用复杂化的对再测序微阵列特异的问题。因为整个确定何种被检测的确定过程是自动化的,因此容易测试是否用于进行鉴定的法则严密并能用于所有病原体。使用该有效的程序,基于再测序的检验可以提供有竟争力的方法以同时测试许多可能的病原体,这提供了能够被非专家解释的输出结果。扩增、杂交和测序确定在之前的工作中已经讨论了RPMvl微阵列设计和实验方法的细节(19、20、23)。在本分析中所使用的实验微阵列数据是通过使用各种纯化的模板以及临床样品利用随机和复合扩增方案获得的。GCOS软件v1.3(昂飞公司(AffymetrixInc.),圣克拉拉(SantaClara),CA)被用于对杂交的微阵列进行比对和扫描以确定每个探针组中每个探针的强度。使用GDASv3.0.2.8软件(AffymetrixInc.,SantaClara,CA),基于每个探针组的强度数据作出碱基响应,其中所述GDASv3.0.2.8软件利用ABACUS算法的运行(11)。以FASTA格式提供这些数据进行以后的分析步骤。再测序微阵列(RPMv.l)是之前被设计的,用于对已知会造成发热性呼吸系疾病的20种共同的呼吸病原体和6种CDCA类生物威胁病原体的^^测和序列分型,其基于ProSeq,而不依赖预先确定的杂交模式(19、20、23)。使用不同的扩增方案、单病原体目标和多病原体目标、纯化的核酸和临床样品进行的大约4000个RPMv.l实验被检查以开发病原体鉴定算法。使用该算法利用临床样品、被鉴定的病原体以及纯化的核酸的结果在其他的工作中被详细讨论(19、20、23)。在所有情况中,根据在RPMv.l上表示的ProSeq长度,该算法在种或林的水平上,正确鉴定了生物。将讨论某些具体的实施例,以描述该算法如何在各种条件下进行。CIBSI2.0程序处理三个任务等级(图1):(I)确定所检测的生物与哪个数据库记录最相似,(II)确定是否来自每个目标的鉴定支持共同的生物鉴定,以及(III)确定是否所检测的生物属于检验被设计为要检测的目标组,或者涉及遗传上的近邻。目标病原体是检验被设计为要特异检测的生物。这里所使用的,表示从目标病原体基因组选出的参照序列的探针组被称作原型序列或简称"ProSeq"。来自基因组材料与ProS叫杂交的结果经过解析的碱基组被称作杂交的序列或"HybSeq"。HybSeq被分成可能的子序列或"SubSeq"。该算法的一部分解决基于ProSeq的生物鉴定,其以3个步骤进行操作将每个HybSeq进行起始过滤以成为适合相似性比较的SubS叫,对每个SubSeq进行数据库查询,以及对每个SubSeq的返回BLAST进行分类比较。在下一水平,对ProSeq进行比较以确定是否它们支持相同的被鉴定生物。在最后的步骤中,将被检测的生物与检验被设计为要检测的目标病原体列表进行比较,以确定是否是有被阳性检测到的。特定样品所支持的区分水平被自动确定。过滤之前开发了起始的过滤算法-再测序病原体鉴定(REPI)(20),并将带有校正的通用概念引入到在CIBSI2.0中所使用的目前(自动检测)的算法中。过滤和子序列选择^f皮用于去除由于参照序列的选择和由于其它来源(引物)造成的可能的偏差,并将HybSeq分成显著的片段以进行更快的搜索。这是图1中任务I的第一个子任务,并在图2中被详细地示意表示。如果使将ProSeq与引物杂交的所有部分标记为N响应,这样HybSeq不含有偏差的信息。对于每个ProSeq,从HybSeq计算SNP与独特碱基响应的总数量的比例-UniRate。为了消除具有不充分杂交的HybSeq,则如果UniRate>20%(SNP阀值),ProS叫被认为对于目标生物检测是阴性的。20%的UniRate表示每25bp存在5个SNP。期望在与目标病原体类类的生物之间具有这种差别频率的25bp探针与作为ProSeq基础的参照序列发生杂交是不现实的。这将结束过滤子^f壬务,并返回到任务l循环中,将检查下一个ProSeq。对于比例<20°/。的ProSeq,进行更详细的检查。在HybSeq的每个位置,经校正的滑动窗口算法(20)用于产生能够被用作BLAST查询的SubSeq。最初,检查该位置后的头20个碱基(起始长度)。如果这些碱基中低于60%的是不明确的,N,则该SubSeq进入延伸阶段。将SubS叫一次延伸一个石咸基,直到独特碱基响应的总含量低于40%(独特碱基阈值),或者如果含有最后21个碱基的滑动窗口具有少于4个独特碱基响应。这与REPI算法不同,在REPI算法中仅使用20个石威基的滑动窗口,并且如果独特碱基响应低于该窗口成分的40%,则停止SubSeq产生。在该点,检查SubSeq,并去除拖尾的N响应。需要至少一个具有7个连续独特碱基响应的位置以满足BLAST的文本大小参数,并保存SubSeq进行进一步分析。接受比100个碱基长的SubS叫。为了接受,小于或等于30个碱基的SubSeq需要至少95%的独特碱基响应(不是"N")。对于具有30-100个碱基的SubSeq,子序列接受需要至少VARI(("SubSeq长度"-30)*0.2857+70)%的独特碱基。对于大于等于80个碱基的SubSeq,如果其含有至少11个连续的碱基,则BLAST文本大小参数被改变为11。成功产生的SubSeq的同一性(ProSeq中的起始位置和长度)被置于SubSeq阵列中的查询中,所述SubSeq阵列保持与每个SubSeq相关的信息。该同一性和SubSeq被置于文档中通过BLAST进行批量查询。重复该程序,其通过从之前成功的SubSeq的末端继续,或者在失败时,通过从窗口开始产生的点继续,直到HybSeq的终点。完成之后,该算法返回到任务I循环,并进行BLAST子任务。数据库查询使用SubSeq作为查询,BLAST子任务进行对数据库的批量相似性搜索。所使用的BLAST程序是NCBIBlastall-pblastn2.12版,其具有一组确定的参数。在接种期(seedingphase)对低复杂区进行掩盖是为了加速查询;然而,在实际评分中包含了低复杂性重复。使用在2006年2月7日从获得的全参照数据库。(注意在开发过程中使用该数据库的早期镜像,但利用所描述的算法根据在该日获得的数据库的镜像返回所有的实验)。使用默认的空位罚分(gappenalty)和核苷酸匹配得分。核苷酸错配罚分-q,该参数被设置为-1而不是默认值。期望值小于0.0001的任何BLAST查询的结果被以表格的格式从blastall程序返回。将关于每个返回(比特评分、期望值、错配、匹配长度)的信息置于返回(散列键(hashkey)Hinfo〉散列中,其使用SubS叫作为散列键进行进一步的分析。从SubSeq基于分类对ProSeq鉴定病原体任务I进行的下一个子任务是在图3中所显示的确定SubS叫()状态。为了提供简单的数据以及轻松决定处理,通过两个参数总结关于每个SubSeq的信息。"鉴定的生物"代表生物的分类类别,"生物独特性"表示生物鉴定的质量。通过评分阵列对ProSeq的每个单独SubS叫()进行对返回散列中的元素进行检查并分级。评分阵列含有一对参数-比特评分和期望值-,其对给定的数据库具有固定的联系。有时,适合使用分级评分,其代表数据库的大小(期望值)或不代表(比特评分)。返回散列中的元素可以具有相同的评分,因此所有具有最高比特评分/最低期望值(MaxScore)的元素被保留在单独的阵列等级1中。对等级1中每种元素的全部分类类别也是从2006年2月7日获得的NCBI分类数据库中取得的(参见前面的说明)。如果MaxScore期望值高于MAX(目前是10'6),则SubSeq()将其被鉴定的生物以及生物独特型信息都更新为零。如果MaxScore充分小,则检查置于等级1中的返回。如果等级l含有唯一的元素,则该SubSeq被指派为SeqUniqu的生物独特性。如果等级l含有多个元素,则在全部返回都属于相同分类类别时,该SubSeq被指派为TaxUnique的生物独特型;其他情况下,SubSeq的生物状态被:没定为TaxAmbig(分类不确定)。将图3中所列出的任务用于ProSeq的每个SubSeq()。在所有情况中,被鉴定的生物被指派为每个SubS叫(),其表示等级l中全部元素的共同亲代的分类类别。在检查每个SubSeq后,该算法移动到下一个目标,其用于从SubSeq确定ProSeq的鉴定的生物(图4)。如果SubSeq的全部元素被鉴定的生物值都为零,则该ProSeq是阴性的,并检查下一个ProSeq。如果对于该ProSeq,在SubSeq中仅含有一种元素,或者SubSeq中的全部元素具有相同的被鉴定的生物,则如果有多个SubS叫查询或其遗传唯一SubSeq查询的状态,将生成被鉴定的生物的结果1查询,其生物独特性是TaxUnique(分类独特)。如果在具有不同的被鉴定生物的SubSeq中具有多各查询,则进行进一步的分析。接着通过MaxScore(比特评分)对SubSeq进行重新分类,这样具有最高双最佳评分的元素是SubSeq(l)和SubSeq(2)。如果SubSeq(l)的评分与SubSeq(2)的评分相比,大于或等于30%(评分比例阈值),则该ProSeq遗传SubS叫(l)的生物的多特性和并鉴定生物。其他情况下,ProSeq的生物状态是TaxAmbig,被鉴定的生物是全部子序列的共同亲代分类类别。如果全部子序列仅被包含在直接子代和亲代两个分类类别中,则所鉴定的生物是子代类别的子序列的生物。完成了图4中的子任务,并继续任务I循环。在结果1阵列中建立了具有被;险测生物的ProSeq列表。整体病原体鉴定和阳性响应(positivecall)完成任务I后,任务II(参见图1)被用于检查在结果1中所列被鉴定生物的值,如果它们鉴定了相同的分类类别的话,则将它们组合在一起。如果所鉴定的生物不出现在该列表中,则对结果1中的每个查询进行检查,并在结果2中生成新的查询。在大部分情况中,结果2的查询表示被检测的个体生物,但可能仍含有多余的信息。具有被鉴定生物的结果2中的这些查询中,如果一个是另一个的分类亲代的话,则这些查询实际上代表了相同的病原体。所述相同的鉴定可能还没有出现,因为由于多种可能的原因,基因组目标不会与两种ProSeq都充分杂交。备选,两种不同但紧密相关的生物可能都会与微阵列杂交。尽管难以使来自每个ProS叫的结果相互发生联系,但任务III处理了目前所执行的最后的检查和决定。已经具体执行了之前的任务,因此关于期望检测何种ProSeq的信息还没有被确定。这允许这些较低的情况能够不仅识别阳性和阴性,还能识别模糊的情况。在最后的任务中,该算法考虑是否该ProSeq鉴定了它们被设计要检测的生物。明确阴性的ProSeq和不清楚的ProSeq被认为对于目标病原体是阴性的。对于这种情况,基于在任务II中已经进行的分组,对ProS叫进行分组。结果2的查询循环结束。一个查询的13ProSeq被用于在被靶向的表内查询病原体。如果该结果2查询被鉴定的生物是目标病原体相同的分类类别或是其子代,则该病原体()阵列被更新为该目标病原体的阳性查询。如果病原体()阵列对于该病原体是零,则该病原体水平鉴定的生物是结果2()查询的生物。如果一种查询已经被置于病原体中,则需要进一步的比较。将结果2()和病原体查询进行比较。如果它们具有直接的子代亲代关系,则所鉴定的病原体的生物是子代的分类类别。其他情况下,报告共同的亲代分类类别作为被阳性鉴定的生物。在大部分情况中,如果变病原体的ProSeq充分杂交,则报告精密水平的区分。但如果一种或多种ProSeq杂交较差,则所报告的阳性目标病原体仅在属或种水平上被鉴定。所有三种任务的结果都被报告,这样人工复查是可能的。注意在任务II中被鉴定的不属于目标病原体的生物被报告为非目标阳性返回。对于在这些情况中何种被鉴定的细节需要^^查任务II水平结果。病原体鉴定选择具有101000个基因组拷贝的肺炎衣原体(C7z/awjWa/7恥wmo"/ae)样品(通过参考文献21的方法),说明在多种ProS叫被靶向到相同病原体时,如果进行病原体检测和鉴定(21)。RPMv.l具有3个高度保守的ProSeq,其选自编码主要外膜蛋白的VD2和VD4的基因以及DNA指导的RNA聚合酶(rpoB)基因。来自不同样品的HybS叫仅在表1中所示的多少个独特碱基响应方面有区别。ProSeq的百分比从80%变化到100%,除了一种情况在含量10时,其仅含有11%的rpoBProSeq,其产生独特的响应说明该检验已经达到的的^r测极限高于该含量。表1列举了对SubS叫做出的决定,以及在每个任务的最后对各种样品做出的决定。来自不同情况的ProSeq产生相同数目的SubS叫。来自不同样品的SubS叫对来自BLAST的相同最高等级返回报告了不同的比特评分。事实上,VD2和VD4产生了完全相同的结果。NCBI分类数据库将返回分类成4种不同的组,其代表肺炎衣原体(C.p"ewwo"/ae)分类组和3种子代株。AE001652、AE002167、AE017159和BA000008出现在每个样品所有ProS叫的返回中,因为它们代表完全被测序的基因组的数据库查询。一个rpoBSubSeq产生了其生物的独特性SeqUniqu。其它的所有SubS叫作为来自不同分类类别的多种返回的TaxAmbig被返回。因为VD2和VD4ProSeq都具有一个SubSeq,所以任务I为ProSeq指定SubSeq的状态。对于rpoBProSeq,一个SubSeq的比特评分足够大,所以该算法将SubSeq的鉴定指定到ProSeq。该算法的任务II将全部3个ProSeq组在一起,因为它们全部具有相同的被鉴定的生物,并被指派TaxAmbig。任务III的结果对于目标病原体肺炎衣原体(C.pwewwo"/"e)是阳性的,该决定是直截了当的,因为所有的ProS叫相互符合,并属于相同的目标病原体分类类别。尽管rpoBProSeq是SeqUniqu,但这不是任务II的最终结论,因为作为SeqUniqu的ProSeq不是子代分类组,而其它的ProSeq是TaxAmbig。这三种被识别的亚抹被评为相同的评分,其说明为ProSeq选择的序列是非常保守的,并不能在株之间进行区分。表1-以某些含量SubSeq确定肺炎衣原体(C.p"wwo"/ae)的算法、任务I、II和III基因组拷贝ProS叫独特的响应SubSeqSubSeq生物鉴定以及独特性,比特评分任务I任务II任务m訓VD289%1(Gl)C.拜,TA,145C.p朋,TAC.TA阳性C./weVD491%1(Gl)C.萍,TA,145C.p"eTArpoB80%(G2)CSU,307(G3)C萍,TA,73C.拜SU100VD2100%1(G1)C.戸,TA,164C.pweTAC.pweTA阳性C.peVD497%1(Gl)C.拜,TA,156C.p"eTArpoB80%(G2)CSU,343(G3)CTA,87C.p"eSU100VD283%1(Gl)C.戸e,TA,136C.p"eTAC.p"eTA阳性C.VD491%1(Gl)C.TA,145C.TArpoB84%(G2)C.p"e,SU,318(G3)CTA,82C.SU10VD2100%1(Gl)C.TA,164C.p"eTAC.p"eTA阳性C.peVD497%1(Gl)C.TA,156C.p"eTArpoB鶴(G2)C戸,SU,340(G3)Cp"e,TA,89C.p"eSU10VD2100%1(Gl)C.戸,TA,164C.pweTAC.pweTA阳性C./weVD493%1(Gl)C.戸,TA,148C.p朋TArpoB11%0空(Null),空(Null)空(Null),空(Null)(Gl)J138(BA000008),AR39(AE002167),Tw-183(AE017159),Cpne(M69230,AF131889,AY555078,M64064,AF131229,AF131230)(G2)Cpne(S83995)(G3)J138(BA000008),AR39(AE002167),Tw-183(AE017159)15SU是SeqUniqu的简称TA是TaxAmbig的简称流感和人腺病毒(HAdV)是仅有的病原体,其具有选定的ProSeq,所述ProSeq将允许一艮据之前工作所讨论的(19、20、21)进行详细的抹水平上的区分。所述之前的工作人工分析,发现该微阵列结果与对临床样品的传统测序结果非常符合。将使用更新的NCBI数据库对原始微阵列结果运行CIBSI2.0程序的结果与之前的发现进行比较(表2)。所鉴定的生物与开始的发现不一致,因为所使用数据库中的差别。事实上,被提供给来自该工作的传统测序结果被发现,每个样品都在具有最佳评分的返回中。对于13种流感中的8种以及12种流感B中的3种情况,任务I和II的结果发现传统的测序是唯一最佳的返回,因此是所鉴定的生物。由于对于红细胞凝聚素基因在数据库中存在大量的独立序列,因此在某些情况中没有发现唯一的独特查询并不令人吃惊。在其余的5个流感A样品的每一种中,所返回的其它序列与传统的序列有低于0.2%的区别。对于流感B,较少样品具有独特的单独鉴定,是因为对ProSeq,使用较老的参照序列,这使得发生较少的杂交(19)。这也意味着当为一个样品返回多条序列,它们代表更大的遗传变化最高达到2%。这种比较仅代表对于红细胞凝聚素(HA)ProSeq在任务I水平的算法分析,其中所述红细胞凝聚素是唯一被传统测序的区域。对于任务III结果可以没有比较,因为之前的工作不会获得来自多个ProSeq的一致。作为目前进行任务III水平鉴定的方法的结果,在该水平报告的生物对于每个样品是较不特异性的(H3N2或FluB)(补充表1A和IB)。对于HAdV样品,该算法还产生了比之前通过人工方法做出的更精细标准的区分(未显示)。表2-从流感A和流感B临床样品的HAProSeq所鉴定的病原体<table>tableseeoriginaldocumentpage16</column></row><table><table>tableseeoriginaldocumentpage17</column></row><table>*与该返回平分(tied)的多个返回sHybSeq被分成多个SubSeq下一个4企测肺炎支原体(Mjwewwom'ae)病原体的实施例说明了一种对于目标病原体仅有一个ProSeq的情况,这意味着任务I所鉴定的生物自动地成为任务II的结果,也将是在任务III中对目标病原体唯一被考虑的ProSeq。该ProSeq对于区分不是最佳的,因为其是从粘附蛋白Pl基因的高度保守区域(345bp)所选择的。使用相同的纯化核酸储备测试40个微阵列,在每种情况中肺炎支原体(Mjwewmcw/ae)或其一种被识别的亚株分类数据库查询与MaxScore平分(tied)。为了更好地理解这些返回,对这些数据库序列进行检查并分成三组序列A、B和C,其基于它们与用于形成ProSeq的参照序列匹配得如何。通过对该基因的序列进行CLUSTAL比对,确定这3組中该数据库查询的布置。该比对确认这些数据库查询在不由ProSeq所表示的区域中互相之间更加显著不同,并含有能够允许更精密区分的充分可变性。组A的成员与ProSeq完全匹配,在微阵列上被区分。类似的,组B的成员除了第199位外与ProS叫匹配,其中第199位碱基响应是C而不是T。组C序列含有多个数据库查询,其更可变,并可能与ProSeq中的其他查询有区别。对于40个肺炎支原体(M/wwwom'ae)的实验测试,高达95%的ProSeq被杂交,但仅65%的结果在第199位含有清楚的碱基响应。如果它是清楚的,则其一直与组B序列匹配。在N碱基响应是在第199位做出的情况中,组A和B的序列都被返回相同的评分。与这一点无关,对每个所测试的样品,目标病原体被阳性鉴定为肺炎支原体(M/wewmow'ae)。这些实施例显示如果做出决定,而不依赖是否将单个或多个ProSeq用于目标病原体。它们还表示区分可能的水平是由所选择ProSeq的质量所决定的。对于某些病原体,精密水平的区分是不需要的,而目前对RPMvl所测试的选择将提供令人满意的信息。CIBSI2.0算法证明其自动报告区分最高水平的能力,这是由HybSeq信息所支持的。遗传近邻为了证明该算法如何处理近邻遗传物种,考虑了非靶向的病原体的例子。对于一种生物威胁病原体重型天花病毒,在RPMv.l上,运行确认,其证明重型天花病毒模板在检测时通常被阳性鉴定。该阵列具有两个来自红细胞凝聚素(VMVHA,~500bp)和细胞因子影响修饰子B(VMVcrmB,300bp)基因的两个ProSeq用于检测重型天花病毒。表3显示了对每个ProSeq进行18轮的结果,其中近邻天花病毒被以各种浓度掺入到鼻冲洗物(nasalwash)中。杂交的ProS叫的百分比是充分的,因此如果仅仅考虑杂交区,则人们可以假定该区域鉴定此目标的存在。这将说明所选择的参照序列不是最佳的选择。然而,如果不采用该算法,则实际上没有样品会被鉴定为重型天花病毒或轻型天花病毒。天花一直是所列举正痘病毒属(Orthopoxvirus)具有VMVcrmBProSeq最高评分的物种之一,但仅在7种情况中,其作为所检测的可能物种是独特的。在具有最低浓度的3种样品中和VMVcrmB杂交的片段中,ProSeq鉴定重型天花病毒在许多正痘病毒属物种中是引起杂交的一种。对于所使用的扩增方法,检测的下限在该浓度和比它高的浓度之间。VMVHAProSeq在仅两个实验中做出对正痘病毒属物种的鉴定,并将重型天花病毒列为平分的最佳评分返回(tiedbestscoringreturn)。在两种情况中,VMVcrmBProSeq都特异性地将天花病毒鉴定为最佳匹配。杂交的ProSeq的百分比与该样品的含量相关。表3-对重型天花病毒ProSeq进行从天花样品鉴定生物CFUProSeqVMVC脂BVMVHA%鉴定%鉴定5*10777.9天花病毒29.4正痘病毒属5*10779.8天花病毒25.7正痘病毒属1.6*10779.4天花病毒14.8-1.6*10777.5正痘病毒属*24.5-1.6*10776.8天花病毒21.6-1.6*10774.5正痘病毒属*17.3-5*10677.9天花病毒25.7-5*10678.3正痘病毒属*22.0-5*10673.0天花病毒13.0-5*10673.4正痘病毒属*7.8-1.6*10675.3正痘病毒属*8.6-1,6*10649.8天花病毒6.6-1.6*10665.5正痘病毒属*10.0-1.6*10662.9正痘病毒属*8.2-5*10558.4正痘病毒属*9.0-5*10556.2正痘病毒属8.0-5*10549.0正痘病毒属9.3-5*10544.6正痘病毒属7.8-*-仅仅是正痘病毒属中的近邻,而不天花病毒或轻型天花病毒CFU-集落形成单位过滤该实施例证明算法过滤部分的重要性,其通过对人流感A/PuertoRico/8/34(H1N1)林的H1N1神经氨酸酶(NA1)和基质(mWn'x)基因的ProSeq的HybSeq进行考虑。过滤是必要的,因为将ProSeq的HybSeq以单个查询发送到BLAST中会使评分相对于ProS叫有插入或缺失的林有偏差,特別是在使用将碱基响应的应用最大化的BLAST参数时。滑动窗口测试是该算法控制过滤的部分。如果关闭过滤,则整个HybSeq将用于显示显著杂交的两个流感ProSeq的单个子序列中。从NA1ProSeq的HybSeq,A/Weiss/43(H1N1)抹被鉴定为最可能的抹,而从基质ProSeq的HybSeq则正确地鉴定了A/PuertoRico/8/34。为了更好的理解偏差的来源,两个抹的NA1基因和参照序列的CLUSTAL比对被用于获得图5所示的ProSeq。这两林显示了95%的同一性(在1362个被比对的碱基中有67个错配);然而与A/PuertoRico/8/34(SEQIDNO.3)相比,在A/Weiss/43(SEQIDNO.2)和NA1ProSeq(SEQIDNO.1)中都被插入了45个碱基的片段。通过进行默认的过19滤,NA1ProSeq被分成5个SubSeq,因为该算法遇到了没有响应的大片段。在任务I中,该算法确定3个较短的SubSeq具有被鉴定的H1N1生物,因为许多包含A/PuertoRico/8/34的分离物具有相同的最佳评分,而其他两个SubS叫仅具有被鉴定为A/PuertoRico/8/34抹的生物,因为最匹配。通过NA1ProSeq鉴定的生物是A/PuertoRico/8/34,因为这些SubS叫之一具有高得多的评分。该ProSeq支持在基质ProSeq中所作的相同的抹鉴定。该生物被鉴定为A/PuertoRico/8/34,因为仅该生物被纟佥测到两个ProSeq。通过过滤检测到了正确的目标病原体,而不使用过滤的话,目标病原体的鉴定水平将是流感A(H1N1亚型),因为斗会测到了两种生物A/PuertoRico/8/34和A/Weiss/43。将HySeq分成SubSeq以去除偏差可以降低鉴定的水平,正如在这种情况中对所述5种SubSeq中的3种所出现的。之前天花的例子是另一种情况,如果不使用过滤的话会鉴定出错误的物种(骆驼痘(a7me/Pra;)或普通狨猴(Oz〃她n'x乂acc/zw))。表2中的临床样品显示被分成多个SubSeq的HybSeq能够非常特异性地鉴定。作为较低点,正如在该方法中所描述的,如果使用复合策略而不是普通策略进行扩增,则需要进行额外的过滤以去除由于特异性引物所引起的潜在偏差。图5具有A/PuertoRico/8/34杂交的原始结果(SEQIDNO.4)和掩饰过滤的结果(SEQIDNO.5)以显示该干涉的例子。除了由于之前所描述的原因的偏差的问题之外,在原始结果中出现了18个碱基的序列,因为它们在与引物相互作用的位置上,所以在过滤后它们成为N。如果这些碱基响应被包含在所构建的子序列中,则对ProSeq的查询将是不正确的株。该算法成功地提供了病原体鉴定最可能详细的最高水平(种或林),这依赖于每个ProSeq的质量。这种鉴定的能力需要对病原体的身份最少的输入,这使得非专家也可以使用。所加入的允许全部自动化的关键特征是使用分类数据库,其将生物分成有序的组,并提供生物查询之间的关系,这使得能够消除多余,对不同的相关原型序列进行比较,并简化数据的表达。这使得数据库即NCBI以最大的成功进行使用,所述数据库是过剩的并进行最小的修复(minimalcuration)但其稳定地接受更新的和新的序列信息。尽管已经通过仅使用NCBI数据库对其进行证明,但其他数据库或用户所做的数据库也能够容易被使用,这可以提高性能。该算法能够在病原体的所有分析水平提供精确的鉴定,这是较低变化的或者是由高度保守的ProSeq所表达的。对于更可变或快速突变的病原体例如流感A病毒,任务I和II仍提供详细的鉴定,但任务II不能够报告精密标准的区分。传统测序的流感病毒基因序列的比较说明该算法能够自动调整以更新数据库。该算法证明其正确地将在ProSeq上由于具体的病原体所引起的杂交从由遗传近(近邻)的抹所引起的杂交中区分出来的能力,并且不会造成不正确的鉴定,其减少了假阳性的一种可能的原因。对原始杂交结果进行过滤以降低计算时间,这可以用于潜在的引物干涉,更重要的是降低潜在的偏差。该简单的集成算法提供了充分的和精确的鉴定,这样可以直接使用RPMv.l或类似的再测序阵列和检验。除了证明CIBSI2.0的成功之外,本工作还包括开发能够观察正确选择ProSeq重要性的算法。RPMv.l是第一个再测序阵列,其^f皮特异性地设计用于病原体检测,其使用数据库相似性检索并作为该应用的原型。其已经证明小到100bp的单个ProSeq在被正确设计时,能够足以清楚地鉴定生物。然而,清楚地表示某些正常的ProSeq提供了对病原体更好的确认和更详细的信息。该设计对这一点的重视已经成为产生对任何病原体都普遍应用的能力。提高任务III的性能可能需要更多关于每个病原体的信息,并可能需要对每个特异性的病原体或每类病原体进行开发。这种信息也可以是该算法所需要的以鉴定样品和数据库查询之间的何种差别表示显著的突变。对数据分析的这种等级设计可以容易地引入建立在进行的分析上的分析。使用正确设计的再测序微阵列以及其自动的检测算法能够提供以开发能够同时对多种生物进行监测的检验,同时提供精密的抹水平区分,这提供了关于详细的林识别、抗生素抗性标记物和致病性的信息。这将能够从多种生物分析部分序列信息用于诸如下列的应用差异诊断具有多种可能原因的疾病(即发热性呼吸系疾病)、跟踪病原体的出现、在监视应用中从无毒的遗传近邻中区别生物威胁以及用于跟踪共同感染或超级感染的影响。依赖样品和目标序列组质量的分类概念以及报告不同程度的鉴定不限于在测序微阵列,而是更普遍用于任何能够返回序列水平响应的能够用于查询参照DNA数据库的平台。随着测试多种病原体的检验的趋势的提高,自动分析工具如本发明的装置变得对于以简单的格式进行快速鉴定更加重要,这对于非专家在日常的基础上是有用的。源代码下面是所公开方法的一个实施方式的PERL源代码列表。"overclinical"程序是运行其它程序的顶级程序。"fstorepi,,进行过滤、准备子序列和查询文档准备。该程序使用输入文档"primerhyb.dat",其含有预定的被编成N的位置列表。"rimblast"进行BLAST查询。"dbparse"进行该分类分析。该程序使用输入文档"chiplpathogengroups,,,其含有每个ProSeq的目标病原体的列表。<formula>formulaseeoriginaldocumentpage22</formula>rint"Filenamenotfound:$unam\nexitjfstorepi#!/usr/bin/perlmy$win=20;my$probe=21j$debug=0;$unam='m;$mci=0;$i=0;while($i<=$#ARGV)■(■if(indexC$ARGV[$i],"-";)+i:)[if(substr($ARGV[$i],1)eq"i叩"){$unam=$ARGV[$i+l];$i++;}elsif(substr($ARGV[$i],1)eq"debug"){$debug=$ARGV[$i+l];$i++;}elsif(substr($ARGV[$i],1)eq"s叩"){$mci=$ARGV[$i+l];$,++;}$i++;}else{$,++;$ch=jo,'n('''',$unam,".fst';if(!(-slchj){print"FilenamenotFound:$ch\n";exit;}%hnri=();if(opentlNP,"p门'merhyb.dat")){while($line=<lNP>){@a=split("",$line);$hnri{$a}{$a[3]}{str}=$a[1];$hmi{$a}{$a[3]}{beg}=$a[2];close(lNp;);$ch=join("",$unam,",fst',;system('bin/ls$ch>f"Mst");open(iNP,"flist"),.@mast=<iNP>;c"lose(lNP);unlink"f"st"chomp@mast;$search=">";$lnput="chiplti"1e.fasta";open(lNPji叩ut;)IIdie;@inp"st=〇;while($line=<lNP>){$l,'ne=~tr八cM//;push(@"inplist,$line);}close(lNP);chomp@inp"st;@inch,'p=fi1terparse(\@i叩list);for$lnput(咖ast){print"parsing$input\n"ifC$debug);$Output>;joinC'",,substr(《i叩ut,0,-4),"bl,blai";k)utpu2=]oin。'",">'',substr〖$input,0,-4),"b2.blai"〗;open(工NP,$input3;@inplist=〇;whi1e(S"Mne-C){$"Mne=~tr八cM//;push(@inplist,$line);}closedNP);chomp(5i叩list;@in=filterparse(\@inplist);frcdet($mci,substr(Sinput,0,-4),\%hmi,@inchip,@in);($olist,$olis2)=f"ilter($win,$probe,\%hmi,@in〉;open(OUT,$Output);printout$olist;close(out);23open(OUT,$0utpu2);printOUT$olis2;close(OUT);exitjsubfilterparse■[my(Sinplist)=@—;$j=0;my@name=0;my@val=〇;while($j<$#inplist+l)■■#if(index($inplist[$]'],"affx-TagiQ-ex")+l){$]++,}#if(index($inplist[$]],"attim")+1){$]'++;}#if(index($"inplist[$j],"atnac")+1){$j++;}if(indexC$inplist[$j〗,$searchO+i:>{$"i=0;pysh〖@name,join(".",split(//,$i叩list[$]'])));§temp='m;while(!(index($inplist[$]'〕,$search)+l)&&$].<$#inplist+l){$inplist[$]']=tr/\cM//;for($inpl4st[$]■]){s/a\s+〃;s/\s+$〃;s/\s+//g;$temp2=join("",$temp,$inp"Mst[$j]);$temp=$temp2;$]++;$temp=~tr/catgN/CATGn/;push(@val,$temp);}else{^$j=$j+l;feturn(\@name,\@val);subfrcdet{my($mci,$inp!$hmi,$nam3,$val3,$name,$val)=@—;my《Output=]'oi.n("",">",$inp,"■fre");"if(Smc"0{open(oUT,:Join(''",''>'',$inp,"-Bfl''));}for($j=0;$j<=$#{$name};$j=$j+l){$l=index($$,e[$j],""〗;$current=substr〖$$name[$j]'1,$1-1〕;if(!(index($current,"AFFX'O+l)){printOUT"$current\n"if($mci);for($i=0;$i<=$#{$nam3};$"i=$i+l){if((index($$nam3[$i],$current)+l)){$ku=$i;$i=$#{$nam3}+l;}ina=split(//,$$val3[$ku]);Omc-split(〃,$$val[$j]);$mkey=substr($$name[$;j],l,index($$name[$j],"")-1);ifCexists${$hmiH$mkey}){for$skey(keys%{${$hrrri}{$mkey}}){$len=length(${$hmiH$mkey:H$sl<ey:KstrD;■if($,en>2){Sbeg-HShmiHSmkeyHSskeyHbegl-l;"n3=$beg+$len;if($end>$#mO{$end=$#use;}for($jm=$beg;$jni<$end;$jni++;)■[$mc[$jm]="N'';]for($i=0;$i<=$#ma;$i++:>■[if(!(index($mc[$"i],$ma[$i])+l)){$mc[、$i]=~tr/CATG/catg/;if($mc[$i]ne"n"&&$mc[$i]ne"N"){printOUT$i+l,"$mc[$i]\n"if($mci);",$"inp,'',frc2''));$line=join("",@mc);$$val[$j]=$l,'ne;close(OUT)if($mci);if($mci){open(OUT,join("",,$inp,"■Bfst"));$;j=0;wHle($j<$#{$name}+l){#print"$j$$name[$]']、n";printOUT"$$name〖$;j3\n'';printout"$$val[S爪n";$j++;close(OUT);}open(OUT,$Output);open〖OUT2,join('"',$tocj=0;$toci=0;$dir=0;$outl,'ne="";$out"Hn2="$lnput\n";for($j=0;$^<=$#{$name]";$j=$j+l){$l=index($$name[$],""5;$current=substr〖$$name[$j],1,$1-1);$cou=0;$cou2=0;$bcou=0;$l=lengthC$$val;$cou=$$val[$j]=~tr/n/n/;$cou2=$$val〖$;):〗=~tr/N/N/;$bcou=$$val〖$j〗=~tr/c/c/;$bcou=$bcou+($$valtr/t/t/);$bcou=$bcou+〖$$vali$j〕=~tr/a/a/3;$bcou=$bcou+($$val[$j〗=~tr/g/g/3;$l=$l-cou2;$cou=$l-$cou;$fr=$cou/$l*100;$temp=jo"in("",$outline,sprintf("%s'%sHg-%g-%g\n",$,'np,Scurrent,$fr,$cou,$bcou,$l));Soutline-Stemp;if($fr>20&&100六Sbcou/(S什ni)《25){$temp=join(''",$out"h'n2,sprintf("%14s%5.1f%6g%6g\n",$current,$fr,$bcou,"";$outl,'n2=$temp;printOUT$outline;printOUT2$outlin2;close(out!);close〖ouT2〉,unlinkjoin。'",S"i叩,"■frc2");return;subfilter■[my($win,$probe,$hmi!$name,$va"0=@—;my《o"Mst="'';my$olis2=m,;for($]'m=0;$〕-m<=$#"C$name};$jm++;){myStmolist='m;my$tmo1is2="";if(index($$name[$;jm],"AFFX-TaglQ-EX")+i;){$$val[$jm]=m';}if。ndex($$name〖$jm〗,"attim";)+i:){$$val[$;jm]='''';]if《inclex〖$$name〖$;jm〗,"ATNAC"〗+1〉{$$valmy@nuse=。;$$val[$jm]=~tr/CTAGn/ctagN/;my@use=split(〃,$$valPjm]);my$nummat=0;$mkey=substr〖$$name[$;jm],1,,ndex($$name[$jm],""-l);,TCexists${$hm"iH$mf:ey}){for$skey(keys%{$$hmi{$mkey}}){$len=length(${$hmiH$mkeyH$skeyHstr]0;25if($len>2){$beg=${$hmiH$mkeyH$sl<ey;Kbeg}-l;$end=$beg+$len;■ifC$end>$#use;){$end=$#use;}for($j=$beg;$j<$end;$j++){$use[$j]="N";}for($j=0;$j<=$#use;$;j++:){if(!($uset$j]eq"Nr')){push(@nuse,'T');$nummat++;}else{push(@nuse,"0");》my$pH=0;if($nummat>20;){for($j=0;$i<=$#use;$j++;){#if($nuset$j]==l&&$nuse[$j+l]==l){if($nuse[$j;l==l){my$current=substr($$val[$jm],$j,$win);$score=lj—$zscore;for($k=$j+l;$k<$:J+$w"in;$k++){$score=$score+$nuse[$l<];}#if($score>4&&!(index〖Scurrent,"圆N")+1)){if(《score>4^{my$len=$win;$!<=$;j+($w"in-l);■if($probe>$'..:in){whi1e($len<$probe&&$score/$len>-4){$k++;$len++;$score=$score+$nuse[$k];$zscore=$score;}else{$zscore=$score;for($jl=$k-$win;$jl<$k-$probe;{$zscore=$zscore-$nuse[$jl];}wh"ile($score/$len>.4&&$zscore>3){$k++;$len++;$score=$score+$nuse[$k];$zscore=$zscore_$nuse[$k_$probe]+$nuse[$k];}$len—;$jl=$j+$len-1;■if($nuse[$;n]==:l&&($nuse[$jl-l]+$nuse[$j"l-2]+$nuse[$]'l-3]+$nuse[$;^-4])<l){$j,一;$len—;whileC$nuse[$jl]<i;)■[$]1—;$len—;if($nuse[$;jl]==l&&($nuse[$jl-l]+$nuse[$jl-2]+$nuse[$jl-3]+$nuse[$jl■4])<l){^current=substr($$val,$],$len);if($current=~m/[ctgaCTGA]{7}/){if($len>100){$pri++;if($score>80&&$current=~m/[ctgaCTGA]{11}/){$tmolist=join("",$tmolist,$$namet$jm],"",$j,"\rT,$current,"\n");}else{$tmolis2=join('"',$tmolis2,$$name[$jm],":",$j,"\n",$current,"\n");}eTsif(hen>30){if($score/$len>=(.95-.25*($len-30)/(70.))){$pri++;if($score>80&&$current=~m/[ctgaCTGA]{11}/){$tmo"Mst=;jo"in('''',$tmolist,$$name〖$jm],":","\n",$current,"\n"〕;}else{$tmolis2=joinC'",$tmolis2,$$name[$jm],"",$j,"\n",$current,"\n");26$力:$k-:}elsif($len>20)ifC$score/$,en>=$pri++j$tmo"Ms2=join('$j=$k-1;}}else{■95){',$tmol,s2,$$name[$jm],":",$j,"\rT,$current,"\n")istis2■if($Pri>l){$o"Mst=]'oin(''",$ol.$o"lis2=joinC''',$ol.}e,s"if($pH>0){$ol,st=join("",ist,$tmolmy@a=split《"\rT,Stmo1"is2);if($a[l]=~m/[ctgaCTGA]{i;L}/〕{$olist=join("",Solist,$tmol"is2);return($olist,$o"Ms2;);,$tmolist);,$tmolis2》;ist);runblast#!/usr/bin/perl#丄perl##perlscHpttohandlefilteringoHginallyimplementedinJAVAREPIandcarryoutblasta,l#Created7/12/2005-Forxserveclustersoexecutionof#blastsearchdonethroughSGEjobqueue#useFile::Copy;$use「=petloginO,■my$de6ug=0;—$noque=l;my$srcdir=",/";my$tmpcHr-"/common/scratch/rep"i/";my@in,$eltime,$input,$infile,$outfile,$insge,$outsge,$errsge,$idsge,$c:mde,$cmdf^cmdw,$onda,$cmdo,$cmd,$cmdb,$cmdfi,$err;$enWsge—root}='7common/sge";#Extractthecommandlineoptionsforthisscripttheonestobepassedtoblastall.my%param=〇;$cmdblast='7conimon/bin/blastal1,';SpararT^FHoW'VW''""1D","\\V'";;$paramM=7";$param《r4='T';$param"[h4='750',;Spa广am^d》-'7co腿on/data/nt',;my$php=0;my$repiparse=0;my$win=0;$i=0;wh~ile($i<-$#ARGV){if(index〔$ARGV[$i],"-inp")+l){$input=$ARGV[$i+l];$i++;}■elsif(index($ARGV[$i],',-debug,》+i;){$debug="RGV[《i+l];$i++;}elsifCindex($ARGV[$i],"-useqO+l){$noque=0if(index($ARGV〔$i+l],'y')+l||index($ARGV[$i+l],"Y"+1);$i++;}elsif(index($ARGV[$i],"-")+l){if(substr($ARGV[$i],1)eq"F"〕{if($ARGV[$i+2]eq"-U"){$param{substr($ARGV[$i],l)}=join("'',"\\\"",$ARGV[$i+l],''\\\''",$ARGV[$i+2]);$i=$i+2;}else{$param《substr($ARGV[$i],l)}=:join(,'',,"VA"",SARGV[Si+l],"\\\"");$i++;}}else{$param〖substr(URGV[$i],l)}-$ARGV[$i+l];$i++;$i++;print"beginningrepiv2withinputfilename$lnput\n"if($debug);if^$noque^■[$infi1e=join("",$input,",blai");$outfile-]'oin("",$lnput,".blao"j;$cmd="$cmdblast-pblastn-i$iirhle-o$outfile";for$mkey(keys%param){$cmd=join("",$cmd,"-,',《mkey,',",$param{$mkey30;#Runcommandsystem''$cmd";}else{#constructnamesofrequiredfilesandremovepreexistingversionsoffiles#filesforfinalreportmy$errfile=join('''',$srccMr,$input,',,err");unlink$errfilejunlinkjoin("'',"rcdir,S工nput,".blao";#filesforblastcommand$infile=join("",$tmpdir,$lnput,"■i'tmp");$outfile=join(""'Stmpdir,$input,".otmp");unlink($infile,$outfile);#filesforbatchqueue$insge=join("',,,,cgisge-",$lnput);open3ir(DIR,纟ttnpdir);$a=join('M,,,'cgisge-",$lnput);@fi1es=grep{/$a/}readdir〖DIR);unlink〖$tmpdir.$—)for(針iles);closedi「(DIR);$insge=:joinC''',$tmpdir,$insge〕;Sidspe-]'oin〖",',,S化sge,"icT〕;#checkforerrorinparameterslist#errorche($errfile,$err,$php)if($err);if(!(-s;|0化('''',$51^01,'「,$1叩111:,",13~^,'"){copyCjoin(""'$srcdir,$input,",blai",join〖"",$srcdir,$lnput,",blao,'";exitj#createinputblastfilecopy(join("",$srcdi「,$input,",blai"),$infi1e);#jo寸nlistofvariableparameterstoBasiccommandvdth"inpiit—outputfile$cmd-,'$cmdblast-pblastn-i$infile-o$outfile";for$mkey(keys%param){$cmd=join。M,,$cmd,''-","key,"",$param{$mkey});#Runcommand#additionalcoderequiredtogenerateresultsworkingthroughsgeopen(OUT:">$insge',)orerrordie($errfile,"Failedtowritebatchqueuescript\n$insge\n",Sphp);printOUT"#!/usr/bin/perl\n";printOUT"system(\"$cmd\");\n";printOUT、611(011丁,\''>$,'01596\',);\n";printout"printOUT\"\$env{:iob—id}\";\n";printOUT"closeOUT;\n";closeout;($sec,$min,$hour,$day,$month,$year,$dweek,$dyear,$dsave)=loca"ltime(time);$eltime=]'oin("'V'Summaryofresults\nreferto.blaofileforrawblastresults\nStart",Shour,"",$min,"",$sec);$i=、/common/sge/bin/darwin/qsut>-syncy-o$tmpdir-eStmpdir-s/usr/bi'n/perlSinsge';@a=split("",$";$id=$a[2];Soutsge-join("',,主insge,".o",$id);$errsge=join("",$insge,",e",$id5;unlinR(5inspe,^idsge);($sec,$min,$Fiour,$day,$month,$year,$dweek,$dyear,$dsave)=1ocaltime(time);《eltime-join('M,,$eltime,"END",$hour,',",$min,"",$sec,"乂n");#p门'nttheoutputtothe化eif(-eSoutf"e){move($outfile,join〖"'',$srccHr,$input,'',blao''";#removeinputandoutputfilesunlink(Soutsge,Serrsge,Sinfi1e,$outfi1e);}else{open(OUTFiLE,,'$errsge,,);my@errput=<0UTFILE>;closeoutfile;$err=join,'",@errput;#removeinputandoutputfileserrordie(Serrfile,$err,$php〕;exitjsuberrordie■[my($file,$err,$php)=@—;open(INP,'VSfile")ordie"can\,topenfileerrorfile'';print工NP"ERROR:\n$err";exitjdbparse#!/usr/bin/perl#perlusestrictjusewarnings;useDBIJmy$usetarsuc=l;my$bound=le-6;my$debug=0;rr^$i==0;wh'le($i<=$#ARGV){if(index($ARGV[$i],'?')+l){if(stibstr($ARGV[$i],1)eq"i叩"){$u,=$ARGV[$i+l];$,++;}elsif(substr(URGV[$i],1)eq"debug"){$debug=$ARGV[$i+l];$i++;}elsif(substr(SARGV[Si],1)eq"targ"){$usetarsuc-$ARGV[$i+l];$i++;}$i++j}else{my$chippatho-"chiplpathogengroups";o&enClNP,$chippathcOor3ie"Failedtoopeninputfile$chippatho\n,my%patho=0''my$line;29while($line=<lNP>〕■[$line=~tr八cM//;chomp$line;my<3a=split(''''',$line;);for(my$i=l;$i<=$#a;$i++){my@b=split(",",$a[$i]);my$c=jo"in("",","'$b[l],"'")$patho{$aH$c}{name}=$b(;0〗$patho{$aH$c}{stat}=$b[2]closedNP);$chippatho="targetsruns";open(iNP,$chippatho)ordie"Failedtoopeninputfile$ch,'ppatho\n";my$temptar=0;%target=0;while($l"ine=<lNP>){$line=~tr八cM/chomp$line;my@a=splitt""',$line);for(my$i=l;$i<=$#a;$,++){my@"sp"Mt(",",$a[$i]);my$c=join("",",",$b[l],",");$targett$aH$cHname》=$b;$temptar=lif(index($unam,$a}=$a[:iJ;closedNP);}else{print"NoSchippathofile\n";my@mast=(join('''',$unam,".blao"";my$dbh=openconnection(〗;formy$lnput(mastO■[my@a=sp1it('7",substr(Sinput,0,-5));my$sinput=$a[$#a];ifOexistsStarget"fSsi叩utD{Starget(Ssi叩utTUHtaxid;H-999;$target〖$SinputHl}"[nanie}=''unknown'';print"parsing$lnput\n"if($debug);outfilter(substr($input,0,-5),$Sinput,my$e1time,\%patho,\%target,\%taxexempt,SbouncO;closeconnection($dbh);exitjsuboutfilter■[usestrict;my($input,$Slnput,$eltime,$patho,$target,$taxexempt,$bound)=@—;my%ha=U;my%iha=(〗;my%"Mac=(〗;my$output=join("",">",$lnput,".rdb");my%frclist=0;my$"Mne;if(open(lNP,join("'',$lnput,''.frc''))){whi1e(Sline《lNP;0[$line=~tr八cM/Achomp$"Mne;my@a=split(""',$1ine);$frclist{$a[l]}{per}=$a[2]$^clist{$a[l]:Kmat}=$a[3]$frclist{$a[l]}{m"is}=$a[4]$frclist{$a[l]}{len}=$a[5]closeClNP);unlink"f"Mst";unlink"flisterr";my$ch=join("'',$input,"b,blai'',$input,".blai";system(f'(/b"in/ls$ch>flist)>&flisterr";open(lNP,"flist'';);my@mast=<iNP>;c1ose(lNP);unlink"f"list";unlink"f"Msterr";chomp@mast;my@inplist=〇;if(!咖ast){print"Filesfor$lnputnotfound\n";exit;}formy$inp(@mast){openC工NP,Sl叩;);while($line=<INP>){$line=~tr八cM//;pushC@i叩list,$1ine)jclose(lNp;);chomp@inplist;my$j=0imy$sear=">"while($j<=$#inplist){if(index($inp^st[$;j],">")+l){my$mkey=substr($inp"Mst[$;j],l,index($inplist[$j],"")-l);my@a-sp"Mt("",$inplist[$;n);my@b=split(":",$a);my$mnkey=0;$mnkey=$b[2]if($#b>l);$j++;my$temp="";$temp2=$temp;wfiile〔$j<$#inplist+l&&!(index($inplist[$j],$sear)+l)){$inplist[$〕']=tr八cM//;for(Si叩l1st[$]]){s/a\s+〃;sAs+$〃;s/\s+//g;$temp2=]'o"in("",$temp,$inplist[$;i];);$]++;$temp=$temp2;$temp=~tr/catgN/CATGn/;$iha{$mkeyH$mnkey;}=$temp;}else{}$j++;Lh=join(m',Si叩ut,"b.blao",Slnput,".blao");system("(/bin/Is$ch>flist)>&flisterr");open(iNP,"flist";);@ttiast=<iNP>;close(iNP)iunlink"flist";unlink"flisterr";chomp@mast;@inplist=〇;formy$1叩(咖ast)[open(lNP,$inp;);wh"ile($line=<lNP>)($line=~tr八cM/push03i叩list,Sline;)jclose(iNP;);chomp@inplist;wFi"ile($;j<-$#inplist){my$mfi:ey=substr($inplist[$;j],0,index($inplist[$j],""));my@a=split("",$"inplist〖$:j〗:j;my@b=sp"h't(":",$a);my$mnkey=0j$mnkey=$&[2]if($#b>l);my@temp=split(/\|/,$a[:i;D;my$skey=$temp[—$#temp];$line=$skey;my$gi=-ljif(index($a[l],—__."gi\r)+i){$gi=$temp[l];$Tine=$temp[3];$skey=$gij'f((my$i=index($skey,''\.''))+l){$skey=substr($skey,0,$i);chomp$skey;$ha{$mkeyH$mnkeyH"$sl<ey'';Kline}=$"Iine;$ha{$mkeyH$mnkey}"f''$skey''Hscor3"=$a[llj;$ha"i$mkeyH$mnkeyHn$skey''Heval}=$a[10〗;$ha{$mkeyH$mnkeyH''$skey"Hg,'}=$gi;my$temp=substr($iha{$mkeyH$mnkey},($a[6]-l),($a[7]-$a[6]+l";$a[6]=$a[6]+$mnkey,-$a〔73=$a〖7〗+$mnkey;shift@a;$a=$a[l];$a[l]=$a[2];$a[2]=$a[3];$a〔3〗=$temp=~tr7nN/nN^$a[3]=$a[2]-$a[3];Sha"^!!!!^]^^!^"''"!^''}^"—;^"^''","",@a);^$j++;toreachmy$mkey(keys%ha)■[my($sec,$min,$hour,$day,$month,$year,$dweek,Wyear,$dsave);m9@low=();foreachmySmnkey(sortkeys%{$ha{$mkeyH;){foreach$line(sortkeys%{$ha"C$mkeyH$mnkey}]0■[if($ha{$mkeyH$mnkeyH$lineHgi}<0〗{$liaC"f$"Mne》=''-rNodatabaseentry";}else{push(@low,$ha{$mkey;K$mnkeyH$lineHgi})if(!exists$1iac{$line});"if〔D{formy$g"d(@low){my$taxid=taxfromgi($giid),if($taxid>-l)[my$ch=taxparentsC$taxicO;if(!(index($ch,",28384,")+l)){my@a=split(/,/,substr($ch,l,-l));my$comname=Vcormnon/bin/fastacmd-d/common/data/nt-s$giid-L0,@a=split("",$comname);shift@a;$comname=join("",@a);@a=split(";'',$comname);my@b=split(",",$a);$comname=$b[6]5$liac{$giid}=join("-",$taxid,taxname($taxid),$comname,$ch);}else$liac{$giid]"=-2;32}else{#print"notaxforgi$g"iid\n";$liaC"[$giid;}=''-rNodatabaseentry}else{useBio:-Seq,-useBio::DB::GenBank;my$gb=newBio::DB::GenBank();$seqio=0;$seqio=$gb->get_stream—by_id([@low]);while((my$seql=$seqio->next—segO"■[if($seql->alphabet〇ne'protein'){$line=$seql->pMmary—id〔);my$s(De=$segl->species();my$ch=join(";",Sspe々c"lassificationO);if(!(index(Sch,"artific"iar)+l)){my@a=sp"Mt(";",$seql->descO);my@b=split〖",",$a;);my$comname="[O];rt^$taxid=$spe->ncbi_taxidQ;$1iac{$"Mne}=jo"in("-",Staxid,$spe->common_name〇,Sco图ame);}else{$liac{$line}=-2;for$"hne(@low){if(!(exists$liac{$line})){$liac{$"h'ne}=''-rNodatabaseentry";open(OUT,$Output);my(《sec,$min,$hour!$day,$month,$year!$dweek,$dyear,$dsave)=localtime(time);$eltime=join〖"","Timef',$hour,"f',$min,''",$sec,"Date",$month+l,V",$day,"/",$year+1900,'An";my$ltime=sprintf("%02g:%02g:%02g;%02g/%02g/%4g",($hour,$nvin,$sec,$month+l,$day,$year+1900));printOUT$eltime;p门'ntOUT"(Probename-Experimentname'runversion'taxicTCommonname'Desc"'ption'pathogenmatch'targetmatch'Accensionnumber'ginumGer'化identity'a"gnment"Iength-mismatches-nonNnismatches'gaps'st■start'st.en3'fsstart'fsend'e-value',bitscore-rank-time,■Date)\n";my%subtile=〇;my%tilerslt=〇;foreachmy$mkey(keys%ha)■[foreachmy$mnl<ey(sortkeys%{$ha{$mkey}]0{my%alkey=();my$currank=2000000000000;my$rank=0;rn^$maxrank=0;my$sca1e=1.0;foreach$"Mne(sort■[$ha{$mkeyH$mnkey;K$b;Kscor}<=>$ha{$mkeyH$mnkey;K$aHscor}}keys針ShaUmfceyHSmnkey川{$maxrank=$ha{^mkeyH$mnkey;K$"neHscor};last;foreach$line(sort{$ha{$mkeyH$mnkeyH$bHscor}<=>$ha{$mkeyH$mnkeyH$aHscor}}keys%{$ha{$ml<eyH$mnl<:ey}D{my@a=split("",$ha{$mkeyH$mnkeyH$line}{out});my$outl="$a[l]'$a[2]'$a[3]'$a[5〗la[6]'$a[7]'$a[8]'$a[$#a-1]'$a[$#a]u;my$out2=join("-",@a〗;my@taxinfo=split〖"'",$"ac{$line});my$tilsuo-l;myStarsuc=0;if(exists$liac{$line]"&&$taxinfo>-l)■[my$taxi.n=$taxinfo[3];formy$t3rkey(sort{$"[$pathoH$mkeyH$aHstat}<=>$"[$pathoH$mkeyH$bHstatnkeys33%{${$pathoH$mkey}}){if(index($taxinfo[3],Uarkey)+1)[$ti1suc=${$pathommkey}{$tarkeyHstat};#$taxin=${$pathoH$mkeyH$tarkeyHnamej";last;if(SusetarsuO■(formy$tarkey(keys%{${$target;K$Sinput}]0{■if("index($taxinfo[3],$tarkey〗+l〗{$tarsuc=1if(substr($tarkey,l,-1)>0);last;■if($ha{$mkeyH$mnkey}{$lineHscor}<$currank){$rank++jif($currank*$scale<$ha"[$mkey;K$mnl<eyH$line:Kscor}0{$currank=$currank*$scale;}else{$currank=$ha{$mkeyH$mnkey;K$"lineHscor};}if($rank==1)"[$ranl<++if($ha{$mkey:K$mnkeyH$lineHevaU>$bound);}myiuni=0〗if(exists$alkey{$rank]0{if(existsSalkeyUrankHStaxin};){$alkey{$rankH$taxinHcount}";$alkey{$rankH$taxinHout}=join(",",$alkey{$rank;K$taxinHout},$ha{$mkeyH$mnkeyH$i"ine}{line});]else■[$uni=l;key{$ranl<H$tax,'nHcount}++;$alkey{$rankH$taxinHout}="$taxinfo[l]'$taxinfo[2]—$taxinfo[3]—$ti1sue'$outl-$ha{$mkeyH$mnkey;K$line}{line}'';}}else{$uni=l;$alkey"t$rankH$taxinHcount}++;$alkey{$rankH$taxin}{out}="$taxinfo[l]-$taxinfo[2]-$taxinfo[3]'$ti1sue—$outl'$ha{$mkeyH$mnkeyH$l"ineHl,W;printout"$mkey-$Slnput'pHmary-$taxinfo—$taxinfo[1]'$tax,.nfo[2]-$ti1sue-$tarsuc-$ha{$mkey}($mnkeyH$l"ineHliner$ha{$mkeyH$mnkeyH$"MneHgir$out2'$rank-$uni-$1time\n";卩#subsequencedeterminations$rank=l;if(exists$alkey{$rank}){my$detect="-l";my@clip=0;my$tcomp;formy$key2(keys%{$alkey{$rankH){my@a=split(/7,$alkey{$rank}{$key2}{out});my@b=sp"Mt(/,/,$a[2]〗;if(!exists${$taxexempt;K$b[$#b]}){if(clip){my$i=0jif($#b<=$#clip){if(($detectne"TAXAMBIG")&&($b[$#b]==$clip[$#b])){$detect="TAXUNiQU";}else{while(($i<=$#b&&$i<=$#clip)&&$b[$i]eq$clip[$i]){$i++;}splice(@clip,$i);$detect="TAXAMBiG";}else{if($detectne"taxambig"&&($b[$#clip]==$clip[$#clip])){$detect="TAXUNiQU";@clip=split(/,/,$a[2]);}else{while(($i<=$#b&&$i<=$#clip)&&$b[$,']eq$clip[$i]){$i++;}spliceC@clip,$i;);$detect="TAXAMBlG";}else{@clip=split(/,/,$a[2]);$detect="SEQUNiQU";$detect="TAXUNlQU"if($alkey"[$rankH$key2Hcount]">1);,}$subti1e{$mkeyH$mnkeyHdetect;}=$detect;$subtile《$mkeyH"nkeyKtax}=;join('''',;join('',",Oclip),",";$subt"e{$ml<ei4《"nkeyHout》=|join〖''",'subseq.of$mkey$detect",taxname($c"lip[$#c"Mp]),"St:$mnkey\n");$subti"le{$ml^eyH$mnkeyHout}=jcn'n("'',$subtile{$mkeyH$mnkeyHout},"Rank$rank";my$tempout="";my$tempou2="";formy$key2(keys%{$alkeyrank}})■[my@a=split(/7,$alkey{$rank;K$l<ey2;Kout});$subtile{$mkeyH$mnkeyHname}=$a[l]if(!exists$subtile{$mkeyH$mni<eyHname});$subti1e(SmkeyHSmnkeyHbit}=$a[12]if(!exists$subtile{$mkeyH$mnkeyHbitD;$tempou2="Bases:$a[4]MlS:$a[5]SNP:$a[6]Range:$a[7]-$a[8]E:$a[ll]Bit:$a[12]\n";my$name=$a;my$out="Match:$a[3]Range:$a[9]-$a[10]\n$a[13]"$tempout=join〖"'',$tempout,"$nameNum:$alkey(Srank]^Skey2Hcountl$out\n";)j$subfile{$ml<ey;K$mnkeyHout}=join('''',$subtile{$mkeyH$mnkeyHout},Stempou2,$tempout);$rank=2;Ssubti1e{$mkeyH$mnkeyHout}=]'oin("",$subti1e{$mkeyH$mnkeyHout]","Rank$rank");$tempout="'';formy$key2(keys%{$alkey{$rankH){my@a=split(/7,$a"ll<ey{$ranl<;K$key2;Kout]0;$tempou2="Bases:$a[4]Mis:$a[5]SNP:$a[6]Range:$a[7]-$a[8]E:$a[ll]B"it:$a[12〗\n";my$name=$a;my$out="Match:$a[3]Range:$a[9]-$a[10]\n$a[13]"$tempout=join〖"'',Stetnpout,"$nameNum:$alkey;Srank]^Skey2Hcountl$out\n";);$subtile{$mkeyH$mnl<eyHout}=join('"',$subti1e{$mkeyH$mnkeyHout},$tempou2,$tempout);Formy$mkey(sortkeys%subtile){my$bit=0;my$uskey;$tilerslt"i$mkey;Knum)=scalar(keys(%{$subtile{$mkey}}));formy$mnkey(keys%{$subtile{$mkey}D{if($subtile{$mkeyH$mnkeyHbit}>$bit〗{$bit=$subt"ne{$mkeyH$mnkeyHbit};^uskey-Smnkey;if($tilerslt"[$mkey:Knuni}==l){35$tilerslt{$mkey;Ksub}=$uskey;$t:ilerslt{$mkeyHdetect]"=$subl:ile{$mkeyH$uskeyHdetect};}else{#my$i=0jmy$i=l;formy$mnkey(keys%{$subtile{$ml<ey}30{■if($mnkeyne$uske^0《my$dif=($subt,'"ie{:$mkeyH$mnkeyHbit};)/$bit;if($chf>0.60){$i=0;last;}$t"nerslt{$mkeyHsub]"=$uskey;if($i>0){$tilerslt{$mkeyHdetect3"=$subtile{$mkeyH$uskey:Kdetect};}else{my$j=i;my$us2=$uskey;my@clip=split(/,/,$subfi1e{$mkeyH$uskeyHtax}0;formy$mnkey(keys%{$subti"le{$mkey3"30{if($subtile{$mkeyK$us2Htax}ne$subtile{$mkey;K$mnkeyHtax}){my@b=split〖/V,$subtile{$mkeyH$mnkeyHtax]0;my$i=0;while(($i<=$#b&&$i<=$#c"p)){if($b[$i]ne$clip[$i]){$i=$#b;$]=。;$i++;lastif(!$j);■if($#b>$#c1ip){$us2=$mnkey;@clip=split(7,/,$subtile{$mkey;K$us2Htax}〕;}if($;p{$ti1erslt{$mkeyHdetect}=$subti1e{$mk;eyH$us2Hdetect};$t"i1erslt〖$mkeyHsub}=$us2;}else{$ti1erslt{$rtikey}{detect}=''TAXAMBiG";my@c1ip=sp,"it(/,/,$subti1e{$mkeyH$t"i1erslt,keyHsub)HtaxD;$ti1ers"lt{$mkeyHtaxcom]"-taxnatne($clip[$#clip]);open(OUT2,join("",,$input,".n4rpt"));open〖OUT3,;join(,'",">",$Input,"n4pats"))openCoUT4,joi'n〖n'',">■',$lnput,".n4path""open(0UT5,;joine"'',">",$lnput,"-n4tile"〗)my$tottile=scalar(keys(%tilerslt";my%subpatho=〇;my%maipatho=〇;formy$ml<ey(sortkeys針ilers,t){my$pathogen=$ti1ers,tUmkeyHtaxcom};formy$tarkey(keys%{${$pathoH$mkey}}0{ifCsubstr(Starkey,l,-l)<0){if(${$pathoH$mkeyH$tarkeyHstat}==0){$pathogen=^$pathoH$mkeyH$tarkeyHnameJ;last;}lf(exists$subpatho{$pathogen;Hnum}){$subpatho{$pathogenHnum}=$subpathO"[$pathogenHnum;Kl;$subpatho{$pathogenH"l,st}=]'oin(",",Ssubpatho^pathogenHlist},$mkey);if(index($ti1ersTt{$mkeyHdetect},"sequniqu")+1&&indexf$subpatho{$pathogenHdetect]",''TAXUNO+l〗[$subpathO"[$pathogen]"{detect}="SEQUNiQU'';}elsif(index($tiT"erslt{$mkey}{detect},"TAXUNiQU")+l&&■index〖$subpatho{$pathogenHdetect》,''SEQUNiQU'';)+l){36$subpatho{$pathogenHdetect}=SEQUNIQU";}else{$subpathcK$pathogenHlist}=$mkey;$subpatho《$pathogenHnum]"=l;$subpatho《$pathogenHdetectj"=$tilerslt{$ml<eyHdetect}";printOUT5"$Slnput、、$tottile、$mkey-$tilerslt{$mkeyHnum;r$tilerslt"C$mkeyHtaxcom;K$tile「slt{$mkeyHdetect}\n";close(ou丁5);$tottile=scalar(keys(%subpatho";my%maizzz=0;formy$pathogen(sortkeys%sub^atho){printOUT4"$Sinput、、$totti"1e'$pathogen、$subpathO"C$pathogenHnum]"、$subpaithO"[$pathogenHdemy$mkey;if((my$l=index($subpatho{$pathogenHl"ist]",'V'"+l){$mkey=substr($subpathO"[$paithogenHlist:},0,$i;);]■else■[$mkey"subpatho{$pathogenHl,st};my$pathotax;mySpathogemformy$tarkey(sort"C$T$p${$patho}($mkeyH$aHstatJ}$pathotax=$tarkey;Spathogem-S"[SpatFioHSmkeyHStarkeyHname);last;if(substr($pathotax,l,-1)>0){if("index(SsubtileWmkeyHStilersltUmkey:Hsub]"Htax]",Spathotax:)+1){my@a=sp1it('V',$subtile{$mkeyH$tilerslt{$mkeyHsub}Htax});myfor($j=l;$j<=$#a;{lastif($a[$j]==substr(Spathotax,1,-i));}my$"Hst=$a[$j];for(my$i=$j+l;$i<=$#a;$i++){$1ist=join(",,,,$list,$a[$i]);},(exists$maipatho{$pathogemHnum}){$maipatho{$pathogemHnum]"=$maipathO"[$pathogemHnum3"+l;if(existsSmaipathoUpathogemHIHWWist}){$maipatho{$pathogemHlH$;JH$l"ist}=;join('',,',$maipatho{$pathogemH1H$jHlist]",joW:",$pathogen,$su£)pai:hO"[$patiiogenHnum}";}else{$maipatho{$pathogemHlH$]'H$list}=;join('});}else{$maipatho{$pathogemHnum}=l;$maipathoWpathogemHlH$]'isthjoin('});}else{if(exists$maizzz"[num3")■($maizzz{num}=$maizzz"(mjm}+l;',$pathogen,$subpatho"[$pathogenHnum',$pathogen,$subpatho{$pathogenHnum,$pathogen,SsubpathoWpathogenHn$maizzz{list}=join(''''',$maizzz{list]",Join('um}));}else{$maizzz"[num}=l;.$maizzz"Hist}=;join("",Spathogen,Ssubpatho(SpathogenHn园30,■close(OUT4);>tmboypk{oshy,rdk$totti1e=scalar(keys(%maipatho));formy$pathogen(sortkeys%maipathcO■[my$,ow;my@clip=0;formy$mkey(sort{Sb<=>$a}keys%{$maipatho{$pathogenHl}30{formy$mnkey(keys%{$maipatho{$pathogen}{lH$mkey}}5{if(但clip){my@b=sp"t(",",$mnkey);my$i=0iwhile(($i<=$#b&&$i<=$#clip)&&$b[$i]eq$c"p[$i]){$i++;}splice(@c"Mp,$"0;}else{@clip=split(",",$mnkey);卩if($#clip==0){pHntOUT3"$Slnput、-$tottile-$pathogen$maipatho{$pathogenHnum}'';}else{$low=taxname($clip[$#cl,'p]);printOU丁3"$Slnput--$tottile-$low'$maipatho{$pathogenHnum;T';formy$mkey(sortkeys%{$maipatho{$pathogen;K"1川{printOUT3"'$mkey;'';formy$mnkey(keys%{$maipatho{$pathogenH"lHSmkey川{$low=]'oin("",$low,",",$maipatho{$pathogenHlH$mkeyH$mnkey30printOUT3substr($low,1);printOUT3"\n";if(exists$maizzz{num})[printOUT3"$Sinput--$totti1e-隨-target-$tnaizzz{num}--l;$maizzz{list}\n";close(OUT3);printOUT2"$Sinput\n";pHntOUT2"\nControls\n";my$detect="PASS";my$val="AFFX-TAGlQ-EX";my$pva,=''AFFY";if(existsSfrcl"istr'AFFX-TAGiQ-EX":0{$val="AFFX-TAGIQ-EX"}elsif(exists$frclist{"AFFX-TaglQ-EX"}){$val="AFFX-TagiQ-EX";if(exists$frclist{$val}〕{$detect="FAiL"if($frclist{$valHper}<20);printOUT2"$detect$frclist{$val}{per}\%affy$frclist{$val}{mat}basescalledof$frclist{$vai;Klen}withSfrclistUvalHmis}misidentif"ied\n";}else{print"didn'tfind$val\n";$detect="PASS";my$tilsuc=l;$va"l="ATTiM";$pval=$val;if(exists$frclist{$val"{if($frclist{$valHper}<20;){$detect="FAiL";$ti1suc=-2;}printOUT2"$detect$frclist{$val}{per}\%$pval$frclist{$vai;Hmat;}basescalledof$frc"Mst{$valHlen}with$frclist{$vai;Kmis}misidentified\n";printOUT"$valJSlnput'primary'3702'Controll'Arabidopsisthaliana-$ti1sue-0'AY087893'21406667'$frclist{$val}{per}'499、(T(T1'499'426、924-'Tl-SltimeW;}else{print"didn'tfind$val\n";$detect="PASS";$tilsuc=l;$val="ATNACl";$pval=$val;if(exists$frclist{$valD{if(S什clist{$valHper}<20){$detect="FAiL";$ti1suc=-2;};printOUT2"$detect$frcl"ist{$valHper}\%$pval$frc"Mst{$valHmat}basescalledof$frclist{$vai;Klen}with$frclist{$val}{mis}misidentified\n";printOUT"^valJSl叩ut'primary'3702'Control2'Arabidopsisthaiiana'$ti1sue'0'AC009894、5902358'$frclist{$val}{per}'519-CT0l'519'82488'83006'-'IT$ltime\n";}else{print"didrTtfind$pval\n',;formySpathogen(sortkeys%subpatho)■[p门'ntOUT2$su6patho{$pathogen;Kdetect}$pathogenin$subpatho{$pathogenHnum}\n',;my@a=split(",",$subpatho{$pathogenHl"ist});formy$mkey(sort@a){printOUT2"ProSeq$mkey$tilerslt{$mkey}{detect}from$ti1erslt{$mkeyHnum}subseq.\n";fo「myS图key(sortkeys%{$subtile{$mkey}}){my@b=sp"Ht('、n",$subtile"f$mkey}{$mnkeyHout});my@c-split(",',$b[l]);printOUT2"$b$c[2]$c[3]$c[4]$c[7]\n";printOUT2"DETAlLS\rT;formy$pathogen(sortkeys%subpatho)■[printOUT2,'Kn$subpatho{$pathogen}{detect}$pathogenin$subpatho■[$patho9enHnum}乂n',,my@a=split(',,,$subpatho{ipathogen}{list});for*my$mkey〖sort@a)■[printOUT2"ProSeq$mkey$tilerslt{$mkeyHdetect}from$tiWsltWmkeyHnLm]}subseq.\nM;formySmnkey(sortkeys%{$subtile{$mkeyn)■[printOUT2$subtile{$ml<ey}{$mnkeyHout};close(OUT);close(OUT23;subopenconnectionmy($gi)-@一;my$username='ncbi';my$password=,ncbi';—$database='bio,;my$connect="dbi:Oracle:$database";—$sqlldrconnection=',$usemame/$f)assword\@$clatabase";myidbh=DBi->connect($connect,$username,$password,RaiseError=>1,AutoCommit=>0IIdie"Databaseconnectionnotmade:$dbi::errstr";return$dbhjsubclosecormection$dbfv>disconnect;returnjsubtaxfromgimyC$g"=@—;my$sth|$taxid=-l;my$sql="selecttax—idfromgi—taxid—nuclwheregi=$gi";$sth=$dbh->preparel$sql);$sth->executeO,'$sth->bind—columns(undef,\$taxid);$sth->fetch();my$out=$taxid;$sth->finish〇;returnC$out);subtaxname{myC$tax"id)=@—;my〖$sth,$conO;my《sql=''selectname_txtfromTaxonomy—nameswheretax—"id=$taxidandname—class='scientificname'";$sth=$dbh->prepare($sql);$sth->executeO;$sth->bind—columns(undef,\$com);$sth->fetchO;$sth->finish(3;return($cortO;subtaxparentsmyC$parenticO=@—jmy《sth;my$sql="";my$tax;my$ch2=join("",",",$parentid!",");$sql="selecttax_idastax_idfromnodesstartwithtax—icMparentidconnectbynocycletax_id=priorparent_tax—id";$sth=$dbh->prepare($sql);$sth->execute〇;$sth->bind—columns(undef,\$tax),■Ssth-^fetchO;while($sth->fetch()){$ch2=join("",",",$tax,$ch2);$sth->finish();return($ch2;);显而易见,在上述教导下可以对本发明进行许多修饰和改变。因此,可以理解所请求保护的发明可以以不同于具体描述的方式进行实施。以单数对权利要求成分进行的引用例如使用冠词"a,""an,""the,"或"所述"不被认为将该成分限制为单数。参考文献1.Whelen,A.C.andPersing,D.H.(1996)核酸扩增和检测在临床微生物实验室中的作用(Theroleofnucleicacidamplificationanddetectionintheclinicalmicrobiologylaboratory).j朋w7evM〖craWo/,50,349-373.2.McDo讓gh,E.A.,Ba麵o,C.P.,Russell,K丄.andMetzgar,D.(2005)用于在临床样品中检测肺炎支原体、肺炎衣原体、嗜肺性军团病杆菌以及和百日咳博代氏杆菌的多重PCR(AmultiplexPCRfordetectionofMycoplasmapneumoniae,Chlamydophilapneumoniae,Legionellapneumophila,andBordetellapertussisinclinicalspecimens).Mo/Ce〃尸ra6as,19,314-322.3.Roth,S.B.,Jalava,J.,Ruuskanen,O.,Ruohola,A.andNikkari,S.(2004)寡聚核芬酸诊断用于对引起急性上呼吸道感染细菌进行实验室诊断的40应用(Useofanoligonucleotidearrayforlaboratorydiagnosisofbacteriaresponsibleforacuteupperrespiratoryinfections)./C7/"Mz'cro^/o/,42,4268-4274.4.Gardner,S.N.,Kuczmarski,T.A.,Vitalis,E.A.andSlezak,T.R.(2003)TaqManPCR检测由肝炎A、B、C和E病毒以及HIV所表示的分支病毒病原体的限制(LimitationsofTaqManPCRfordetectingdivergentviralpathogensillustratedbyhepatitisA,B,C,andEvirusesandhumanimmunodeficiencyvirus).7C//wM/c油W,41,2417-2427.5.Ecker,D丄,Sampath,R.,Blyn,L.B.,Eshoo,M.W.,Ivy,C.,Ecker,J.A.,Libby,B,Samant,V.,Sannes-Lowery,K.A.,Melton,R.E.da/.(2005)对呼吸病原体进行快速鉴定和抹分型以进行流行病监控(Rapididentificationandstrain-typingofrespiratorypathogensforepidemicsurveillance).尸rociVfl^/」c<3<it/W,102,8012-8017,6.Zammatteo,N.,Hamels,S.,DeLongueville,F.,Alexandre,I.,Gala,J丄.,Brasseur,F.andRemacle,J.(2002)分子生物学和诊断的新型芯片(Newchipsformolecularbiologyanddiagnostics).万/ofec/2w0/Jwwwiev,8,85-101.7.Campbell,C丄andGhazal,P.(2004)感染诊断的分子签名微阵列结束的应用(Molecularsignaturesfordiagnosisofinfection:applicationofmicroarraytechnology).Mz'cra6/。/,96,18-23.8.Briese,T.,Palacios,G.,Kokoris,M.,Jabado,O.,Liu,Z.,Re證ick,N.,Kapoor,V.,Casas,I"Pozo,F.,Limberger,R.aa/.(2005)病原体快速和差别检马t的it断系统(Diagnosticsystemforrapidandsensitivedifferentialdetectionofpathogens).五附ergD/s,11,310-313.9.Hacia,J.G.(1999)使用寡聚核苷酸微阵列的再测序和突变分析(Resequencingandmutationalanalysisusingoligonucleotidemicroarrays).iVafC7匿/,21,42-47.10.Kozal,M丄,Shah,N.,Shen,N.,Yang,R.,Fucini,R.,Merigan,T.C.,Richman,D.D"Morris,D.,Hubbell,E.,Chee,M.a(1996)使用高密度寡聚核苷酸阵列,在HIV-1进化枝B蛋白质酶基因中所观察到的大范围多态性(ExtensivepolymorphismsobservedinHIV-1cladeBproteasegeneusinghigh-densityoligonucleotidearrays).jV"/她《2,753-759.11.Cutler,D丄,Zwick,M.E.,Carrasquillo,M.M.,Yohn,C.T.,Tobin,K.P.,Kashuk,C.,Mathews,D丄,Shah,N.A.,Eichler,E.E.,Warrington,J.A.Wa/.(2001)使用微阵列的高通量变化检测和基因分型(High-throughputvariationdetectionandgenotypingusingmicroarrays).(7ew簡eies,11,1913-1925.12.Gingeras,T.R.,Ghandour,G.,Wang,E.,Berno,A.,Small,P.M.,Drobniewski,F.,Alland,D.,Desmond,E.,Holodniy,M.andDrenkow,J.(1998)使用分枝杆菌属DNA阵列的杂交区识别分析同时进行基因分型和物种鉴定(SimultaneousgenotypingandspeciesidentificationusinghybridizationpatternrecognitionanalysisofgenericMycobacteriumDNAarrays).Gewo膨ies,8,435-448.13.Lin,B.,Vahey,M.T.,Thach,D,,Stenger,D.A.andPancrazio,JJ.(2003)通过基因表达图谱进行生物威胁检测(Biologicalthreatdetectionviahostgeneexpressionprofiling).C7z'"CAem,49,1045-1049.14.Wilson,W丄,Strout,C丄.,DeSantis,T.Z.,Stilwell,J.L.,Carrano,A.V.andAndersen,G丄.(2002)使用微阵列技术对18中病原体微生物进行序列特异性的鉴定(Sequence-specificidentificationof18pathogenicmicroorganismsusingmicroarraytechnology).Mo/Ce〃/Vo6as,16,119-127.15.Wilson,K.H.,Wilson,W丄,Radosevich,丄L.,DeSantis,T.Z.,Viswanathan,V.S.,Kuczmarski,T.A.andAndersen,G丄.(2002)小亚基核糖体DNA探针的高密度微阵歹'J(High-densitymicroarrayofsmall-subunitribosomalDNAprobes).五謂'ra"M/cra6/o/,68,2535-2541.16.Zwick,M.E.,McAfee,F.,Cutler,D丄,Read,T.D.,Ravel,J"Bowman,G.R.,Galloway,D.R.andMateczun,A.(2005)基于微阵列的多种炭疽芽孢杆菌分离物的再观'J序(Microarray-basedresequencingofmultipleBacillusanthracisisolates).Gewome历o/,6,R10.17.Wong,C.W.,Albert,T丄,Vega,V.B.,Norton,J.E.,Cutler,D丄,Richmond,T.A"Stanton,L.W.,Liu,E.T.andMiller,L.D.(2004)使用高通量高42密度再测序阵列跟踪SARS冠状病毒的进化(TrackingtheevolutionoftheSARScoronavimsusinghigh-throughput,high-densityresequencingarrays).G飾me14,398-405.18.Sulaiman,I.M.,Liu,X.,Frace,M.,Sulaiman,N.,Olsen-Rasmussen,M.,Neuhaus,E.,Rota,P.A.andWohlhueter,R.M.(2006)Affymetrix严重急性呼吸综合征再测序基因芯片在鉴定两抹感染人的冠状病毒的评估(EvaluationofsevereacuterespiratorysyndromeresequencingGeneChipsincharacterizationofthegenomesoftwostrainsofcoronavimsinfectinghumans).五謂VowM/c油'o/,72,207-211.19.Wang,Z.,Daum,L.T.,Vora,G丄,Metzgar,D.,Walter,E.A.,Canas,L.C.,Malanoski,A.P.,Lin,B.andStenger,D.A.(2006)使用再测序微阵列鉴定;危感病毒(IdentifyingInfluenzaViruseswithResequencingMicroarrays).12,638-646.20.Lin,B.,Wang,Z.,Vora,G丄,Thornton,J.A.,Sch離,J,M.,Thach,D.C.,Blaney,K.M.,Ligler,A.G.,Malanoski,A.P.,Santiago,J."(2006)Y吏用再测序DNA微阵列进行宽谱呼吸道病原体鉴定(Broad-spectrumrespiratorytractpathogenidentificationusingresequencingDNAmicroarrays).(7ew蘭eWay.16:527-53521.Lin,B.,Blaney,K.M.,Malanoski,A.P.,Ligler,A.G.,Sch匿,J.M.,Metzgar,D"Russell,K.L.andStenger,D.A.(2006).海军研究实验室(NavalResearchLaboratory).22.Altschul,S.F.,Gish,W.,Miller,W.,Myers,E旦andLipman,D丄(1990)基本局部比对搜索工具(Basiclocalalignmentsearchtool).7Mo/祝o/,215,403-410.23.Davignon,L.,Walter,E.A.,Mueller,K.M.,Barrozo,C.P.,Stenger,D.A.andLin,B.(2005)再测序核苷S臾序列用于鉴定化脓性链球菌和相关的抗生素抗性决定子的应用(UseofresequencingoligonucleotidemicroarraysforidentificationofStreptococcuspyogenesandassociatedantibioticresistancedeterminants).JClinMicrobiol,43,5690-5695.权利要求1.一种方法,该方法包括在查询中,将多个参照序列提交到分类数据库中以产生多个分类结果;其中,所述参照序列是遗传数据库查询的输出,所述遗传数据库查询返回每个参照序列的评分;以及基于所述分类结果报告分类鉴定。2.根据权利要求1所述的方法,其中,报告所述分类鉴定使用下列基于标准的步骤之一,步骤的选择是第一步骤,其中所述标准被满足当分类结果仅含有单一类別时,则报告该单一类别;当最高评分与具有第二最高评分的参照序列的评分相比超过了预定的评分比例阀值时,则报告在多个参照序列中具有最高评分的参照序列的分类结果;当所有的分类结果仅含有子代类别和所述子代类别的直接亲代类别时,则报告所述子代类别;以及在其他情况中,报告共同的亲代类别。3.根据权利要求2所述的方法,其中,所述评分比例阔值为约30%。4.一种方法,该方法包括使用多个不同的参照序列两次或更多次进行权利要求1的方法以产生多个分类鉴定;其中,对遗传数据库查询的输入是子序列,该子序列与来自目标病原体的预定原型序列相关;以及将相同的分类鉴定与相应的原型序列组合在一起。5.根据权利要求4所述的方法,该方法还包括对于相应于所述目标病原体原型序列之一的分类鉴定之一与所述目标病原体相同,或者是目标病原体的子代,报告每个所述目标病原体作为阳性结果。6.根据权利要求5所述的方法,该方法还包括报告最终的分类鉴定,其中当阳性结果仅含有单一类别,则所述最终的分类鉴定是该单一类别;当所有的阳性结果仅含有子代类别和所述子代类别的直接亲代类别时,则所述最终的分类鉴定是该子代类别;或在其他所有的情况中,所述最终的分类鉴定是共同的亲代类别。7.根据权利要求l所述的方法,其中,所述方法是计算机执行的。8.—种设备,该设备包括执行权利要求7所述方法的装置。9.一种处理从4企-险获得的生物序列的方法,该方法包括将位于生物序列中预定位置列表中的石威基响应转化成N;其中,在预定的位置列表中的每个条目表示物质杂交到用于产生生物序列的微阵列上的能力;其中,所述物质不是目标病原体的核酸;以及确定所述生物序列中相对于参照序列的单核苷酸多态性的比例。10.根据权利要求9所述的方法,其中,所述物质是PCR引物。11.根据权利要求9所述的方法,该方法还包括当所述单核苦酸多态性的比例低于SNP阈值时,从所述生物序列中选择起始长度的可能子序列;以及计算在所述可能的子序列中独特磁基的比例。12.根据权利要求11所述的方法,其中,所述SNP阈值是大约20%。13.根据权利要求11所述的方法,该方法还包括当所述独特碱基的比例高于独特碱基阈值时,将所述可能的子序列延长一个碱基;再次计算在所延长的可能子序列中独特碱基的比例;重复延长和再次计算,直到独特碱基的比例低于所述独特碱基阈值;从所延长的可能子序列中去除拖尾的N碱基响应,以形成查询子序列;以及计算在所述查询子序列中独特碱基的比例。14.根据权利要求13所述的方法,其中,所述独特碱基阈值是大约40%。15.根据权利要求13所述的方法,其中,当所延长的可能子序列的最后21个位置具有低于4个独特碱基响应时,则停止重复所述延长和再次计算。16.根据权利要求13所述的方法,该方法还包括当所述查询子序列的长度和所述查询子序列中独特碱基的比例满足预定的要求时,则在查询中将所述查询子序列提交到遗传数据库以鉴定所述生物序列。17.根据权利要求16所述的方法,其中,所述要求包括该查询子序列含有至少7个连续的独特义威基响应;以及所述查询子序列的长度超过100个碱基,所述查询子序列的长度是30至100个碱基并且所述查询子序列内独特碱基的比例是至少大约(((查询子序列的长度-30)*0.2857+70)%,或者所述查询子序列的长度低于30个碱基并且所述查询子序列内独特碱基的比例是至少大约95%。18.根据权利要求9所述的方法,其中,所述方法是计算机执行的。19.一种设备,该设备包括执行权利要求18所述的方法的装置。全文摘要一种方法,该方法包括向分类数据库提交参照序列以产生分类结果;以及基于分类结果报告分类鉴定。所述参照序列是遗传数据库查询的输出,其返回每个参照序列的评分。一种用于处理从检验获得的生物序列的方法,其通过将位于所述生物序列中预定的位置列表中的碱基响应转化成N;以及确定所述生物序列中相对于参照序列的单核苷酸多态性比例。所述预定的位置列表中的每个查询表示物质杂交到用于产生生物序列的微阵列上的能力。所述物质不是目标病原体的核酸。文档编号C12Q1/68GK101495652SQ200680029330公开日2009年7月29日申请日期2006年6月9日优先权日2005年6月16日发明者乔尔·M.·施努尔,大卫·A.·斯滕格,安东尼·P.·马拉诺斯基,林宝川申请人:海军部长代表的美国政府
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1