欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

合成基因設(shè)計(jì)的計(jì)算方法

文檔序號(hào):6478637閱讀:797來源:國(guó)知局

專利名稱::合成基因設(shè)計(jì)的計(jì)算方法
技術(shù)領(lǐng)域
:本發(fā)明涉及用于諸如植物等異源生物體中表達(dá)的合成基因的設(shè)計(jì)方法,包括計(jì)算機(jī)實(shí)現(xiàn)的方法,也包括用于執(zhí)行本發(fā)明方法的計(jì)算機(jī)系統(tǒng)。
背景技術(shù)
:如植物細(xì)胞的異源宿主中的外源基因表達(dá)已很難,并經(jīng)常無法獲得產(chǎn)品的可檢測(cè)的表達(dá)(Fischhoff等(1987)生物/技術(shù)5:807_813;Vaeck等(1987)自然328:33_37)。對(duì)貧乏表達(dá)的解釋包括加工位點(diǎn)的偶然存在,導(dǎo)致在轉(zhuǎn)基因宿主細(xì)胞中非功能mRNA轉(zhuǎn)錄物;相較于原始宿主在植物中不同的密碼子使用;以及在基因序列的GC含量和由此產(chǎn)生的初級(jí)RNA轉(zhuǎn)錄物中的不同。沿著雙螺旋結(jié)構(gòu)的雙堿基組成DNA結(jié)構(gòu)。眾所周知,不同生物體的總DNA具有四種核苷酸腺嘌呤(A)、胸苷(T)、鳥苷(G)以及胞苷(C)的不同分布。在DNA螺旋結(jié)構(gòu)中,腺嘌呤和胸苷通過氫鍵結(jié)合形成一個(gè)“堿基對(duì)”(“AT堿基對(duì)”)。同樣,鳥苷僅和胞苷形成堿基對(duì)(“GC堿基對(duì)”)。這種AT堿基對(duì)與GC堿基對(duì)的比例通常被稱為“GC含量”,其為由GC堿基對(duì)(相對(duì)于AT堿基對(duì))構(gòu)成的總堿基對(duì)的百分比。同樣,“AT含量”是指AT堿基對(duì)構(gòu)成的堿基對(duì)的百分比。GC含量不僅在不同生物體中不同,而且在基因組的DNA不同區(qū)域中不同,甚至在例如植物基因的一個(gè)基因的不同區(qū)域中不同。植物內(nèi)含子有大約70%AT(30%GC)含量,而外顯子有大約50%AT(50%GC)含量(Wiebauer等(1988)Mol.CellBiol.8:2042_2051)。由于在植物中表達(dá)蘇云金芽孢桿菌(Bt)殺蟲劑蛋白的困難性,各種在轉(zhuǎn)錄植物中較高水平表達(dá)的合成基因已被設(shè)計(jì)。Adang等(美國(guó)專利號(hào)5380831,6015891)描述了設(shè)計(jì)合成Bt殺蟲蛋白以在植物中具有增強(qiáng)的表達(dá),通過修飾基因以包含高水平表達(dá)的植物基因優(yōu)選的密碼子進(jìn)行所述設(shè)計(jì)。根據(jù)在被高水平表達(dá)的植物基因中所用的密碼子使用分布頻率來選擇密碼子使用。Adang等(美國(guó)專利號(hào)5567600)進(jìn)一步描述了類似的方法,其中修飾包括減少在植物多腺苷酸化信號(hào)之間區(qū)域中的密碼子位置II和III中具有GC的密碼子數(shù)量。備選地,修飾可導(dǎo)致較少地發(fā)生序列AATGAA(SEQIDNO:1)。Fischhoff等(美國(guó)專利號(hào)5500365)揭示了修飾的Bt基因,其移除了植物多腺苷酸化序列以及ATTTA(SEQIDNO2)序列。Koziel等(美國(guó)專利號(hào)6320100)揭示了為在植物中優(yōu)化表達(dá)而選擇的合成Bt殺蟲蛋白,其使用的密碼子在玉米中最頻繁地編碼每一氨基酸,并具有60%的GC含量。發(fā)明概述提供了產(chǎn)生編碼感興趣的多肽的合成核苷酸序列的方法。這些方法如下產(chǎn)生優(yōu)化的合成基因序列計(jì)算在DNA序列數(shù)據(jù)庫(kù)中的連續(xù)短核苷酸區(qū)段的發(fā)生概率,并且然后使用這些概率通過用高概率序列代替在候選轉(zhuǎn)基因中的低概率核苷酸序列來產(chǎn)生合成序列。這優(yōu)選不改變編碼蛋白質(zhì)的氨基酸序列來完成。重要地是,此統(tǒng)計(jì)方法能夠產(chǎn)生轉(zhuǎn)基因,其經(jīng)優(yōu)化在目標(biāo)生物體表達(dá)而不需要在目標(biāo)生物體中的加工位點(diǎn)或其他表達(dá)決定因素的特定知識(shí)。這些方法包括⑴序列數(shù)據(jù)庫(kù)的開發(fā);(2)選擇一連續(xù)核苷酸長(zhǎng)度(“N長(zhǎng)度”)作為優(yōu)化(“N長(zhǎng)度寡核苷酸”)的基礎(chǔ);(3)組織序列數(shù)據(jù)庫(kù)作為N長(zhǎng)度寡聚物序列集合;(4)選擇一輸入序列;(5)為輸入序列開發(fā)沉默NLSs(“SNLS”)集合;以及(6)在SNLS的選擇中優(yōu)化以生成一被優(yōu)化的基因序列。這些方法可以備選地或另外包括移除不期望的可讀框,和/或修飾感興趣的核苷酸序列以移除不期望的短的共有核苷酸序列,和/或所得優(yōu)化基因獲得期望的GC含量,而不考慮密碼子使用。本發(fā)明的方法可用于產(chǎn)生在生物體、特別是植物和細(xì)菌中理想表達(dá)的核苷酸序列以提供殺蟲或除草劑耐抗性活性。這些生物體被期望用于農(nóng)業(yè)目的。本發(fā)明的方法可用于產(chǎn)生具有殺蟲或除草劑抗性活性的改變的或改進(jìn)的蛋白質(zhì),或者用于檢測(cè)在產(chǎn)品或生物體中殺蟲或除草劑抗性蛋白質(zhì)或氨基酸的存在。圖1所示為NLRs,NLS以及delta表之間關(guān)系的圖示。此圖中的A,B,C,D以及E代表了在長(zhǎng)度為5(N=5)的核苷酸區(qū)域中的假定位置。此圖示出可為該NLR生成的NLSs的子集。因此,對(duì)于所有長(zhǎng)度為5的NLRs,有4’個(gè)可能的NLSs(在位置A處為A,T,G,或C;在位置B處為A,T,G,或C;等等)。圖2所示為NLSs的確定的圖例。發(fā)明詳述合成基因設(shè)計(jì)的先前方法通常分為兩類。第一類使用諸如多聚腺苷酸化信號(hào)的加工信號(hào)的特定知識(shí)來設(shè)計(jì)在目標(biāo)生物體具有更高表達(dá)概率的轉(zhuǎn)基因(例如FischhofT等)。此策略僅被應(yīng)用于這種加工信號(hào)的特定實(shí)驗(yàn)性知識(shí)是可用的情況下。另外,被表達(dá)基因的加工決定因素的不完整的知識(shí)會(huì)導(dǎo)致轉(zhuǎn)基因的不當(dāng)修飾,導(dǎo)致目標(biāo)生物體中較少或沒有表達(dá)。第二類方法完全依賴于密碼子偏倚和/或GC含量修正以改進(jìn)轉(zhuǎn)基因表達(dá)(例如Koziel等,Adang等),而不管高級(jí)DNA序列決定因素(如ATTTA,AATGAA)的重要作用的充分證據(jù)。本發(fā)明描述了設(shè)計(jì)編碼感興趣的多肽的合成核苷酸序列的方法。所述方法包括(1)組織一序列數(shù)據(jù)庫(kù)作為N長(zhǎng)度寡聚物序列集(“NLSs”)的集合;(2)通過確定和編譯所有可能NLSs群體間的每一NLS的被觀察到的概率生成一NLS統(tǒng)計(jì)表;(3)為感興趣的序列產(chǎn)生NLRs集合;(4)確定沒有破壞可讀框的NLSs(“沉默NLSs”,或者“SNLS”)的集合;以及(5)優(yōu)化在SLNS集合之間的選擇以生成被優(yōu)化的核苷酸序列。在本發(fā)明的另一方面,分析和調(diào)整感興趣的核苷酸序列以移除下面兩者或其中之一(1)非期望的可讀框或者(2)非期望的短DNA元件?!胺瞧谕?RF”是不同于親本序列且通過用本發(fā)明的方法修飾序列而來的0RF。“非期望的短DNA元件”包括引入目標(biāo)生物體非理想表達(dá)結(jié)構(gòu)的DNA序列。短DNA元件的示例在本文別處討論。這些方法可用于優(yōu)化任何生物體、特別是植物中的異源基因的表達(dá)。此方法生成合成基因,其組成與目標(biāo)數(shù)據(jù)庫(kù)的相似。這些合成基因可被用于,例如在生物體、尤其是在植物或植物細(xì)胞中調(diào)節(jié)殺蟲活性或除草劑抗性。定義為了清楚地理解本發(fā)明,給出如下定義“合成”的意思是不在自然界發(fā)生。為了本發(fā)明的目的,合成序列不意在包含通過自然發(fā)生突變而生成或通過化學(xué)或生物機(jī)制如位點(diǎn)定向誘變誘導(dǎo)的突變而來的序列。在一些實(shí)施方案中,合成核苷酸序列是或是指在它整個(gè)或絕大部分編碼區(qū)域被化學(xué)地合成?;瘜W(xué)合成核苷酸序列的方法在本領(lǐng)域中已知(參見,例如Ausubel等,編著。分子生物中的現(xiàn)代協(xié)議(2000)第8.2B章節(jié),卷1,JohnWiley&Sons,紐約;Xiong等(2004)氨基酸研究,32:e98;Ovchinnikov等(1984)基因31:65_78;Khudyakov等(1993)氨基酸研究,212747-2754)。合成序列包括核苷酸序列,其在至少大約1%,至少大約5%,至少大約10%,至少大約15%,至少大約20%,至少大約25%,至少大約30%,至少大約35%,至少大約40%,至少大約45%,至少大約50%,至少大約55%,至少大約60%,至少大約65%,至少大約70%,至少大約75%,至少大約80%,至少大約85%,至少大約90%,至少大約95%,或至少大約100%的相對(duì)于親本序列的核苷酸位置與天然發(fā)生的親本序列不相同。要認(rèn)識(shí)到核苷酸序列可以在序列一定區(qū)域內(nèi)被優(yōu)化,其序列剩余部分相對(duì)于親本序列保持不變。為了本發(fā)明的目的,術(shù)語“合成的核苷酸序列”以及“優(yōu)化的核苷酸序列”可互換使用?!癗長(zhǎng)度區(qū)域”,或“NLR”表示對(duì)應(yīng)于感興趣的核苷酸序列的一個(gè)區(qū)域的長(zhǎng)度為N的連續(xù)核苷酸序列。例如,一個(gè)NLR可以是從大約1到大約100的核苷酸長(zhǎng)度,或者是從大約2到大約50,或從大約3到大約40,或從大約4到大約30,或從大約5到大約20,或從大約6到大約15,或者大約10的核苷酸長(zhǎng)度。在一些實(shí)施方案中,NLR在長(zhǎng)度上大于或小于3個(gè)核苷酸?!癗長(zhǎng)度序列”或者“NLS”表示任何N長(zhǎng)度的連續(xù)核苷酸序列。對(duì)于任何給定的優(yōu)化運(yùn)行,每一NLS的長(zhǎng)度等于每一NLR的長(zhǎng)度。如圖1所示。在此例中,感興趣的核苷酸序列被12個(gè)核苷酸代表,并且每一NLR長(zhǎng)度為5個(gè)核苷酸。因此,每一NLR的每一NLS也是5個(gè)核苷酸長(zhǎng)度??梢岳斫膺@里描述的方法能夠被用于從單個(gè)感興趣的核苷酸序列生成單個(gè)優(yōu)化的序列,以及從單個(gè)感興趣的核苷酸序列生成多個(gè)不同的優(yōu)化序列。產(chǎn)生多個(gè)不同被優(yōu)化的序列時(shí),在每一個(gè)優(yōu)化運(yùn)行中一個(gè)或多個(gè)優(yōu)化參數(shù)被改變以使不同被優(yōu)化的序列從運(yùn)行中產(chǎn)生。一個(gè)這樣可被改變的參數(shù)就是NLS和NLR中“N”所代表的值。這里揭示的方法的步驟在隨后的模塊中進(jìn)行闡述。模塊Α,開發(fā)目標(biāo)數(shù)據(jù)庫(kù)本發(fā)明的方法需要一個(gè)核苷酸序列目標(biāo)數(shù)據(jù)庫(kù)?!澳繕?biāo)數(shù)據(jù)庫(kù)”可為一個(gè)或多個(gè)核苷酸序列的任何數(shù)據(jù)庫(kù),例如GENBΑΝΚ核苷酸數(shù)據(jù)庫(kù),某一屬或種特定的序列數(shù)據(jù)庫(kù)(如玉米特定的數(shù)據(jù)庫(kù),黃豆特定的數(shù)據(jù)庫(kù),動(dòng)物特定的數(shù)據(jù)如人,實(shí)驗(yàn),或農(nóng)業(yè)動(dòng)物特定的數(shù)據(jù)庫(kù)等),或者特定用戶相關(guān)的傳統(tǒng)核苷酸序列數(shù)據(jù)庫(kù)。在一個(gè)實(shí)施方式中,目標(biāo)數(shù)據(jù)庫(kù)包括所感興趣的有機(jī)體的編碼序列的集合。序列數(shù)據(jù)庫(kù)可被組織為任何形式或文件類型,例如以FASTA格式文件的文件形式,或者以計(jì)算機(jī)可讀形式的序列文件的文件夾形式。模塊B,組織作為N長(zhǎng)度寡聚物序列集的數(shù)據(jù)庫(kù)在本發(fā)明的此方面,以NLS統(tǒng)計(jì)表(或者“NLSStatsTable")的形式從目標(biāo)數(shù)據(jù)庫(kù)中組織數(shù)據(jù)。通過設(shè)置“N”長(zhǎng)以及確定數(shù)據(jù)庫(kù)中代表每一可能N長(zhǎng)度片段的頻率生成NLS統(tǒng)計(jì)表。N的值可基于目標(biāo)數(shù)據(jù)庫(kù)的容量(即所有在該數(shù)據(jù)庫(kù)中的序列)任意選擇。通常地,長(zhǎng)些的NLR序列比短些的NLR序列捕獲更多的信息,但NLS統(tǒng)計(jì)表?xiàng)l目數(shù)目被序列長(zhǎng)度控制,并且過長(zhǎng)的表會(huì)減緩算法執(zhí)行以及降低統(tǒng)計(jì)精確度。一個(gè)空NLS統(tǒng)計(jì)表通過首先列出每一個(gè)η長(zhǎng)度的可能序列而生成。例如,對(duì)于η=5,NLS統(tǒng)計(jì)表會(huì)有1024個(gè)條目(AAAAA,AAAAC,AAAAG.··TTTTT(分別地,SEQIDNO:3_6)。NLS統(tǒng)計(jì)表可通過計(jì)算數(shù)據(jù)庫(kù)中所代表的每一NLS計(jì)數(shù)次數(shù)而被編譯,例如通過使用“滑動(dòng)窗口”算法掃描數(shù)據(jù)庫(kù)中每一個(gè)序列。備選地,NLS統(tǒng)計(jì)表可通過使用任何其他統(tǒng)計(jì)學(xué)上合理策略被編譯,例如從數(shù)據(jù)庫(kù)中隨機(jī)抽樣短序列?;瑒?dòng)窗口算法在本領(lǐng)域中是已知的。在一個(gè)實(shí)施方案中,算法通過一次滑動(dòng)一個(gè)或多個(gè)核苷酸而在目標(biāo)數(shù)據(jù)庫(kù)中沿著每一序列移動(dòng)以編譯NLSs列表。例如,在一個(gè)假定目標(biāo)數(shù)據(jù)庫(kù)(包括由AGTGCAAGTACGTAA(SEQIDNO7)所代表的核苷酸序列,其中N被設(shè)為5)中,第一個(gè)NLS是AGTGC,第二個(gè)NLS是GTGCA,第三個(gè)NLS是TGCAA,等等。在目標(biāo)數(shù)據(jù)庫(kù)中的每一個(gè)序列被編譯為NLSs集?;瑒?dòng)窗口算法計(jì)算來自空NLS統(tǒng)計(jì)表的每一NLS在數(shù)據(jù)庫(kù)中代表的次數(shù)。例如,算法掃描所有序列并計(jì)算NLS“AAAAA”,NLS“AAAAC”,NLS“AAAAG”出現(xiàn)在數(shù)據(jù)庫(kù)中的次數(shù)等等。此原始計(jì)數(shù)被在數(shù)據(jù)庫(kù)中觀測(cè)的NLSs總數(shù)相除以得到一個(gè)觀測(cè)頻率值。對(duì)于每一NLS,計(jì)算概率得分,其代表每一NLS相對(duì)于在目標(biāo)數(shù)據(jù)庫(kù)中期望發(fā)生頻率的觀測(cè)頻率。在一個(gè)例子中,將概率得分轉(zhuǎn)變?yōu)閷?duì)數(shù)概率得分并且等于Iogltl[數(shù)據(jù)庫(kù)中NLS觀測(cè)頻率/數(shù)據(jù)庫(kù)中NLS期望頻率]。期望頻率的計(jì)算方法可不同。在一方面,每一核苷酸被認(rèn)為同樣可能。在這種情況下期望頻率將為0.25N,其中N是上述NLR/NLS指定的長(zhǎng)度。因此,對(duì)于在前提及的5-merNLS(AGTGC),其期望頻率將為0.25n=0.0098。在另一實(shí)施方案中,基于目標(biāo)數(shù)據(jù)庫(kù)中每一核苷酸相對(duì)頻率的一個(gè)頻率被使用。每一核苷酸的相對(duì)頻率被計(jì)算作為目標(biāo)數(shù)據(jù)庫(kù)(對(duì)于該核苷酸的“數(shù)據(jù)庫(kù)頻率”)中整個(gè)所有序列(全體地)中的核苷酸G,C,T和A的分?jǐn)?shù)表示。在這種情況下,為每一N長(zhǎng)度序列計(jì)算NLS的期望頻率通過(1)對(duì)于NLS每一位置,記錄該位置(A,G,C,或T)上代表的核苷酸的數(shù)據(jù)庫(kù)頻率;以及然后(2)計(jì)算那些數(shù)據(jù)庫(kù)頻率乘積以為整個(gè)NLS生成期望頻率。例如,如果整個(gè)數(shù)據(jù)庫(kù)基本組成是A=0.20,G=0.30,T=0.20,C=0.30,NLS“AGTGC,,的期望頻率將為0.2X0.3X0.2X0.3X0.2=0.00072。在數(shù)據(jù)庫(kù)中特定NLS觀測(cè)頻率大于被計(jì)算的期望頻率的情況下,被觀測(cè)/被期望的比率大于1并且對(duì)數(shù)概率得分是正數(shù)。在觀測(cè)頻率小于期望頻率的情況下,該比值小于1并且對(duì)數(shù)概率得分是負(fù)數(shù)。因此,對(duì)于每一NLS,正的對(duì)數(shù)概率意味著NLS比統(tǒng)計(jì)學(xué)上期望的更頻繁地被觀測(cè)到,并且負(fù)的對(duì)數(shù)概率意味著NLS比統(tǒng)計(jì)學(xué)上期望的更加不經(jīng)常地被觀測(cè)到。在給定NLS沒有在數(shù)據(jù)庫(kù)中被觀測(cè)的情況下(即觀測(cè)頻率為0),使用近似值。在一個(gè)例子中,觀測(cè)頻率設(shè)為[1/1+數(shù)據(jù)庫(kù)中被觀測(cè)的NLSs總數(shù)]。在另一個(gè)例子中,選擇低于NLS統(tǒng)計(jì)表中最低觀測(cè)頻率的任意值。從而,未被觀測(cè)的NLSs典型地相對(duì)于被觀測(cè)的NLSs具有非常低的概率得分。記分模塊在本發(fā)明的一方面,模塊B被用于評(píng)估特定序列(或多個(gè)序列)與NLS統(tǒng)計(jì)表的適合度。例如,感興趣的序列可被掃描以尋找低得分區(qū)域,或者計(jì)算整個(gè)序列的累積得分。此累積得分可被用于,例如比較編碼相同氨基酸的兩個(gè)不同核苷酸序列以確定哪一個(gè)序列更適于在目標(biāo)生物體中表達(dá)。盡管不被任何特定的理論或機(jī)制所束縛,可提議具有低得分區(qū)域優(yōu)勢(shì)的序列(或具有更低累積得分序列)比具有更高得分區(qū)域優(yōu)勢(shì)的序列(或具有更高累積得分序列)在目標(biāo)生物體中有更低水平的表達(dá)。一種評(píng)估序列與NLS統(tǒng)計(jì)表的適合度的方法包括a.提供一NLS統(tǒng)計(jì)表(如為目標(biāo)生物體的NLS統(tǒng)計(jì)表,感興趣的序列在其中被表達(dá));b.識(shí)別感興趣序列中的每一個(gè)NLR,例如使用如上所述的滑動(dòng)窗口算法;c.為每一NLR讀出在該位置的NLS;d.使用NLS統(tǒng)計(jì)表尋找在步驟b和c鑒定的每一NLS的對(duì)數(shù)概率得分。該NLS概率值被用作為在感興趣序列中每一NLR位置的概率值。e.對(duì)所有NLR位置的對(duì)數(shù)概率得分求和以為感興趣的序列生成一個(gè)總得分。注意求和的對(duì)數(shù)得分與基礎(chǔ)(非對(duì)數(shù))概率值相乘是等同的。f.該方法為整個(gè)序列提供一個(gè)累積得分。另一種評(píng)估序列與NLS統(tǒng)計(jì)表的適合度的方法涉及在感興趣的較大序列中尋找低得分片段。此低得分片段可代表轉(zhuǎn)基因表達(dá)的重要障礙,或者足以破壞表達(dá)。該方法包括a.細(xì)分一感興趣的序列為更小的片段。這些片段可重疊。例如,一個(gè)IOOObp序列可被分為多個(gè)50bp片段;b.使用與上述相似的方法對(duì)這樣鑒定每一片段記分;c.為每一片段記錄分值;d.對(duì)在該序列中等同于最低計(jì)值的片段的全序列賦予一個(gè)分值。模塊C.優(yōu)化模塊當(dāng)感興趣的核苷酸序列是一感興趣蛋白質(zhì)的編碼序列時(shí),評(píng)估每一給定NLR的所有可能列表以及鑒定那些不破壞可讀框和/或經(jīng)編碼的氨基酸序列(即關(guān)于蛋白質(zhì)翻譯是“沉默的”)的NLSs將是必要的。這里所涉及的這些NLSs集合稱作沉默NLSs列表或“SNLS”。在本發(fā)明的一方面,SNLS列表通過使用感興趣的整個(gè)序列作為翻譯和評(píng)估的基礎(chǔ)來生成。該方法包括a.對(duì)于感興趣序列中的每一NLR,在該位點(diǎn)上將每個(gè)可能的NLS取代初始的感興趣的序列。例如,對(duì)于η=5,存在1024個(gè)可能的序列(AAAAA,AAAAC,AAAAG...ΤΤΤΤΤ)。b.將整個(gè)感興趣的初始序列以及新生成的取代序列翻譯成氨基酸序列。c.比較兩個(gè)氨基酸序列。如果兩個(gè)翻譯是相同的,取代被認(rèn)為是沉默的并且在這一輪用到的NLS被加到針對(duì)那個(gè)NLR位置的SNLS列表。d.在評(píng)估每一可能NLS后,該位置的SNLSs列表被完成。在本發(fā)明的另一個(gè)方面,SNLS列表通過執(zhí)行僅僅有限的翻譯和在被檢查NLR的附近進(jìn)行比較來被生成。該方法相對(duì)于上文所述的方法在計(jì)算上是優(yōu)選的。該方法包括a.為感興趣序列中的每一NLR,建立NLR周圍的翻譯框內(nèi)窗口。這如下完成通過在5'和/或3'方向擴(kuò)展NLR,使得i)區(qū)域長(zhǎng)度變?yōu)?倍(以適應(yīng)遺傳密碼的三聯(lián)體性質(zhì)),并且ii)擴(kuò)展區(qū)域的開始位置與初始全長(zhǎng)序列(即親本序列)的翻譯框架在框內(nèi)。b.使用對(duì)應(yīng)于擴(kuò)展區(qū)域的親本序列作為基礎(chǔ)序列,在對(duì)應(yīng)于步驟a中起始NLR的位置上將每個(gè)可能的NLS取代該基礎(chǔ)序列。c.翻譯初始基礎(chǔ)序列以及新生成的取代序列至氨基酸序列。e.比較兩個(gè)氨基酸序列。如果兩個(gè)翻譯是相同的,該取代被認(rèn)為是沉默的并且將在該輪中使用的NLS加到針對(duì)那個(gè)NLR位置的SNLS列表中。f.在評(píng)估每一可能NLS后,該位置的SNLS的列表完成。在本發(fā)明的另一個(gè)方面,SNLS列表通過首先為每一NLR創(chuàng)建翻譯的肽,而后從所有可編碼翻譯的肽的簡(jiǎn)并核苷酸序列集合中選擇SNLS成員而被生成。該方法包括a.為感興趣序列中的每一NLR,在其周圍建立一可翻譯的框內(nèi)窗口。這如下完成在5'和/或3'方向擴(kuò)展NLR,使得i)區(qū)域長(zhǎng)度變?yōu)?倍(以適應(yīng)遺傳密碼的三聯(lián)體性質(zhì)),并且ii)擴(kuò)展區(qū)域的開始位置與初始全長(zhǎng)序列的翻譯框架在框內(nèi)。b.使用對(duì)應(yīng)于擴(kuò)展區(qū)域的親本序列作為基礎(chǔ)序列,生成一目標(biāo)氨基酸序列(即翻譯該區(qū)域的初始核苷酸序列)。c.生成編碼目標(biāo)氨基酸序列的所有核苷酸序列集合。由于遺傳密碼的冗余性,該序列集被認(rèn)為是“簡(jiǎn)并的”。d.從簡(jiǎn)并的序列集合,識(shí)別并記錄在對(duì)應(yīng)于步驟a中初始NLR的位置中的N-長(zhǎng)度序列。e.在步驟d中識(shí)別的所有NLSs列表,減去任何重復(fù)就是該位置的SNLS列表。下一步,使用該NLS統(tǒng)計(jì)表對(duì)每個(gè)SNLS的得分賦予分值,并且對(duì)每個(gè)SNLS計(jì)算delta得分?!癲elta得分”或“Δ”代表感興趣的核苷酸序列的NLR初始序列與每一對(duì)應(yīng)SNLS之間概率得分的差異(Δ=沉默-初始)。因此,正delta得分指示了SNLS相比初始序列更類似于目標(biāo)數(shù)據(jù)庫(kù)中的序列(具有更高概率得分),并且delta得分的幅度對(duì)應(yīng)于在目標(biāo)數(shù)據(jù)庫(kù)中觀測(cè)的偏差度。然后,對(duì)于每一NLR,SNLSs列表按delta得分從最高到最低排序。為個(gè)別的NLR生成的SNLSs列表在這里被稱作該特定NLR的“對(duì)應(yīng)SNLS列表”。這樣,每一NLR都有其自己對(duì)應(yīng)的SNLS列表。為了優(yōu)化序列,通常的策略是用具有最大delta得分的SNLS代替每一NLR的初始NLS0這些取代的凈效果是使得初始序列的總體組成更接近于目標(biāo)數(shù)據(jù)庫(kù)中的序列組成。與此同時(shí),初始序列的低得分子片段被更高得分片段所代替,而保留整個(gè)序列的初始翻譯。一個(gè)執(zhí)行該模塊步驟的示例算法可包括如下步驟1)為操作序列,設(shè)置序列作為“輸入序列”。2)基于用于該NLS統(tǒng)計(jì)表的N-長(zhǎng)度來開發(fā)在該輸入序列中所有NLR位置的列表。典型地,在一個(gè)序列中存在著[L-N+1]個(gè)NLR位置,其中L是該初始序列的長(zhǎng)度。3)為每一NLR生成一個(gè)相應(yīng)SNLSs列表。4)通過檢查每一對(duì)應(yīng)SNLSs列表為整個(gè)序列選擇最高得分SNLS(如有最高delta得分的SNLS)。在相同delta得分的情況下,最5’位置被首先使用。5)為具有最高得分SNLS的NLR,將該NLR序列設(shè)定為對(duì)應(yīng)于最高計(jì)分SNLS的序列。6)暫時(shí)地“鎖定”與剛剛改變的位置重疊的任何NLR,包括自身改變的NLR。要求這個(gè)步驟來防止“翻轉(zhuǎn)”或其中一個(gè)單一的限定區(qū)域通過重疊取代被改變回去的其他循環(huán)過程。在該輪優(yōu)化的剩余部分的過程中被鎖定的NLR不被認(rèn)為是NLS取代。然而,它們?cè)陔S后的循環(huán)中被解鎖以允許該序列的全部?jī)?yōu)化。7)從剩余的解鎖NLR的列表以及對(duì)應(yīng)的SNLS列表中選擇該整個(gè)序列的最高計(jì)分SNLS。8)重復(fù)步驟5至7直到序列中的每一個(gè)NLR處于(1)被鎖定,或(2)已經(jīng)包含其位置最高得分SNLS。在此,優(yōu)化的一個(gè)循環(huán)完成。9)解鎖整個(gè)序列。10)使用上面描述的NLS統(tǒng)計(jì)表為整個(gè)序列生成得分。11)從步驟1開始重復(fù)優(yōu)化步驟,使用先前循環(huán)的序列作為輸入序列。12)繼續(xù)重復(fù)步驟1至11(即執(zhí)行順序優(yōu)化循環(huán))直到兩個(gè)連續(xù)的循環(huán)產(chǎn)生同樣的得分序列。這表明無進(jìn)一步優(yōu)化可能。13)從最后循環(huán)中輸出序列作為“完全優(yōu)化的序列”。在本發(fā)明的另一方面中,直接從經(jīng)翻譯的親本序列的氨基酸序列中進(jìn)行初步的一輪優(yōu)化。這種方法包括a.將該整個(gè)親本序列翻譯成一個(gè)氨基酸序列。b.將該整個(gè)經(jīng)翻譯的基因分成多個(gè)鄰接的肽段。每個(gè)肽段的長(zhǎng)度可以在從1個(gè)氨基酸至經(jīng)翻譯的基因的整個(gè)長(zhǎng)度之間(其中每一段是相同長(zhǎng)度的)。用現(xiàn)有計(jì)算機(jī)系統(tǒng)優(yōu)選大約3至大約10個(gè)氨基酸的長(zhǎng)度。c.對(duì)于每個(gè)肽段,產(chǎn)生對(duì)該片段進(jìn)行編碼的所有核苷酸序列的一個(gè)集合(一個(gè)簡(jiǎn)并序列的集合)。d.使用該目標(biāo)數(shù)據(jù)庫(kù)生成的NLS統(tǒng)計(jì)表來對(duì)因此生成的每個(gè)簡(jiǎn)并核苷酸序列進(jìn)行計(jì)分(參見模塊B)。使用在以上說明的“計(jì)分模塊”中披露的方法來計(jì)算該得分用于序列的子段計(jì)分。e.對(duì)每個(gè)肽片段選出最大計(jì)分的核苷酸序列并且按順序裝配這些序列。f.通過以上說明的額外的優(yōu)化作用來通過該初步裝配的序列。在隨后的任選的過程中(模塊D和E),進(jìn)一步分析并調(diào)節(jié)從模塊C得到的優(yōu)化序列以去除任何無意的可讀框或不令人希望的短DNA序列。模塊D.去除不令人希望的短DNA序列在本發(fā)明的一個(gè)方面中,從該優(yōu)選的序列中去除代表或據(jù)信能夠代表不理想特征的某些短DNA序列。此類短DNA序列可以包括某些限制性酶識(shí)別序列、多腺苷酸化序列、5’和/或3’剪接識(shí)別位點(diǎn)、等等。這些元件可以由特定的使用者進(jìn)行定義。在本發(fā)明的一方面中,通過掃描不令人希望的元件的序列并且用不同的NLS從與這些短序列重疊的NLR替換NLS、從而破壞該短核苷酸序列,從該核苷酸序列中去除此類短DNA序列。優(yōu)選地,用對(duì)總得分具有最低影響的NLS取代與該不令人希望的元件相重疊的NLS0在本文其他地方討論了計(jì)算總分的方法。在編碼DNA序列的優(yōu)化作用的情況下,只允許SNLS取代,并且不允許引入假(即,無意的)0RF的取代。典型地重復(fù)這個(gè)循環(huán),直至沒有不令人希望的位點(diǎn)留下,盡管可能沒有必要去除每個(gè)不令人希望的序列。短DNA序列的去除典型地是在根據(jù)本文中模塊A、B和C的優(yōu)化過程中或之后進(jìn)行的,或可以在這些模塊中任一者的缺失下進(jìn)行。在本發(fā)明的一個(gè)方面中,可以將特定的不令人希望的序列(如多腺苷酸化位點(diǎn))從一個(gè)優(yōu)化序列中去除。按照這種方式,在這種知識(shí)是可獲得的情況下,該方法可以實(shí)現(xiàn)大體上的優(yōu)化以及特異性位點(diǎn)校正。多腺苷酸化位點(diǎn)的實(shí)例包括但不限于AATAAA、AATATT,AACCAA,ATACTA,AATGAA,GATAAA,ATATAA,ATAAAA,ATTAAT,AATAAT,AATAAG,AATCAA、ATGAAA、AAGCAT、ATACAT、AAAATA、ATTAAA、AATTAA、AATACA、以及CATAAA(分另Ij是SEQIDNO:8至11、1、以及12至26)(參見,例如,Zhaoetal(1999)Microbiol.MoI.Biol.Rev.63405-445)。<0}植物特異性多腺苷酸化位點(diǎn)說明于Joshi(1987)NucleicAcidsRes.15:9627_9640和Rothnie(1996)PlantMoI.Biol.32:43_61中。原核多腺苷酸化位點(diǎn)討論于Sarkar(1997)Annu.Rev.Biochem.66:173_197中。聚合酶終止信號(hào)包括但不限于(CAN)7-9AGTNNAA(參見,例如VankanandFilipowicz(1988)EMBOJ.7791-799)。共有的剪接位點(diǎn)包括但不限于5’-AAG=GTAAGT以及3’-TTTT(Pu)TTT(Pu)T(Pu)T(Pu)T(Pu)TGCAG:C(參見,例如Brownetal.(1986)EMBOJ.52749-2758;HanleyandSchuler(1988)NucleicAcidsRes.16:7159_7176)。剪接位點(diǎn)最恒定的殘基是5‘-GT和3'-AG。這個(gè)優(yōu)化的核苷酸序列也可以通過用NLS進(jìn)行取代來進(jìn)行進(jìn)一步修飾,這些NLS具有生成穩(wěn)定的RNA二級(jí)結(jié)構(gòu)的更低概率。此類二級(jí)結(jié)構(gòu)包括但不限于發(fā)夾環(huán)(轉(zhuǎn)折結(jié)構(gòu))。能夠形成發(fā)夾環(huán)的序列包括但不限于CUUCGG(SEQIDNO:27)和UCUUCGG(SEQIDNO:28)(參見,例如Tuerketal.(1988)Proc.Natl.Acad.Sci.U.S.Α.851364-1368)。此外,該優(yōu)化序列可以通過消除不需要的短核苷酸共有序列(如限制性核酸內(nèi)切酶的識(shí)別位點(diǎn)、多腺苷酸化序列、5’和3’剪接識(shí)別序列等)的發(fā)生進(jìn)行進(jìn)一步優(yōu)化。模塊Ε.去除額外的ORF在本發(fā)明的另一方面中,從該優(yōu)化序列中去除不編碼感興趣的蛋白質(zhì)的可讀框(ORF)。這種不令人希望的或“假的”O(jiān)RF是通過用破壞該假ORF的NLS替換在假ORF內(nèi)部的NLR位置上的NLS而實(shí)現(xiàn)的。“內(nèi)部NLR”是落在該假ORF的邊界內(nèi)的NLR,如該感興趣的序列的全框翻譯所鑒定。在這個(gè)實(shí)施方案中,針對(duì)假ORF的存在對(duì)該序列進(jìn)行掃描。下一步,鑒定在假ORF內(nèi)部的NLR位置。對(duì)在這些NLR位置上的SNLS取代進(jìn)行評(píng)估,并且基于如以上說明的δ得分選出破壞該假ORF的那些SNLS取代。典型地,選擇了對(duì)總得分具有最低影響的SNLS。因?yàn)橹豢紤]了SNLS,選擇在不中斷該初始ORF的同時(shí)破壞任何假ORF的取代。可以將這個(gè)循環(huán)重復(fù)以生成越來越完美的優(yōu)化序列,或直至去除具有長(zhǎng)度大于約1000、約900、約800、約700、約600、約500、約400、約300、約200、約100、或大于約75個(gè)核苷酸的假ORF。模塊F.GC含量的優(yōu)化在本發(fā)明的又一個(gè)方面中,可以進(jìn)一步改變?cè)搩?yōu)化的核苷酸序列以調(diào)節(jié)該優(yōu)化序列的GC含量。通過用具有不同GC含量的NLS取代在NLR上的NLS可以實(shí)現(xiàn)該改變。不應(yīng)當(dāng)允許引入假ORF或不令人希望的短DNA序列的取代。在一個(gè)實(shí)例中,檢查了所有NLR上的所有可能的SNLS,并且鑒定出當(dāng)改變凈GC含量時(shí)對(duì)總得分具有最小影響的那些SNLS。用如以上說明的鎖定進(jìn)行反復(fù)取代,直至該基因的總GC含量達(dá)到一個(gè)目標(biāo)閾值,例如GC含量為大約40至大約60%,例如大約60%、大約59%、大約58%、大約57%、大約56%、大約55%、大約54%、大約53%、大約52%、大約51%、大約50%、大約49%、大約48%、大約47%、大約46%、大約45%、大約44%、大約43%、大約42%、大約41%、大約40%、大約39%、或大約38%。在一個(gè)實(shí)施方案中,該優(yōu)化核苷酸序列的GC含量是均勻遍及該整個(gè)核苷酸序列的。通過“均勻遍及”一詞,該核苷酸序列是要指該全長(zhǎng)優(yōu)化序列的任何定義的子段的GC含量具有一個(gè)GC含量,該GC含量類似于該全長(zhǎng)優(yōu)化序列的任何其他定義子段的GC含量。通過“類似于”該GC含量,它是要指參比子段的GC含量是在大約20%內(nèi)、大約19%內(nèi)、大約15%內(nèi)、大約10%內(nèi)、大約9%內(nèi)、大約8%內(nèi)、大約7%內(nèi)、大約6%內(nèi)、大約5%內(nèi)、大約4%內(nèi)、大約3%內(nèi)、大約2%內(nèi)、大約1%內(nèi),或小于相比較的參比部分的亞部分的GC含量。計(jì)算機(jī)實(shí)現(xiàn)的方法以上說明的用于生成合成的核苷酸序列的方法可以通過使用計(jì)算機(jī)程序或計(jì)算機(jī)實(shí)現(xiàn)的方法來全部或部分地進(jìn)行。本發(fā)明的計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品包括計(jì)算機(jī)可用的介質(zhì),其在其中存儲(chǔ)控制邏輯,用于使計(jì)算機(jī)生成對(duì)感興趣的多肽進(jìn)行編碼的合成的核苷酸序列。在一個(gè)實(shí)施方案中,該計(jì)算機(jī)程序包括計(jì)算機(jī)可用的介質(zhì),在其中存儲(chǔ)有控制邏輯,用于使計(jì)算機(jī)生成NLS統(tǒng)計(jì)表,該控制邏輯包含用于使該計(jì)算機(jī)接受通過輸入裝置輸入的外部信息的第一代碼,其中該外部信息包括DNA序列的數(shù)據(jù)庫(kù)以及η長(zhǎng)度的指定值??刂七壿嬕脖环Q作計(jì)算機(jī)可讀的和/或計(jì)算機(jī)可執(zhí)行的代碼。在另一個(gè)實(shí)施方案中,該計(jì)算機(jī)程序包括計(jì)算機(jī)可用的介質(zhì),在其中存儲(chǔ)控制邏輯,用于使計(jì)算機(jī)生成對(duì)感興趣的多肽進(jìn)行編碼的優(yōu)化的核苷酸序列,該控制邏輯包括用于使該計(jì)算機(jī)接受通過輸入裝置輸入的外部信息的第一代碼,其中該外部信息包括NLS統(tǒng)計(jì)表、以及有待優(yōu)化的核苷酸序列??刂七壿嬕脖环Q作計(jì)算機(jī)可讀和/或計(jì)算機(jī)可執(zhí)行的代碼。在另一個(gè)實(shí)施方案中,該計(jì)算機(jī)程序包括計(jì)算機(jī)可用的介質(zhì),在其中存儲(chǔ)有控制邏輯,用于使計(jì)算機(jī)生成對(duì)感興趣的多肽進(jìn)行編碼的優(yōu)化的核苷酸序列,該控制邏輯包括用于使該計(jì)算機(jī)接受通過輸入裝置輸入的外部信息的第一代碼,其中該外部信息包括優(yōu)化的核苷酸序列的DNA序列、以及一個(gè)較不希望的DNA和蛋白序列的集合(例如,在本文的其他地方披露的短的不令人希望的DNA序列)??刂七壿嬕脖环Q作計(jì)算機(jī)可讀取和/或計(jì)算機(jī)可執(zhí)行的代碼。在另一個(gè)實(shí)施方案中,該計(jì)算機(jī)程序包括計(jì)算機(jī)可用的介質(zhì),在其中存儲(chǔ)控制邏輯,用于使計(jì)算機(jī)生成對(duì)感興趣的多肽進(jìn)行編碼的合成(“優(yōu)化”)的核苷酸序列,該控制邏輯包括使該計(jì)算機(jī)接受通過輸入裝置輸入的外部信息的第一代碼,其中該外部信息包括DNA序列的數(shù)據(jù)庫(kù)、η-長(zhǎng)度的一個(gè)指定值、以及針對(duì)其開發(fā)一個(gè)或多個(gè)優(yōu)化基因的一個(gè)氨基酸序列;用于使該計(jì)算機(jī)從輸入中生成NLS統(tǒng)計(jì)表的第二代碼;用于開發(fā)NLR集合的第三代碼、用于確定不破壞該可讀框(“沉默NLSs”或“SNLS”)的這個(gè)NLS集合的第四代碼、以及用于優(yōu)化SNLS裝配中的選擇以得到優(yōu)化的基因序列的第五代碼。用于生成對(duì)感興趣的多肽進(jìn)行編碼的合成的核苷酸序列的本發(fā)明的計(jì)算機(jī)系統(tǒng)包括處理器(進(jìn)行運(yùn)算以確定、接受,檢查、并顯示數(shù)據(jù))、與所述處理器相連接用于存儲(chǔ)數(shù)據(jù)的存儲(chǔ)器、與所述處理器相連接用于顯示數(shù)據(jù)的顯示裝置、與所述處理器相連接用于輸入外部數(shù)據(jù)的輸入裝置;以及一個(gè)具有至少兩種所述處理器可執(zhí)行的操作模式的計(jì)算機(jī)可讀的腳本。計(jì)算機(jī)可讀取腳本可以是一個(gè)計(jì)算機(jī)程序或本發(fā)明的一個(gè)實(shí)施方案的計(jì)算機(jī)程序產(chǎn)品的控制邏輯。對(duì)于本發(fā)明而言以任何具體的計(jì)算機(jī)語言來寫這個(gè)計(jì)算機(jī)程序或在任何特定類型的計(jì)算機(jī)系統(tǒng)或操作系統(tǒng)上操作不是關(guān)鍵性的。例如,可以用C++、Java,Perl、Python、Ruby、Pascal、或Basic編程語言來編寫這個(gè)計(jì)算機(jī)程序。應(yīng)當(dāng)理解,可以用多種不同的編程語言之一來產(chǎn)生這個(gè)程序。在本發(fā)明的一個(gè)方面中,寫出該程序以便在使用Linux操作系統(tǒng)的計(jì)算機(jī)上運(yùn)行。在本發(fā)明的另一方面中,寫出該程序以便在使用MSWindows或MacOS操作系統(tǒng)的計(jì)算機(jī)上運(yùn)行。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解根據(jù)本發(fā)明可以按任何順序或同時(shí)執(zhí)行代碼,只要該順序符合邏輯流。在一個(gè)實(shí)施方案中,該計(jì)算程序具有對(duì)于使用者插入所希望的氨基酸序列的一個(gè)輸入空間、以及顯示生成的核苷酸序列的一個(gè)輸出空間。在一個(gè)實(shí)施方案中,該計(jì)算機(jī)程序具有一種編輯模式,其中可以如使用者所希望修改對(duì)于每個(gè)NLR選擇每個(gè)NLS的概率。用于優(yōu)化的核苷酸序列對(duì)于感興趣的多肽進(jìn)行編碼的任何核苷酸序列可以生成合成(或“優(yōu)化的”)的核苷酸序列,包括但不限于對(duì)殺蟲蛋白、除草劑耐受性蛋白、真菌耐受性蛋白、水解酶類(包括改變植物谷物中糖類、蛋白質(zhì)、或脂類/油的量和/或性質(zhì)的酶類)、品質(zhì)性狀、或任何其他感興趣的蛋白質(zhì)進(jìn)行編碼的序列。殺蟲蛋白包括S-內(nèi)毒素蛋白,如來自蘇云金芽孢桿菌中的那些蛋白。通過“殺蟲”一詞是要指帶來至少一種害蟲死亡或明顯地減少害蟲生長(zhǎng)、攝食、或正常生理發(fā)育的能力?!皻⑾x”化合物是一種具有抗昆蟲種類中的害蟲的活性的化合物?!俺輨┠褪苄缘鞍住被驈摹熬幋a除草劑耐受的核酸分子”的表達(dá)中得到的蛋白包括多種蛋白質(zhì),它們與不表達(dá)該蛋白的細(xì)胞相比賦予細(xì)胞耐受更高濃度的除草劑的能力、或與不表達(dá)該蛋白的細(xì)胞相比耐受一定濃度的除草劑更長(zhǎng)時(shí)間的能力。以下實(shí)施例是通過闡明方式但不作為限制來提供的。實(shí)驗(yàn)實(shí)施例1.使用一個(gè)5級(jí)統(tǒng)計(jì)模型優(yōu)化在玉蜀黍中表達(dá)的細(xì)菌δ內(nèi)毒素基因步驟1:識(shí)別并且收集玉蜀黍cDNA序列(模塊A)。從公共資源(例如GENBANK)中收集有待在玉蜀黍中表達(dá)的本領(lǐng)域內(nèi)已知的編碼區(qū)域的序列。這些序列由mRNA、cDNA、或代表這些編碼序列的基因組片段組成。按照需要,對(duì)這些序列進(jìn)行編輯以去除非編碼區(qū)(優(yōu)選地通過在該序列群體中識(shí)別可讀框(ORF)區(qū)域)。步驟2用N=5生成針對(duì)玉蜀黍cDNA序列的NLS統(tǒng)計(jì)表。使用如在模塊B中所說明的一個(gè)5堿基滑動(dòng)序列窗對(duì)來自玉蜀黍的序列進(jìn)行分析。生成了由所有可能的5堿基序列組成的一個(gè)表,并且記錄了來自步驟1的在玉蜀黍序列集合中觀察到的每個(gè)5堿基序列的計(jì)數(shù)。將觀察到的計(jì)數(shù)除以觀察到的5-堿基序列的總數(shù)生成原始頻率值。將觀察到的原始頻率值除以預(yù)期的頻率值以生成在玉蜀黍序列集合中所有5堿基序列(NLS)的觀察預(yù)期的比率。使用水平分布模型來定義該實(shí)例中的預(yù)期頻率(即,每個(gè)NLS(5堿基序列)在1,024個(gè)可能的NLS(5堿基DNA序列)中被認(rèn)為相同的可能性)。得到的表被稱為NLS統(tǒng)計(jì)表。觀察預(yù)期的比率被認(rèn)為是近似于觀察到的5堿基序列中每一個(gè)的發(fā)生概率。步驟3.用高概率序列替換在細(xì)菌δ內(nèi)毒素基因中的低概率5堿基序列(NLS)。通過滑動(dòng)窗分析來確定候選的δ內(nèi)毒素基因(Axmi004;披露于在2003年3月18日提交的美國(guó)專利申請(qǐng)10/739,610中)以確定在該基因中每個(gè)5堿基序列(NLS其中N=5)的相對(duì)相似性。所有的基因序列核苷酸位置是根據(jù)它們?cè)谟袷袷蛑邪l(fā)生的概率升序排序的,在這種情況下使用來自步驟2的NLS統(tǒng)計(jì)表進(jìn)行近似。從最低概率序列位置開始,通過在不破壞該基因閱讀框或向該基因氨基酸序列(SNLS)中引入突變的位置上識(shí)別所有可能的NLS(5堿基取代)來生成一個(gè)沉默取代的集合。在每個(gè)位置上,用具有最高玉蜀黍觀察預(yù)期比率(在NLS統(tǒng)計(jì)表中最高位次)的5堿基沉默取代(SNLS)取代現(xiàn)有的5堿基序列。如在模塊C中(以上)所說明的重復(fù)該循環(huán)并且重復(fù)幾輪,直至增加該基因序列的凈可能性的額外的沉默變化是不可能的。得到的序列被認(rèn)為是初步優(yōu)化的基因。步驟4.從該初步優(yōu)化的基因中去除假0RF。通過用如以上在模塊D中所說明的SNLS(5-堿基序列)替換在該初步優(yōu)化基因(5堿基序列)中的NLS,從該初步優(yōu)化基因中去除不編碼該感興趣基因的0RF。選出破壞任何識(shí)別的假可讀框而不中斷該初始可讀框的取代(在這種情況下,Axmi004蛋白)。重復(fù)該循環(huán)直至在產(chǎn)生一個(gè)“剔除ORF的優(yōu)化基因”的優(yōu)化的基因中沒有大于75個(gè)氨基酸的假可讀框被保留。步驟5.從該剔除ORF的初步優(yōu)化基因中去除不令人希望的短DNA序列。通過用如以上在模塊E中所說明的SNLS(5堿基序列)替換在該初步優(yōu)化基因中的NLS,從該初步優(yōu)化的基因中去除對(duì)不令人希望的特征(包括限制性酶識(shí)別序列)進(jìn)行編碼的短DNA序列。不允許引入假的ORF的取代。重復(fù)該循環(huán)直至沒有留下不令人希望的位點(diǎn),得到一個(gè)完全優(yōu)化的基因。步驟6.生成具有降低的GC含量的變體全優(yōu)化基因。通過用如以上在模塊F中所說明的SNL(5堿基序列)取代在該全優(yōu)化基因中的NLSs來生成全優(yōu)化基因的變體。不允許引入假可讀框或不令人希望的短DNA序列的取代。評(píng)價(jià)所有可能的沉默取代,并且鑒定對(duì)觀察預(yù)期的比率具有最小影響同時(shí)仍降低凈GC含量的那些沉默取代。以這種方式反復(fù)進(jìn)行取代直至使該基因的總GC含量低于50.0%的目標(biāo)閾值。該序列被認(rèn)為是低于50%GC的優(yōu)化基因。實(shí)施例2以下算法提供了用于實(shí)施本發(fā)明的方法的算法的函數(shù)集合的一個(gè)實(shí)例。#Syntheticgenecreationandoptimizationclasses###########################################ThisprogramisthepropertyofAthenixCorp.#Allrightsreserved#DanielJ.Tomso,programmer#Created:07_Mar_06###########################################Modified:07-Mar-06,DJT#Modified:08-Mar_06,DJT#Modified:09-Mar-06,DJT#Modified:10-Apr-06,DJT#Modified:ll-Apr-06,DJT#Modified:12-Apr_06,DJT#Modified:26-Apr_06,DJT#Modified:27-Apr_06,DJT#Modified:28-Apr_06,DJT#Modified:01-May_06,DJT#Modified:17-May_06,DJT#Modified:01-Jun_06,DJT#Modified:18_Sep_07,DJT(Beginningofexperimentalre-writeforprotein-directedopt)#Modified:23_Jan_08,DJT(tweaksforneworfhandlingrequirements)#Modified:16_Apr_08,DJT(cleanoutnon-CATGseqsinkeys)#Modified:12_Aug-08,DJT(beginmajorupgrade)importreimportsysimportpicklefrommathimportlogfromseq—handlerimportSeqHandlerfromorf—classesimportOrfFinderclassSeqStats:"""Basen~ordersequencestatisticsclass."""def—init_(self,order=5):“““Initializebypassinginanorder(oligolength)value.“'丨"self,order=orderself,oligo—count=0self,oligos=self,build—oligos()self·oligo—stats={}defbuild—oligos(self):“““Buildsanemptydictionaryofalln-orderoligos.“““oligo—keys=[“]foriinrange(0,self,order):new—oligos=[]foroligoinoligo—keys:forbasein['A','C','G','T']:noligo=oligo+base.new—oligos.append(noligo)oligo_keys=new—oligosoligos={}foroligoinoligo_keys:oligos[oligo]=0returnoligosdefadd(self,oligo):”””Addsanoligostatsmatrix.”””ifre.search["ACGT]‘,oligo):returnself.oligos[oligo]+=1self,oligo—count+=1defadd—seq(self,sequence):〃〃〃Addsalloligosfromasequencetothestatsmatrix.“!!sequence=sequence,upper()foriinrange(0,Ien(sequence)-self,order+1):oligo=sequence[i:i+self.order]self,add(oligo)defupdate(self):〃〃〃Calculatesthestatisticsmatrixfromthecurrentrawcountvalues.“““notseen=log(1/fIoat(self·oligo—count+1))stats={}expected=0.25“self,orderforoligoinself,oligos:ifself,oligos[oligo]==0:stats[oligo]=notseenelse:observed=self,oligos[oligo]/float(self,oligo—count)stats[oligo]=log(observed/expected,10)self,oligo—stats=statsdefsscore(self,sequence):〃〃〃Returnsalogprobabilityscoreforagivensequence.”””sequence=sequence,upper()score=0foriinrange(0,Ien(sequence)-self,order+1):oligo=sequence[i:i+self.order]score+=self.oligo_stats[oligo]returnscoredefsave(self,filename):"""SimplepickleroutinetosaveN-orderstatdatatofile.“““dataset=[self,order,self.oligo_count,self,oligos,self.oligo_stats]savefile=open(filename,'w')pickle,dump(dataset,savefile)savefile.close()print"Datasavedto%s"%(filename)defload(self,filename):"""SimplepickleroutinetoloadN-orderstatdatafromfile.“““l(fā)oadfile=open(filename,'r')(self,order,self.oligo_count,self,oligos,self.oligo_stats)=pickle.Ioad(Ioadfile)loadfile.close()classSiteManager():"""ClasstomanagesitedetectionandpreservationoperationsinDNA.“““def_init_(self,tablefile)self,siteset=self,load(tablefile)defload(self,filename):““‘‘Loadsatableofsitesintogroupedsets.““‘‘siteset={}loadfile=open(filename,'rU')forlineinloadfile:line=line.rstripOifre.match('#',line):#commentlinecontinuegroup,sequence=line,split('\t')ifsiteset.has_key(group):siteset[group].append(sequence)else:siteset[group]=[sequence]returnsitesetdeffindsites(self,sequence):”””Findsallinstancesofthesitesetinasequence,returnsadictionarywithpairedsitesandlocations.〃〃〃sitetable={}forgroupinself,siteset.keys():forsiteseqinself,siteset[group]:siteiter=re.finditer(siteseq,sequence)forsitematchinsiteiter:ifsitetable.has_key(group):sitetable[group].append([siteseq,sitematch.start()])else:sitetable[group]=[[siteseq,sitematch.start()]]returnsitetableclassSeqOptimizer(SeqStats):〃〃〃Derivedclassforsequenceoptimizationusingn-ordersequencestatistics.“““def—init_(self,sequence,statfile,order=5):SeqStats.—init—(self,order)self,load(statfile)self,seq=sequenceself,length=Ien(sequence)self,sh=SeqHandler()self,opt—table={}self,changedsites=[]#listofsiteschangedduringoptimizationroundsdefsequence(self,sequence=None):”””Returnsthecurrentsequence,orupdatesthesequence.”””ifsequenceisNone:returnself,seqelse:self,seq=sequencedefscore(self,sequence=None):“““Overridesbasicscore—returnscurrentsequencescoreifnoparameterspecified,otherwisescorespassedsequence.“““ifsequence:score=self,sscore(sequence)else:score=self,sscore(self,seq)returnscoredefsegments(self,oligo,position):“““Returnssegmentsforsubstitutionmethod.“““offset=self,order-1begin=position-offsetbegin=begin-(begin%3)end=position+self.order+offsetend=end+(3_end%3)ifbegin<0:begin=0ifend>self,length:end=self,lengthorg—dna=self,seq[begin:end]prefix=self,seq[begin!position]suffix=self,seq[position+self.order:end]new—dna=prefix+oligo+suffixreturnorg_dna,new_dnadefsegment(self,position):〃〃〃Returnscleanly-translatablesequencesegmentandoffsetcorrectionfordegenerationmethod.〃〃〃offset=self,order-1begin=position-offsetbegin=begin-(begin%3)end=position+self.order+offsetend=end+(3_end%3)ifbegin<0:begin=0ifend>self,length:end=self,lengthorg—dna=self,seq[begin:end]correction=position-beginreturnorg—dna,correctiondefsilent(self,org—dna,new_dna)usewithsubstitutionmethod〃〃〃Returns1ifasilentmutation,0ifanaachangeisintroduced.“““org_aa=self.sh.translate(org_dna)new_aa=self.sh.translate(new_dna)iforg_aa==new_aa:return1else:return0defdelta(self,org_dna,new_dna):“““ReturnsthedeltascorefortwoDNAsegments.“““org—score=self,score(org—dna)new—score=self,score(new—dna)returnnew—score—org—scoredefsubs(self,position,threshold=—100000.0):〃〃〃Degeneration-basedsilentsubstitutionroutine.〃〃〃org—dna,correction=self,segment(position)org_aa=self.sh.translate(org_dna)org—oligo=self,seq[position:position+self.order]degenerates=self.sh.degenerate(org_aa)nsubs={}fordegenerateindegenerates:oligo=degenerate[correction:correction+self.order]ifself,score(oligo)<threshold:continueifnsubs.has_key(oligo):continueelse:prefix=org—dna[:correction]suffix=org—dna[correction+self.order:]new—dna=prefix+oligo+suffixnew_aa=self.sh.translate(new_dna)ifnew_aa<>org_aa:continue#somenon-silentpossibilitiesdependingonpositionandframedelta=self,delta(org_dna,new_dna)nsubs[oligo]=deltasubs=[]foroligoinnsubs.keys():delta=nsubs[oligo]subs,append([delta,oligo])subs,sort(cmp=lambdax,y:cmp(x,y))returnsubsdefold_subs(self,position,threshold=—100000.0):”””Returnsascoredlistofsilentsubstitutionsforthegivenpositionandsequence.“““subs=[]foroligoinself,oligos:org—dna,new—dna=self.segments(oligo,position)ifself,silent(org—dna,new—dna):delta=self,delta(org_dna,new_dna)ifself,score(oligo)<threshold:continuesubs,append([delta,oligo])ifIen(subs)==0:subs,append(])subs,sort(cmp=lambdax,y:cmp(x,y))returnsubs.defupdate—opt—table(self):”””Updatestheoptimizationtableforeverysiteinthechangedsitelist.“““foriinself,changedsites:oligo=self.seq[i:i+self.order]best—delta,best—oligo=self·subs(i)[_1]#defaultthreshold,acceptsallsubsself.opt_table[i]=([best_delta,best_oligo])defsite—collision(self,position):〃〃〃Testsforoverlapbetweentheregionsurroundingpositionandthesitetable.“““offset=self,order-1foriinrange(position-offset,position+self.order+offset):ifiinself,changedsites:returnTruereturnFalse.defupdate_site_table(self,position):〃〃〃Updatesthechangedsitetableforallsiteoverlappingthecurrentposition.”””offset=self,order-1begin=position-offsetend=position+self.order+offsetifbegin<0:begin=0ifend>(self,length-self,order+1):end=(self,length-self,order+1)foriinrange(begin,end):self,changedsites.append(i)defopt—round(self):〃〃〃Performsasingleroundofnon-overlappinglow-positionoptimization.“““self,update—opt—table()self,changedsites=[]skeys=self·opt—table·keys()skeys.sort(cmp=lambdax,y:cmp(self.opt_table[y],self.opt_table[x]))maxdelta=self.opt_table[skeys]#largestobserveddeltaintheopttableifmaxdelta<=0.0:returnFalse#Notchanged,convergedforpositioninskeys:delta,oligo=self.opt_table[position]ifdelta>0.0:ifself,site_collision(position):continueprint"\t\tUpdatingatposition%s,oligois%s,rawscoreis%2.3f,deltascoreis%2.3f.“%\(position,oligo,self,score(oligo),delta)or—gaa=self.sh.translate(self,seq)prefix=self.seqsuffix=self,seq[position+self.order:]var—seq=prefix+oligo+suffixself,seq=var—seqself,update_site_tab1e(position)returnTrue#Changeddefoptimize(self,maxtries=2000):“““Low-position-firstoptimizationroutine.“““self,changedsites=range(0,self,length-self,order+1)round=1whileround<=maxtries:print"\tBeginninground%sofoptimization.”%(round)changed=self,opt—round()print"\tRound%scompleted.Sequencescoreis%4.3f"%(round,self,score())ifnotchanged:print"\t0ptimizationcomplete.“returnTrueround+=1self,changedsites=range(0,self,length-self,order+1)#forcerescannowthatwehaveafasteralgorithmprint〃\t0ptimizationincompleteafter%srounds.〃%(maxtries)returnFalsedeftrace(self,sequence=None):“““Generatesasliding-windowtracesofthesequenceandreturnsn-orderstatscoresforeveryposition.”””ifsequenceisNone:sequence=self,seqtrace=[]foriinrange(0,Ien(sequence)-self,order+1):oligo=sequence[i:i+self.order]trace,append([i,oligo,self,score(oligo)])returntracedeflowscores(self,number=10):〃〃〃Returnsthelowest-scoringpositionsinthesequence.”””trace=self,trace(sequence)trace,sort(cmp=lambdax,y:cmp(x[2],y[2]))lows=[]foriinrange(0,number):lows,append(trace[i][2])returnlowsclassPSeqGenerator(SeqStats):〃〃〃Derivedclassforsequenceoptimizationusingn-ordersequencestatisticsandprotein-basedoperations.〃〃〃def—init_(self,sequence,statfile,order=5,segmentsize=5,st印size=3):SeqStats._init_(self,order)self,load(statfile)self,aseq=sequence#thisisnowanaminoacidsequenceself,length=Ien(sequence)#aminoacidlengthself,sh=SeqHandler()self,seq=self,generate(segmentsize)#generatesstartingoptimalnucleotidesequencefromproteinsequencedefsequence(self,sequence=None):〃〃〃Returnsthecurrentsequence,orupdatesthesequence.”””ifsequenceisNone:returnself,seqelse:self,seq=sequencedefscore(self,sequence=None):“““Overridesbasicscore—returnscurrentsequencescoreifnoparameterspecified,otherwisescorespassedsequence.“““ifsequence:score=self,sscore(sequence)else:score=self,sscore(self,seq)returnscoredefcandidate(self,position,segmentsize):”””Newdegeneration-basedsilentsubstitutionroutine,returnscandidatesilentsequencesofagivena.a.length.“““aa—segment=self,aseq[position:position+segmentsize]print"\tDegeneratingsequence%satposition%s〃%(aa_segment,position)degenerates=self.sh.degenerate(aa—segment)high—degenerate=”high_score=-10.0fordegenerateindegenerates:ifself,score(degenerate)>high—score:high—degenerate=degeneratehigh—score=self,score(degenerate)returnhigh—degenerate,high—scoredefgenerate(self,segmentsize):DNA—seq=“foriinrange(0,self,length,segmentsize):best—DNA,best_score=self,candidate(i,segmentsize)DNA—seq=DNA—seq+best—DNAreturnDNA—seqclassSeqScrubber(SeqOptimizer):“““DerivedclasstohandlescrubbingandGCdrivedownoperationsonoptimizedsequences.“““def—init_(self,sequence,statfile,order=5,orfmax=75,threshold=0.0,\sitetable='/home/python/scrub—sites,table‘,addtable='/home/python/add—sites·table'):SeqOptimizer._init_(self,sequence,statfile,order)self,threshold=threshold#minimumacceptablescoreforarep1acementο1igoself,orfmax=orfmax#maximumacceptablelengthforaspuriousORFself,of=OrfFinder(minlength=self,orfmax)self,stable=self,load—scrubtable(sitetable)self,scrublist=[]#listofsiteschangedduringscrubbingoperationsself,atable=[]self,deadorfs=[]self,origsites={}deforfcount(self,sequence,verbose=False):〃〃〃CountsthenumberofqualifyingORFsinasequence.”””of—orfs=self.of.get_orfs(sequence,require_atg=False,require_stop=False)orfs=[]ifverbose:fororfinof—orfs:orfs.append([orf['length'],orf['start']])ifverbose:returnorfselse:returnIen(of—orfs)defget_orf(self,psequence,start,end):〃〃〃Returnsacleanly-translatableORFfromthecurrentsequence.“““ifstart<end:subseq=psequence[start:end]else:subseq=psequence[end:start]subseq=self.sh.reverse—complement(subseq)returnsubseqdefscrubintervals(self,lowpos,highpos):〃〃〃GeneratesdiscontinousintervalstoattemptORFscrubbing.“““brange=[]fullorfnt=self,orfmax*3maxorfnt=int(fullorfnt*0.8)#use80%ofmaximumforscrubtargetintsize=(fullorfnt-maxorfnt)*2#prettybig,butweneedsometargetslowend=lowpos+maxorfnthighend=highpos-maxorfntiflowend>=highend:#smallorf,needslightlylargerintervalcenter=lowpos+(highpos-lowpos)/2bmax=center+intsize/2bmin=center-intsize/2ifbmax<lowend:bmax=lowendifbmin>highend:bmin=highendbrange=range(bmin,bmax)else:#largerorf,theserangeswillbetoosmallifthereis.onlyoneinterval!multiple=(highend-lowend)/maxorfnt+1#howmanyrangeswewillbepickingfintsize=intsize/multiple#pickthesamenumberoftotalsitesforiinrange(lowend,highend):ifnot(i-lowpos)%maxorfnt:#atamultipleofmaxorfntforjinrange(i+intsize-fintsize,i+intsize):brange.append(j)returnbrangedefpossibles(self,prange):”””Returnsalistofpossiblesilentsubstitutionsinarangeofpositions.“““possibles=[]forpositioninprange:ifpositioninself,scrublist:continue#skippositionsonthe'donotchange'listcoligo=self,seq[position:position+self.order]ρsubs=self,subs(position,threshold=self,threshold)for(pdelta,poligo)inpsubs:ifpoligo==coligo:continue#skiptheexistingoligoatthispositionpossibles,append([pdelta,poligo,position])possibles,sort(reverse=True)returnpossiblesdefvariant(self,position,poligo):“““Returnsthenewvariantsequenceusingpoligoasasubstituteatthecurrentposition.〃〃〃prefix=self.seqsuffix=self,seq[position+self.order:]psequence=prefix+poligo+suffixreturnpsequencedefscrub_orf(self,orf,forcel=False,force2=False):“““BreaksupanORF.PassinanORFinstance.“““iforf['end']>orf['begin']:#forwardstrandscrubrange=self,scrubintervals(orf['begin'],orf['end'])ifforcel:scrubrange=range(orf['begin']+30,orf['end']-30)#maximumrangeelse:#reversestrandscrubrange=self,scrubintervals(orf['end'],orf['begin'])ifforcel:scrubrange=range(orf['end']+30,orf['begin']-30)org—threshold=self,thresholdifforce2:self,threshold-=0.5possibles=self,possibles(scrubrange)self,threshold=org—thresholdfor(pdelta,poligo,position)inpossibles:psequence=self,variant(position,poligo)porfseq=self,get—orf(psequence,orf['begin'],orf['end'])ptrans=self.sh.translate(porfseq)if'*'inptrans:self,sequence(psequence)#updatesequencetomatchthevariantoffset=self,order-1self,scrublist.append(position)#lockdownthepositiontoavoidflipflopsprint"\t\t\tSolutionfound:%satposition%s,deltais%2.3f.“%(poligo,position,pdelta)returnTrue#successfulscrubreturnFalse#failedscrubdeforfcheck(self,variant):”””ComparesORFcountsandpositionsinsequenceandvariant,returnsTrueifvarianthasthesameORFsassequence.”””seq—orfs=self,orfcount(self,seq)var—orfs=self,orfcount(variant)ifseq—orfs==var_orfs:returnTrueelse:returnFalsedefsitecheck(self,variant):〃〃〃Comparesscubsitecountsandpositionsfortheprimarysequenceandavariant,returnsTrueiftheymatch,F(xiàn)alseotherwise.“““seq—sites=self,sitecount(self,seq)var—sites=self,sitecount(variant)ifseq—sites==var—sites:returnTrueelse:returnFalsedefscrub—largest—orf(self):〃〃〃AttemptstoremovethelargestspuriousORFinthesequence.“““orfs=self.of.get._orfs(self,seq,require_atg=False,require_stop=False)orfs.sort(cmp=lambdax,y:cmp(x[rlength'],y['length']),reverse=True)#sortORFsbysizeorfs—max=Ien(orfs)-1cur_orf=1whilecur—orf<=orfs—max:orf=orfs[cur_orf]#nextORFtoworkonprint"\t\tLargestspuriousORFis%saminoacids,fromnucleotide%sto%s."%(orf[!length!],orf[!begin!],orf['end'])orfkey=str(orfbegin'])+"_"+str(orfend'])iforfkeyinself,deadorfs:print"\t\tSkipping—unscrubbableORF.”cur—orf+=1continuescrubbed=self,scrub—orf(orf)ifscrubbed:returnTrueelse:print"\t\tScrubfailed__attemptingagainwithforcelevel1(expandedscrubrange).”scrubbed=self,scrub—orf(orf,forcel=True)ifscrubbed:returnTrueelse:“\t\tForcefailed—attemptingagainwithforcelevel2(reducedsubstitutionthreshold).“scrubbed=self,scrub—orf(orf,forcel=True,force2=True)ifscrubbed:returnTrueelse:print"\t\tForcefailed.ORFnotscrubbed.”self,deadorfs.append(orfkey)returnTrue#achangewasmadereturnFalse#nochangesmadedefscrub—orfs(self):self,deadorfs=[]scrubround=0orfcount=self,orfcount(self,seq)whileorfcount>1:scrubround+=1print"\tRound%s,currentORFcountis%s"%(scrubround,orfcount)scrubbed=self,scrub—largest—orf()ifnotscrubbed:returnIen(self,deadorfs)orfcount=self,orfcount(self,seq)return0#orfcountisnow1,onlyprimaryORFremainsdefcleanup(self):〃〃〃Finalpost-scrubbingcleanuptocheckforoptimizablesites."""prange=range(0,self,length-self,order+1)changed=Trueorg—threshold=self,thresholdself,threshold=-10000.0#allowallchangesthatproduceapositivedeltaself,scrublist=[]whilechanged:print"\tPerformingcleanupscan..."changed=Falsepossibles=self,possibles(prange)for(pdelta,poligo,position)inpossibles:ifpdelta<=0:continueseq—gc=self.sh.gc(self,seq)psequence=self,variant(position,poligo)var_gc=self.sh.gc(psequence)ifvar_gc>seq—gc:continueifnotself,orfcheck(psequence):continueifnotself,sitecheck(psequence):continueself,sequence(psequence)changed=Trueprint"\t\tChangemadeatposition%s,oligois%s,deltais%2.3f/r%(position,poligo,pdelta)breakself,threshold=org—thresholddefdrivedown—gc(self,gc—target):“““ReducesGCcontentbymakingsilentchanges.“““prange=range(0,self,length-self,order+1)print〃\tScanningsequenceforpossiblechanges...〃possibles=self,possibles(prange)saa=self.sh.translate(self,sequence())for(pdelta,poligo,position)inpossibles:seq—gc=self.sh.gc(self,seq)ifseq—gc<=gc—target:returnTrue#thresholdreachedpsequence=self,variant(position,poligo)ifself.sh.gc(psequence)>=self.sh.gc(self,seq):continue#noGCdecreaseifnotself,orfcheck(psequence):continue#changecreatesORFsifnotself,sitecheck(psequence):continue#changecreatessitespaa=self.sh.translate(psequence)ifpaaOsaa:#已mutation,Shouldnrthappen!continueself,sequence(psequence)self,scrublist.append(position)var_gc=self.sh.gc(psequence)gcdelta=var_gc-seq_gcprint"\t\tUpdatingatposition%s,oligois%s,deltais%2.3f,newGCpercentis%3.2f.”%(position,poligo,pdelta,var_gc*100)returnFalsedefsitecount(self,sequence,verbose=False):〃〃〃Countsthenumberofunscrubbedsitesinthecurrentsequence.“““sitecount=0sitelist=[]fornameinself,stable,keys():site,comment=self,stable[name]formatchinre.finditer(site,sequence):sitelist.append([name,match,start()])sitecount+=1ifverbose:returnsitelistelse:returnsitecountdefload_scrubtable(self,tablefilename):“““Loadsatableofsequencestoscrub.“““stable={}tfile=open(tablefilename,'r')forlineintfile:ifre.match#!,line):continueitems=re.split(r'\s+',line)name,site=itemscomments=items[2:]comment=''.join(comments)stable[name]=[site,comment]returnstabledefasegment(self,begin,end,sequence):〃〃〃Returnscleanly-translatablesequencesegment.〃〃〃begin=begin-(begin%3)end=end+(3_end%3)ifbegin<0:begin=0ifend>Ien(sequence):end=Ien(sequence)dna=sequence[begin:end]returndnadefscrub_site(self,site,position):〃〃〃Scubsasinglesitefromadesignatedpositioninthesequence.“““offset=self,order-1scrubstart=position-offsetifscrubstart<0:scrubstart=0scrubend=position+len(site)+offsetifscrubend>self,length:scrubend=self,lengthscrubrange=range(scrubstart,scrubend)possibles=self,possibles(scrubranqe)for(pdelta,poligo,position)inpossibles:psequence=self,variant(position,poligo)pregion=psequence[scrubstart:scrubend]ifre.search(site,pregion):continue#siteisstillpresent,skipthissolutionelse:ifself,orfcheck(psequence):self,sequence(psequence)#updatesequenceself,scrublist.append(position)#lockdownthepositiontoavoidfIipflopsprint"\t\t\t\tSolutionfound:%satposition%S9deltais%2.3f"%(poligo,position,pdelta)returnTrue#changemadeelse:print"\t\t\t\tRejectedsolution%sat%sfor.extraneousORFcreation.”%(poligo,position)continuereturnFalsedefscrub_first_site(self,name):〃〃〃Attemptstoscrubaninstanceofthenamedsitefromthesitetable.“““(site,comment)=self,stable[name]print"\t\tAttemptingtoscrubfirstincidenceofsite%s,sequence%s.“%(name,site)ifnotre.search(site,self,seq):print"\t\tNomatchesfoundforsite%s/r%(site)return〃nomatch"formatchinre.finditer(site,self,seq):print"\t\t\tSitefoundatpositions%sto%s.〃%(match,start(),match,end())scrubbed=self,scrub—site(site,match·start())ifscrubbed:return〃scrubbed"else:print"\t\t\tUnabletoremovesite,advancingtonextposition.“continueprint"\t\tMatchesnotfixablewithcurrentparameters.“return"failed"defscrub—sites(self):“““ScrubsDNAsitesoutofanoptimizedsequence.“““targets=self,sitecount(self,seq)scrubround=0failures=0while(targets>0andfailures<10):scrubround+=1print"\tRound%s,currentsitecountis%s."%(scrubround,targets)fornameinself,stable,keys():scrubbed=self,scrub—first—site(name)ifscrubbedis〃scrubbed":targets=self,sitecount(self,seq)breakelifscrubbedis〃nomatch":continueelse:failures+=1continueif(targets==0andfailures==0):returnTrueelse:returnFalse#Driverforsyntheticgenestatisticscreation###########################################ThisprogramisthepropertyofAthenixCorp.#Allrightsreserved#DanielJ.Tomso,programmer#Created:07-Mar_06###########################################Modified:07-Mar-06,DJT#Modified:09-Mar-06,DJT#Modified:12-Apr-06,DJT#Modified:13_Aug_08,DJT(refinedfornewESTdata,withcomplexityfilters)importfasta—classesimportsyngene_classesimportorf—classesimportsysimportredefcomplexityscore(seq):“““Calculatesacomplexityscoreforanaminoacidstretch,typicallyan0RF.“““score=0foriinrange(0,Ien(seq)-2):ifseq[i]==seq[i+l]:score-=1ifseq[i-l:i]==seq[i+l:i+2]:score-=1adjscore=score/float(len(seq))returnscore,adjscoredefleastcomplexwindow(seq,windowsize=20):〃〃〃Returnsthelowestestscoreforn-lengthsegmentsofthesequence.“““l(fā)eastscore=Oforiinrange(O,Ien(seq)-windowsize):score,adjscore=complexityscore(seq[i:i+windowsize])ifscore<leastscore:leastscore=scoreadjleastscore=leastscore/float(windowsize)returnleastscore,adjleastscoreinfile=sys.argv[l]#InputinFASTAformatsavefile=sys.argv[2]#Filenametosavestatdataintooorder=int(sys.argv[3])#Oligoorder—lengthofoligotouseinanalysisorfminlength=150of=orf—classes.OrfFinder(minlength=orfminlength)fp=fasta—classes·FastaParser(infile)ss=syngene—classes.SeqStats(order=oorder)orfcount=Ofailed=Opassed=Oforseqinfp:orfs=of.get_orfs(seq.sequence,require_atg=False,require_stop=False)fororfinorfs:iforfstrand']〈>'forward':failed+=1continuescore,adjscore=complexityscore(orf['aa—seq'])leastscore,adjleastscore=leastcomplexwindow(orf['aa—seq'])ifadjleastscore<-O.40oradjscore<-O.20:failed+=1continuepassed+=1print"%s\t%s\t%3.3f\t%s\t%3.3f\t%s\t%s〃%(orf['length'],score,adjscore,leastscore,adjleastscore,passed,failed)ss.add—seq(orf['dna_seq/])ss.update()ss.save(savefile)#Driverforsyntheticgeneoptimization###########################################ThisprogramisthepropertyofAthenixCorp.#Allrightsreserved#DanielJ.Tomso,programmer#Created:07-Mar_06###########################################Modified:07-Mar-06,DJT#Modified:08-Mar-06,DJT#Modified:09-Mar-06,DJT#Modified:13_Apr_06,DJT#Modified:26-Apr-06,DJT#Modified:27-Apr-06,DJT#Modified:28-Apr-06,DJT#Modified:17-May-06,DJTimportfasta—classesimportsyngene_classesimportorf—classesimportsysfromseq—handlerimportSeqHandler######Globals######scrub_orf—size=75#maximumacceptablesizeforalternativeORFsinsequencegc—target=0.50#setto1.00fornodrivedown#####ReportingRoutines#####defshow—sequence(opt—title,opt—seq,seqfile):printprint"Optimizedsequence:%s"%(opt—title)print"Initialscore:%4.2f\t0ptimizedscore:%4.2f,r%(ss.score(org—seq),ss.score(opt—seq))print"ImitialGCpercent:%3.2f\t0ptimizedGCpercent:%3.2f"%(ss·sh·gc(org—seq)*100,ss·sh·gc(opt—seq)*100)printfasta—classes·write(opt—title,opt—seq,seqfile)defcheck—sequence(org—seq,opt_seq,sh):org_aa=sh.tramslate(org_seq)opt_aa=sh.translate(opt_seq)iforg—aa〈>opt_aa:print"Optimizationerror!Mutationintroduced!〃sys.exit()#####MainProgram#####infile=sys.argv[l]#FASTAfileofsequencestooptimizestatfile=sys.argv[2]#Passinastatsfilecreatedbysyngene—builder,pyseqoutfile=sys.argv[3]#Passinafilenametowriteoutputsequencestoseqfile=open(seqoutfile,'a')sh=SeqHandler()fp=fasta—classes·Fastaparser(infile)forseqinfp:org—seq=seq.sequence,upper()ss=syngene—classes·SeqScrubber(org—seq,statfile,order=5)print"\n0ptimizingsequence%s…"%(seq.title)ss.optimize()check—sequence(org—seq,ss.sequence(),sh)print"\nAttemptingtoscrubspuriousORFs…“unscrubbed=ss.scrub—orfs()ifunscrubbed:print“\nWarning:%sunscrubbableORF(s)remain.“%(unscrubbed)check—sequence(org—seq,ss.sequence(),sh)print"\nAttemptingtoscrubdisallowedsites…”scrubbed=ss.scrub—sites()check—sequence(org—seq,ss.sequence(),sh)print"\nFinalcleanupinprogress…“ss.cleanup()check—sequence(org—seq,ss.sequence(),sh)opt—seq=ss.sequence()opt_title=seq.title+r_opt_fulTshow—sequence(opt_title,opt_seq,seqfile)print”\nAttemptingGCdrivedownto%2.3f...”%(gc—target)ss.drivedown—gc(gc—target).[1021]check—sequence(org—seq,ss.sequence(),sh)print"\nFinalcleanupinprogress…“ss.cleanup()check—sequence(org—seq,ss.sequence(),sh)opt—seq=ss.sequence()opt—title=seq.title+r—opt—%s'%(gc—target)show—sequence(opt_title,opt_seq,seqfile)seqfile.close0#Driverforsyntheticgeneoptimization,v2(protein-based)###########################################ThisprogramisthepropertyofAthenixCorp.#Allrightsreserved#DanielJ.Tomso,programmer#Created:18_Sep_07,fromsyngene_optimize.py###########################################Modified:18-S印-07,DJTimportfasta—classesimportsyngene_classesimportsysfromseq—handlerimportSeqHandler######Globals######scrub_orf—size=75#maximumacceptablesizeforalternativeORFsinsequencegc—target=0.50#setto1.00fornodrivedown#####ReportingRoutines#####defshow—sequence(opt—title,opt—seq,seqfile):printprint“Optimizedsequence:%s"%(opt—title)print“Optimizedscore:%4.2f/r%(ps·score(opt—seq))print”O(jiān)ptimizedGCpercent:%3.2f/r%(ps.sh.gc(opt—seq)★100)printfasta—classes,write(opt_title,opt_seq,seqfile)defcheck—sequence(org—seq,opt_seq,sh):opt_aa=sh.translate(opt_seq)iforg—seq〈>opt—aa:print"Optimizationerror!Mutationintroduced!“sys.exitQ[1060]#####MainProgram#####infile=sys.argv[l]#FASTAfileofsequencestooptimize,thisisnowaproteinstatfile=sys.argv[2]#Passinastatsfilecreatedbysyngene—builder,pyseqoutfile=sys.argv[3]#Passinafilenametowriteoutputsequencestoseqfile=open(seqoutfile,'a')sh=SeqHandler()fp=fasta—classes·FastaParser(infile)forseqinfp:org—seq=seq.sequence,upper()print〃\nGeneratinginitialoptimumnucleotidesequence...〃ps=syngene_classes.PSeqGenerator(org—seq,statfile,order=5,segmentsize=7)check—sequence(org—seq,ps.sequence(),sh)print"\n0ptimizingjunctionsandlowspots…“ss=syngene—classes·SeqScrubber(ps.sequence(),statfile,order=5)ss.optimize()reopt—seq=ss.sequence()print"\nAttemptingtoscrubspuriousORFs…“unscrubbed=ss.scrub—orfs()ifunscrubbed:print“\nWarning:%sunscrubbableORF(s)remain.“%(unscrubbed)check—sequence(org—seq,ss.sequence(),sh)print"\nAttemptingtoscrubdisallowedsites…”scrubbed=ss.scrub—sites()check—sequence(org—seq,ss.sequence(),sh)print"\nFinalcleanupinprogress…“ss.cleanup()check—sequence(org—seq,ss.sequence(),sh)opt—seq=ss.sequence()opt—title=seq.title+r—DNA'show—sequence(opt—title,opt—seq,seqfile)seqfile.close()實(shí)施例3.使用核苷酸序列生成優(yōu)化的基因序列以下實(shí)施例顯示了通過使用實(shí)施例2的這些算法以生成一個(gè)優(yōu)化基因序列的一個(gè)簡(jiǎn)化的日志文件。多個(gè)日志記錄被刪除并且用“數(shù)據(jù)未顯示”替換,它簡(jiǎn)單地指明進(jìn)行了類似的步驟但沒有在這個(gè)實(shí)施例中列出。在該實(shí)施例中顯示的序列列于表1中。優(yōu)化序歹Ijaxmi004_original...開始第1輪優(yōu)化。在位置1222處更新,寡聚物是TGAGA,初始得分是0.032,delta得分是4.664。在位置403處更新,寡聚物是TGAGA,初始得分是0.032,delta得分是4.134。(數(shù)據(jù)未顯示)在位置1138處更新,寡聚物是ACTTC,初始得分是0.127,delta得分是0.134。第1輪完成。序列得分是70.241(數(shù)據(jù)未顯示)開始第6輪優(yōu)化。在位置1561處更新,寡聚物是TGAGG,初始得分是0.091,delta得分是0.058。第6輪完成。序列得分是233.679開始第7輪優(yōu)化。第7輪完成。序列得分是233.679優(yōu)化完成。嘗試剔除假ORFs...第1輪,當(dāng)前ORF計(jì)數(shù)是10最大假ORF是354個(gè)氨基酸,從核苷酸824到1886。發(fā)現(xiàn)的解決方案TGCTG在位置1439處,delta是-0.204。(數(shù)據(jù)未顯示)第31輪,當(dāng)前ORF計(jì)數(shù)是2最大假ORF是75個(gè)氨基酸,從核苷酸406到631。發(fā)現(xiàn)的解決方案TGAGA在位置580處,delta是-0.037。嘗試剔除不允許的位置...第1輪,當(dāng)前位置計(jì)數(shù)是11。嘗試剔除位點(diǎn)hindIII的首次發(fā)生,序列AAGCTT。為位置AAGCTT沒有發(fā)現(xiàn)匹配(數(shù)據(jù)未顯示)嘗試剔除位點(diǎn)BbsI_RC的首次發(fā)生,序列GTCTTC。在位置1152到1158發(fā)現(xiàn)位點(diǎn)。發(fā)現(xiàn)的解決方案CGTGT在位置1151處,delta是-0.144最終清除進(jìn)行中...執(zhí)行清除掃描...在位置1340處改變,寡聚物是CAAAG,delta是0.636(數(shù)據(jù)未顯示)優(yōu)化的序列axmi004_original_opt_full初始得分-127.61優(yōu)化得分=219.30初始GC百分比34.92優(yōu)化的GC百分比55.59嘗試GC下降到0.500···[1134]掃描序列的可能改變...在位置1284處更新,寡聚物是GGATC,delta是-0.012,新GC百分比是55.54。在位置1625處更新,寡聚物是AAGAT,delta是-0.024,新GC百分比是55.48。(數(shù)據(jù)未顯示)在位置155處更新,寡聚物是ATTTG,delta是-0.363,新GC百分比是49.97。最終清除進(jìn)行中...執(zhí)行清除掃描...在位置1571處改變,寡聚物是TGGGC,delta是0.387(數(shù)據(jù)未顯示)優(yōu)化的序列axmi004_original_opt_0.5初始得分-127·61優(yōu)化的得分202·61初始GC百分比34.92優(yōu)化的GC百分比49.71實(shí)施例4.使用基于氨基酸序列的初步優(yōu)化步驟生成優(yōu)化的基因序列以下實(shí)施例顯示了通過使用實(shí)施例2的算法以便通過使用經(jīng)翻譯的氨基酸序列進(jìn)行初步優(yōu)化的步驟來生成一個(gè)優(yōu)化的基因序列而產(chǎn)生的簡(jiǎn)化日志文件。已經(jīng)刪除了多個(gè)日志記錄并且用“數(shù)據(jù)未顯示”替換,它簡(jiǎn)單地指明進(jìn)行了類似的步驟但沒有列于這個(gè)實(shí)施例中。在這個(gè)實(shí)施例中顯示的序列列于表1中。生成初始最佳核苷酸序列...在位置0處簡(jiǎn)并序列MSELKGK在位置7處簡(jiǎn)并序列FKKSTNR在位置14處簡(jiǎn)并序列TCCLLKI(數(shù)據(jù)未顯示)在位置623處簡(jiǎn)并序列EFIPVE優(yōu)化結(jié)合處以及低點(diǎn)...開始第1輪優(yōu)化。在位置1213處更新,寡聚物是CCTTC,初始得分是0.227,delta得分是2.248。在位置1048處更新,寡聚物是ACCGC,初始得分是0.027,delta得分是2.066。在位置1111處更新,寡聚物是CCAAC,初始得分是0.188,delta得分是1.600。(數(shù)據(jù)未顯示)在位置1129處更新,寡聚物是GGGAC,初始得分是-0.030,delta得分是0.032。第1輪完成。序列得分是235.396開始第2輪優(yōu)化。在位置1630處更新,寡聚物是ACAGG,初始得分是-0.049,delta得分是0.270。在位置328處更新,寡聚物是TCGAG,初始得分是0.126,delta得分是0.159。在位置1054處更新,寡聚物是TCACC,初始得分是0.137,delta得分是0.042。第2輪完成,序列得分是235.867開始第3輪優(yōu)化。在位置1056處更新,寡聚物是ACCTC,初始得分是0.196,delta得分是0.044。第3輪完成。序列得分是235.911[1170]開始第4輪優(yōu)化。[1171]第4輪完成。序列得分是235.911優(yōu)化完成。嘗試剔除假ORFs.··第1輪,當(dāng)前ORF計(jì)數(shù)是11最大假ORF是354個(gè)氨基酸,核苷酸從824到1886。發(fā)現(xiàn)的解決方案在位置1439處的TGCTG,delta是-0.700。第2輪,當(dāng)前ORF計(jì)數(shù)是12最大假ORF是306個(gè)氨基酸,核苷酸從1653到735。發(fā)現(xiàn)的解決方案在位置1167處的TCAAA,delta是-0.742。(數(shù)據(jù)未顯示)第25輪,當(dāng)前ORF計(jì)數(shù)是2最大假ORF是75個(gè)氨基酸,核苷酸從406到631。發(fā)現(xiàn)的解決方案在位置580處的TGAGA,delta是-0.037。嘗試剔除不允許位點(diǎn)...第1輪,當(dāng)前位置計(jì)數(shù)是11。嘗試剔除位點(diǎn)HindIII的首次發(fā)生,序列AAGCTT。對(duì)位點(diǎn)AAGCTT沒有發(fā)現(xiàn)匹配(數(shù)據(jù)未顯示)嘗試剔除位點(diǎn)BsmBl的首次發(fā)生,序列CGTCTC。在位置194到200發(fā)現(xiàn)位點(diǎn)。發(fā)現(xiàn)的解決方案在位置196處的TCAGC,delta是-0.439第2輪,當(dāng)前位置計(jì)數(shù)是10。嘗試剔除位點(diǎn)HindIII的首次發(fā)生,序列AAGCTT。對(duì)位置AAGCTT沒有發(fā)現(xiàn)匹配(數(shù)據(jù)未顯示)嘗試剔除位置PstI的首次發(fā)生,序列CTGCAG。在位置1188到1194發(fā)現(xiàn)位點(diǎn)。發(fā)現(xiàn)的解決方案在位置1189處的TCCAG,delta是-0.344(數(shù)據(jù)未顯示)第11輪,當(dāng)前位置計(jì)數(shù)是1。(數(shù)據(jù)未顯示)嘗試位置剔除位點(diǎn)BbsI_RC的首次發(fā)生,序列GTCTTC。在位置243到249發(fā)現(xiàn)位點(diǎn)。發(fā)現(xiàn)的解決方案在位置241處的TCGTG,delta是-0.493最終清除進(jìn)行中...執(zhí)行清除掃描...在位置629處改變,寡聚物是AATCA,delta是0.567(數(shù)據(jù)未顯示)[1208]在位置1852處改變,寡聚物是TTTAT,delta是0.112執(zhí)行清除掃描...優(yōu)化的序列axmi004_DNA[1211]優(yōu)化的得分222.40優(yōu)化的GC百分比57.02表1.在實(shí)施例3和4中描述的序列。<table>tableseeoriginaldocumentpage45</column></row><table>在本說明書中提及的所有出版物和專利申請(qǐng)都是表明本發(fā)明所屬領(lǐng)域內(nèi)的普通技術(shù)人員的水平的。所有出版物和專利申請(qǐng)均通過引用以相同的程度并入本文,就如同每單個(gè)的出版物或?qū)@暾?qǐng)是明確地并且單獨(dú)地指出通過引用并入本文。[1216]盡管出于理解清楚的目的通過闡明和實(shí)施例在一定程度上詳細(xì)地說明了以上發(fā)明,但是顯而易見的是可以在所附的權(quán)利要求的范圍內(nèi)進(jìn)行某些改變和修飾。權(quán)利要求一種優(yōu)化核苷酸序列的方法,包括a)提供一個(gè)感興趣的核苷酸序列;b)提供多個(gè)核苷酸序列的目標(biāo)數(shù)據(jù)庫(kù);c)匯編給定長(zhǎng)度N的所有可能的N-長(zhǎng)度核苷酸序列(NLS)的列表,其中N小于在該數(shù)據(jù)庫(kù)中最短的核苷酸序列的長(zhǎng)度,并且其中對(duì)于每個(gè)NLS而言N是常數(shù);d)對(duì)于在步驟(b)中提供的數(shù)據(jù)庫(kù),為在步驟(c)中所鑒定的每個(gè)NLS計(jì)算概率得分以生成NLS統(tǒng)計(jì)表;e)將該感興趣的核苷酸序列的每個(gè)N長(zhǎng)度的區(qū)域(NLR)鑒定為相應(yīng)的一個(gè)NLS集合,該NLS集合不改變?cè)摳信d趣的核苷酸序列編碼的氨基酸序列,其中不改變由該感興趣的核苷酸序列編碼的氨基酸序列的NLS被認(rèn)為是沉默的NLS(SNLS);并且,f)用SNLS來取代在該感興趣的核苷酸序列中的一個(gè)或多個(gè)NLR以生成優(yōu)化的序列。2.如權(quán)利要求1所述的方法,其中所述方法進(jìn)一步包括g)對(duì)在步驟(f)中生成的優(yōu)化序列進(jìn)行掃描以鑒定任何假可讀框(0RF);h)用破壞該假0RF的相應(yīng)的SNLS來取代該優(yōu)化序列中的一個(gè)或多個(gè)NLR;并且,i)任選地重復(fù)步驟(g)和(h)直至將所有假0RF從該序列中去除。3.如權(quán)利要求2所述的方法,其中所述方法進(jìn)一步包括j)對(duì)于該優(yōu)化序列設(shè)定目標(biāo)G:C含量;k)用一個(gè)相應(yīng)的SNLS來取代該優(yōu)化序列中的一個(gè)或多個(gè)NLR,該相應(yīng)的SNLS使得G:C含量更接近于該目標(biāo)G:C含量;并且,1)任選地重復(fù)步驟(g)和(h)直至達(dá)到目標(biāo)G:C含量。4.如權(quán)利要求1所述的方法,其中所述方法進(jìn)一步包括g)對(duì)在步驟(f)中生成的優(yōu)化序列進(jìn)行掃描以鑒定任何不令人希望的短DNA元件;h)用一個(gè)相應(yīng)的SNLS來取代該優(yōu)化序列中的一個(gè)或多個(gè)NLR,該相應(yīng)的SNLS去除了所述不令人希望的短DNA元件;并且,i)任選地重復(fù)步驟(g)和(h)直至從該序列中去除所有不令人希望的DNA元件。5.如權(quán)利要求4所述的方法,其中所述方法進(jìn)一步包括j)對(duì)于該優(yōu)化序列設(shè)定目標(biāo)G:C含量;k)用一個(gè)相應(yīng)的SNLS來取代該優(yōu)化序列中的一個(gè)或多個(gè)NLR,該相應(yīng)的SNLS使得G:C含量更接近于該目標(biāo)G:C含量;并且,1)任選地重復(fù)步驟(g)和(h)直至達(dá)到該目標(biāo)G:C含量。6.如權(quán)利要求2所述的方法,其中所述方法進(jìn)一步包括j)對(duì)在步驟(f)中生成的優(yōu)化序列進(jìn)行掃描以鑒定任何不令人希望的短DNA元件;k)用一個(gè)相應(yīng)的SNLS來取代該優(yōu)化序列中的一個(gè)或多個(gè)NLR,該相應(yīng)的SNLS去除了該不令人希望的短DNA元件;并且,1)任選地重復(fù)步驟(g)和(h)直至從該序列中去除所有不令人希望的DNA元件。7.如權(quán)利要求1所述的方法,其中所述方法進(jìn)一步包括g)對(duì)于該優(yōu)化序列設(shè)定一個(gè)目標(biāo)G:C含量;h)用相應(yīng)的SNLS來取代該優(yōu)化序列中的一個(gè)或多個(gè)NLR,該相應(yīng)的SNLS使得G:C含量更接近于該目標(biāo)G:C含量;并且,i)任選地重復(fù)步驟(g)和(h)直至達(dá)到所述目標(biāo)G:C含量。8.如權(quán)利要求6所述的方法,其中所述方法進(jìn)一步包括m)對(duì)于該優(yōu)化序列設(shè)定一個(gè)目標(biāo)G:C含量;η)用一個(gè)相應(yīng)的SNLS來取代該優(yōu)化序列中的一個(gè)或多個(gè)NLR,該相應(yīng)的SNLS使得G:C含量更接近于該目標(biāo)G:C含量;并且,ο)任選地重復(fù)步驟(g)和(h)直至達(dá)到該目標(biāo)G:C含量。9.一種優(yōu)化核苷酸序列的方法,包括a)提供感興趣的核苷酸序列;b)提供多個(gè)核苷酸序列的目標(biāo)數(shù)據(jù)庫(kù);c)匯編對(duì)于給定長(zhǎng)度N的所有可能的N-長(zhǎng)度核苷酸序列(NLS)的列表,其中N小于在該數(shù)據(jù)庫(kù)中最短的核苷酸序列的長(zhǎng)度,并且其中對(duì)于每個(gè)NLS而言N是常數(shù);d)相對(duì)于在步驟(b)中提供的數(shù)據(jù)庫(kù),為在步驟(c)中所鑒定的每個(gè)NLS計(jì)算概率得分以生成NLS統(tǒng)計(jì)表;e)將該整個(gè)感興趣的核苷酸序列翻譯成氨基酸序列;f)將該氨基酸序列分成多個(gè)鄰接的肽片段;g)建立對(duì)每個(gè)片段進(jìn)行編碼的所有核苷酸序列的集合,以便對(duì)每個(gè)片段生成一個(gè)簡(jiǎn)并序列的集合;h)用在步驟(d)中匯編的NLS統(tǒng)計(jì)表對(duì)每個(gè)簡(jiǎn)并核苷酸序列打分;i)選擇每個(gè)肽片段中最高分的核苷酸序列;j)按照在步驟(k)中所選擇的序列的順序進(jìn)行裝配以產(chǎn)生一個(gè)初步優(yōu)化的序列;k)將該初步優(yōu)化序列的每個(gè)N-長(zhǎng)度的區(qū)域(NLR)鑒定為相應(yīng)的NLS集合,該NLS集合不改變由該感興趣的核苷酸序列所編碼的氨基酸序列,其中不改變由該感興趣的核苷酸序列所編碼的氨基酸序列的NLS被認(rèn)為是沉默的NLS(SNLS);并且,1)用SNLS來取代在該感興趣的核苷酸序列中的一個(gè)或多個(gè)NLR以生成優(yōu)化的序列。10.如權(quán)利要求9所述的方法,其中所述方法進(jìn)一步包括m)對(duì)在步驟(f)中生成的優(yōu)化序列進(jìn)行掃描以鑒定任何假可讀框(ORF);η)用破壞該假ORF的相應(yīng)的SNLS來取代該優(yōu)化序列中的一個(gè)或多個(gè)NLR;并且,ο)任選地重復(fù)步驟(g)和(h)直至將所有假ORF從該序列中去除。11.如權(quán)利要求10所述的方法,其中所述方法進(jìn)一步包括P)對(duì)于該優(yōu)化序列設(shè)定目標(biāo)G:C含量;q)用相應(yīng)的SNLS來取代該優(yōu)化序列中的一個(gè)或多個(gè)NLR,該相應(yīng)的SNLS使得G:C含量更接近于該目標(biāo)G:C含量;并且,r)任選地重復(fù)步驟(g)和(h)直至達(dá)到該目標(biāo)G:C含量。12.如權(quán)利要求9所述的方法,其中所述方法進(jìn)一步包括m)對(duì)在步驟(f)中生成的優(yōu)化序列進(jìn)行掃描以鑒定任何不令人希望的短DNA元件;η)用相應(yīng)的SNLS來取代該優(yōu)化序列中的一個(gè)或多個(gè)NLR,該相應(yīng)的SNLS去除了該不令人希望的短DNA元件;并且,ο)任選地重復(fù)步驟(g)和(h)直至從該序列中去除所有不令人希望的DNA元件。13.如權(quán)利要求12所述的方法,其中所述方法進(jìn)一步包括P)對(duì)于該優(yōu)化序列設(shè)定目標(biāo)G:C含量;q)用相應(yīng)的SNLS來取代該優(yōu)化序列中的一個(gè)或多個(gè)NLR,該相應(yīng)的SNLS使得G:C含量更接近于該目標(biāo)G:C含量;并且,r)任選地重復(fù)步驟(g)和(h)直至達(dá)到該目標(biāo)G:C含量。14.如權(quán)利要求10所述的方法,其中所述方法進(jìn)一步包括P)對(duì)在步驟(f)中生成的優(yōu)化序列進(jìn)行掃描以鑒定任何不令人希望的短DNA元件;q)用相應(yīng)的SNLS來取代該優(yōu)化序列中的一個(gè)或多個(gè)NLR,該相應(yīng)的SNLS去除了該不令人希望的短DNA元件;并且,r)任選地重復(fù)步驟(g)和(h)直至從該序列中去除所有不令人希望的DNA元件。15.如權(quán)利要求9所述的方法,其中所述方法進(jìn)一步包括m)對(duì)于該優(yōu)化序列設(shè)定目標(biāo)G:C含量;n)用相應(yīng)的SNLS來取代該優(yōu)化序列中的一個(gè)或多個(gè)NLR,該相應(yīng)的SNLS使得G:C含量更接近于該目標(biāo)G:C含量;并且,0)任選地重復(fù)步驟(g)和(h)直至達(dá)到該目標(biāo)G:C含量。16.如權(quán)利要求14所述的方法,其中所述方法進(jìn)一步包括s)對(duì)于該優(yōu)化序列設(shè)定目標(biāo)G:C含量;t)用相應(yīng)的SNLS來取代該優(yōu)化序列中的一個(gè)或多個(gè)NLR,該相應(yīng)的SNLS使得G:C含量更接近于該目標(biāo)G:C含量;并且,u)任選地重復(fù)步驟(g)和(h)直至達(dá)到該目標(biāo)G:C含量。17.如權(quán)利要求1所述的方法,其中所述目標(biāo)數(shù)據(jù)庫(kù)對(duì)感興趣的生物是特異的。18.如權(quán)利要求1所述的方法,其中所述N-長(zhǎng)度是在4到10之間。19.如權(quán)利要求18所述的方法,其中所述N-長(zhǎng)度在5到7之間。20.評(píng)價(jià)感興趣的核苷酸序列在感興趣的生物中表達(dá)的適合度的方法,包括a)提供多個(gè)核苷酸序列的一個(gè)目標(biāo)數(shù)據(jù)庫(kù),其中所述數(shù)據(jù)庫(kù)由對(duì)該感興趣的生物特異的多個(gè)序列構(gòu)成;b)匯編對(duì)于給定長(zhǎng)度N的所有可能的N-長(zhǎng)度核苷酸序列(NLS)的列表,其中N小于在該數(shù)據(jù)庫(kù)中最短的核苷酸序列的長(zhǎng)度,并且其中對(duì)于每個(gè)NLS而言N是常數(shù);c)相對(duì)于在步驟(a)中提供的數(shù)據(jù)庫(kù),對(duì)在步驟(b)中所鑒定的每個(gè)NLS計(jì)算概率得分以生成NLS統(tǒng)計(jì)表;d)鑒定該感興趣的核苷酸序列中的每個(gè)NLR;e)從步驟(d)中鑒定的一個(gè)或多個(gè)位置讀取NLS;f)使用該NLS統(tǒng)計(jì)表來鑒定在步驟(e)中所鑒定的一個(gè)或多個(gè)NLS的概率得分;g)計(jì)算該整個(gè)核苷酸序列或其一部分的總得分;其中該核苷酸序列或其一部分的得分指示了該序列在感興趣的生物中表達(dá)的適合度。全文摘要本發(fā)明是針對(duì)用于設(shè)計(jì)對(duì)感興趣的多肽進(jìn)行編碼的合成的核苷酸序列的方法。這些方法涉及將序列的數(shù)據(jù)庫(kù)組織為N-長(zhǎng)度的寡聚體序列的集合并且匯編了針對(duì)每個(gè)N-長(zhǎng)度序列的概率得分的列表。使用這些概率得分將一個(gè)或多個(gè)更高得分的序列替換進(jìn)入該親本核苷酸序列之中以生成優(yōu)化的序列。通過去除無意的可讀框或不令人希望的短DNA元件之一或兩者、和/或取代寡聚體序列以達(dá)到特定的GC含量可以進(jìn)一步優(yōu)化所感興趣的核苷酸序列。這些方法可以在任何生物中、特別是植物中用于優(yōu)化異源基因的表達(dá)。該方法生成了合成序列,其組成類似于目標(biāo)數(shù)據(jù)庫(kù)的組成。例如,這些合成的序列可以用于在生物中、特別是在植物或植物細(xì)胞中調(diào)節(jié)殺蟲活性或除草劑耐受性。文檔編號(hào)G06F19/00GK101821744SQ200880110786公開日2010年9月1日申請(qǐng)日期2008年10月9日優(yōu)先權(quán)日2007年10月9日發(fā)明者D·J·湯姆索申請(qǐng)人:阿森尼克斯公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
高平市| 诏安县| 靖安县| 尼勒克县| 吴堡县| 株洲县| 深水埗区| 利辛县| 哈巴河县| 涿州市| 延寿县| 瑞丽市| 祥云县| 石柱| 象州县| 包头市| 东光县| 兴城市| 新密市| 元阳县| 右玉县| 西充县| 会宁县| 土默特右旗| 泰安市| 甘肃省| 天峨县| 定远县| 北辰区| 清原| 博湖县| 驻马店市| 济宁市| 鄂托克前旗| 治多县| 轮台县| 巴东县| 壶关县| 成都市| 安义县| 武邑县|