新四季網

合成基因設計的計算方法

2023-05-02 21:15:56 2


專利名稱::合成基因設計的計算方法
技術領域:
:本發明涉及用於諸如植物等異源生物體中表達的合成基因的設計方法,包括計算機實現的方法,也包括用於執行本發明方法的計算機系統。
背景技術:
:如植物細胞的異源宿主中的外源基因表達已很難,並經常無法獲得產品的可檢測的表達(Fischhoff等(1987)生物/技術5:807_813;Vaeck等(1987)自然328:33_37)。對貧乏表達的解釋包括加工位點的偶然存在,導致在轉基因宿主細胞中非功能mRNA轉錄物;相較於原始宿主在植物中不同的密碼子使用;以及在基因序列的GC含量和由此產生的初級RNA轉錄物中的不同。沿著雙螺旋結構的雙鹼基組成DNA結構。眾所周知,不同生物體的總DNA具有四種核苷酸腺嘌呤(A)、胸苷(T)、鳥苷(G)以及胞苷(C)的不同分布。在DNA螺旋結構中,腺嘌呤和胸苷通過氫鍵結合形成一個「鹼基對」(「AT鹼基對」)。同樣,鳥苷僅和胞苷形成鹼基對(「GC鹼基對」)。這種AT鹼基對與GC鹼基對的比例通常被稱為「GC含量」,其為由GC鹼基對(相對於AT鹼基對)構成的總鹼基對的百分比。同樣,「AT含量」是指AT鹼基對構成的鹼基對的百分比。GC含量不僅在不同生物體中不同,而且在基因組的DNA不同區域中不同,甚至在例如植物基因的一個基因的不同區域中不同。植物內含子有大約70%AT(30%GC)含量,而外顯子有大約50%AT(50%GC)含量(Wiebauer等(1988)Mol.CellBiol.8:2042_2051)。由於在植物中表達蘇雲金芽孢桿菌(Bt)殺蟲劑蛋白的困難性,各種在轉錄植物中較高水平表達的合成基因已被設計。Adang等(美國專利號5380831,6015891)描述了設計合成Bt殺蟲蛋白以在植物中具有增強的表達,通過修飾基因以包含高水平表達的植物基因優選的密碼子進行所述設計。根據在被高水平表達的植物基因中所用的密碼子使用分布頻率來選擇密碼子使用。Adang等(美國專利號5567600)進一步描述了類似的方法,其中修飾包括減少在植物多腺苷酸化信號之間區域中的密碼子位置II和III中具有GC的密碼子數量。備選地,修飾可導致較少地發生序列AATGAA(SEQIDNO:1)。Fischhoff等(美國專利號5500365)揭示了修飾的Bt基因,其移除了植物多腺苷酸化序列以及ATTTA(SEQIDNO2)序列。Koziel等(美國專利號6320100)揭示了為在植物中優化表達而選擇的合成Bt殺蟲蛋白,其使用的密碼子在玉米中最頻繁地編碼每一胺基酸,並具有60%的GC含量。發明概述提供了產生編碼感興趣的多肽的合成核苷酸序列的方法。這些方法如下產生優化的合成基因序列計算在DNA序列資料庫中的連續短核苷酸區段的發生概率,並且然後使用這些概率通過用高概率序列代替在候選轉基因中的低概率核苷酸序列來產生合成序列。這優選不改變編碼蛋白質的胺基酸序列來完成。重要地是,此統計方法能夠產生轉基因,其經優化在目標生物體表達而不需要在目標生物體中的加工位點或其他表達決定因素的特定知識。這些方法包括⑴序列資料庫的開發;(2)選擇一連續核苷酸長度(「N長度」)作為優化(「N長度寡核苷酸」)的基礎;(3)組織序列資料庫作為N長度寡聚物序列集合;(4)選擇一輸入序列;(5)為輸入序列開發沉默NLSs(「SNLS」)集合;以及(6)在SNLS的選擇中優化以生成一被優化的基因序列。這些方法可以備選地或另外包括移除不期望的可讀框,和/或修飾感興趣的核苷酸序列以移除不期望的短的共有核苷酸序列,和/或所得優化基因獲得期望的GC含量,而不考慮密碼子使用。本發明的方法可用於產生在生物體、特別是植物和細菌中理想表達的核苷酸序列以提供殺蟲或除草劑耐抗性活性。這些生物體被期望用於農業目的。本發明的方法可用於產生具有殺蟲或除草劑抗性活性的改變的或改進的蛋白質,或者用於檢測在產品或生物體中殺蟲或除草劑抗性蛋白質或胺基酸的存在。圖1所示為NLRs,NLS以及delta表之間關係的圖示。此圖中的A,B,C,D以及E代表了在長度為5(N=5)的核苷酸區域中的假定位置。此圖示出可為該NLR生成的NLSs的子集。因此,對於所有長度為5的NLRs,有4』個可能的NLSs(在位置A處為A,T,G,或C;在位置B處為A,T,G,或C;等等)。圖2所示為NLSs的確定的圖例。發明詳述合成基因設計的先前方法通常分為兩類。第一類使用諸如多聚腺苷酸化信號的加工信號的特定知識來設計在目標生物體具有更高表達概率的轉基因(例如FischhofT等)。此策略僅被應用於這種加工信號的特定實驗性知識是可用的情況下。另外,被表達基因的加工決定因素的不完整的知識會導致轉基因的不當修飾,導致目標生物體中較少或沒有表達。第二類方法完全依賴於密碼子偏倚和/或GC含量修正以改進轉基因表達(例如Koziel等,Adang等),而不管高級DNA序列決定因素(如ATTTA,AATGAA)的重要作用的充分證據。本發明描述了設計編碼感興趣的多肽的合成核苷酸序列的方法。所述方法包括(1)組織一序列資料庫作為N長度寡聚物序列集(「NLSs」)的集合;(2)通過確定和編譯所有可能NLSs群體間的每一NLS的被觀察到的概率生成一NLS統計表;(3)為感興趣的序列產生NLRs集合;(4)確定沒有破壞可讀框的NLSs(「沉默NLSs」,或者「SNLS」)的集合;以及(5)優化在SLNS集合之間的選擇以生成被優化的核苷酸序列。在本發明的另一方面,分析和調整感興趣的核苷酸序列以移除下面兩者或其中之一(1)非期望的可讀框或者(2)非期望的短DNA元件。「非期望的0RF」是不同於親本序列且通過用本發明的方法修飾序列而來的0RF。「非期望的短DNA元件」包括引入目標生物體非理想表達結構的DNA序列。短DNA元件的示例在本文別處討論。這些方法可用於優化任何生物體、特別是植物中的異源基因的表達。此方法生成合成基因,其組成與目標資料庫的相似。這些合成基因可被用於,例如在生物體、尤其是在植物或植物細胞中調節殺蟲活性或除草劑抗性。定義為了清楚地理解本發明,給出如下定義「合成」的意思是不在自然界發生。為了本發明的目的,合成序列不意在包含通過自然發生突變而生成或通過化學或生物機制如位點定向誘變誘導的突變而來的序列。在一些實施方案中,合成核苷酸序列是或是指在它整個或絕大部分編碼區域被化學地合成。化學合成核苷酸序列的方法在本領域中已知(參見,例如Ausubel等,編著。分子生物中的現代協議(2000)第8.2B章節,卷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%的相對於親本序列的核苷酸位置與天然發生的親本序列不相同。要認識到核苷酸序列可以在序列一定區域內被優化,其序列剩餘部分相對於親本序列保持不變。為了本發明的目的,術語「合成的核苷酸序列」以及「優化的核苷酸序列」可互換使用。「N長度區域」,或「NLR」表示對應於感興趣的核苷酸序列的一個區域的長度為N的連續核苷酸序列。例如,一個NLR可以是從大約1到大約100的核苷酸長度,或者是從大約2到大約50,或從大約3到大約40,或從大約4到大約30,或從大約5到大約20,或從大約6到大約15,或者大約10的核苷酸長度。在一些實施方案中,NLR在長度上大於或小於3個核苷酸。「N長度序列」或者「NLS」表示任何N長度的連續核苷酸序列。對於任何給定的優化運行,每一NLS的長度等於每一NLR的長度。如圖1所示。在此例中,感興趣的核苷酸序列被12個核苷酸代表,並且每一NLR長度為5個核苷酸。因此,每一NLR的每一NLS也是5個核苷酸長度。可以理解這裡描述的方法能夠被用於從單個感興趣的核苷酸序列生成單個優化的序列,以及從單個感興趣的核苷酸序列生成多個不同的優化序列。產生多個不同被優化的序列時,在每一個優化運行中一個或多個優化參數被改變以使不同被優化的序列從運行中產生。一個這樣可被改變的參數就是NLS和NLR中「N」所代表的值。這裡揭示的方法的步驟在隨後的模塊中進行闡述。模塊Α,開發目標資料庫本發明的方法需要一個核苷酸序列目標資料庫。「目標資料庫」可為一個或多個核苷酸序列的任何資料庫,例如GENBΑΝΚ核苷酸資料庫,某一屬或種特定的序列資料庫(如玉米特定的資料庫,黃豆特定的資料庫,動物特定的數據如人,實驗,或農業動物特定的資料庫等),或者特定用戶相關的傳統核苷酸序列資料庫。在一個實施方式中,目標資料庫包括所感興趣的有機體的編碼序列的集合。序列資料庫可被組織為任何形式或文件類型,例如以FASTA格式文件的文件形式,或者以計算機可讀形式的序列文件的文件夾形式。模塊B,組織作為N長度寡聚物序列集的資料庫在本發明的此方面,以NLS統計表(或者「NLSStatsTable")的形式從目標資料庫中組織數據。通過設置「N」長以及確定資料庫中代表每一可能N長度片段的頻率生成NLS統計表。N的值可基於目標資料庫的容量(即所有在該資料庫中的序列)任意選擇。通常地,長些的NLR序列比短些的NLR序列捕獲更多的信息,但NLS統計表條目數目被序列長度控制,並且過長的表會減緩算法執行以及降低統計精確度。一個空NLS統計表通過首先列出每一個η長度的可能序列而生成。例如,對於η=5,NLS統計表會有1024個條目(AAAAA,AAAAC,AAAAG.··TTTTT(分別地,SEQIDNO:3_6)。NLS統計表可通過計算資料庫中所代表的每一NLS計數次數而被編譯,例如通過使用「滑動窗口」算法掃描資料庫中每一個序列。備選地,NLS統計表可通過使用任何其他統計學上合理策略被編譯,例如從資料庫中隨機抽樣短序列。滑動窗口算法在本領域中是已知的。在一個實施方案中,算法通過一次滑動一個或多個核苷酸而在目標資料庫中沿著每一序列移動以編譯NLSs列表。例如,在一個假定目標資料庫(包括由AGTGCAAGTACGTAA(SEQIDNO7)所代表的核苷酸序列,其中N被設為5)中,第一個NLS是AGTGC,第二個NLS是GTGCA,第三個NLS是TGCAA,等等。在目標資料庫中的每一個序列被編譯為NLSs集。滑動窗口算法計算來自空NLS統計表的每一NLS在資料庫中代表的次數。例如,算法掃描所有序列並計算NLS「AAAAA」,NLS「AAAAC」,NLS「AAAAG」出現在資料庫中的次數等等。此原始計數被在資料庫中觀測的NLSs總數相除以得到一個觀測頻率值。對於每一NLS,計算概率得分,其代表每一NLS相對於在目標資料庫中期望發生頻率的觀測頻率。在一個例子中,將概率得分轉變為對數概率得分並且等於Iogltl[資料庫中NLS觀測頻率/資料庫中NLS期望頻率]。期望頻率的計算方法可不同。在一方面,每一核苷酸被認為同樣可能。在這種情況下期望頻率將為0.25N,其中N是上述NLR/NLS指定的長度。因此,對於在前提及的5-merNLS(AGTGC),其期望頻率將為0.25n=0.0098。在另一實施方案中,基於目標資料庫中每一核苷酸相對頻率的一個頻率被使用。每一核苷酸的相對頻率被計算作為目標資料庫(對於該核苷酸的「資料庫頻率」)中整個所有序列(全體地)中的核苷酸G,C,T和A的分數表示。在這種情況下,為每一N長度序列計算NLS的期望頻率通過(1)對於NLS每一位置,記錄該位置(A,G,C,或T)上代表的核苷酸的資料庫頻率;以及然後(2)計算那些資料庫頻率乘積以為整個NLS生成期望頻率。例如,如果整個資料庫基本組成是A=0.20,G=0.30,T=0.20,C=0.30,NLS「AGTGC,,的期望頻率將為0.2X0.3X0.2X0.3X0.2=0.00072。在資料庫中特定NLS觀測頻率大於被計算的期望頻率的情況下,被觀測/被期望的比率大於1並且對數概率得分是正數。在觀測頻率小於期望頻率的情況下,該比值小於1並且對數概率得分是負數。因此,對於每一NLS,正的對數概率意味著NLS比統計學上期望的更頻繁地被觀測到,並且負的對數概率意味著NLS比統計學上期望的更加不經常地被觀測到。在給定NLS沒有在資料庫中被觀測的情況下(即觀測頻率為0),使用近似值。在一個例子中,觀測頻率設為[1/1+資料庫中被觀測的NLSs總數]。在另一個例子中,選擇低於NLS統計表中最低觀測頻率的任意值。從而,未被觀測的NLSs典型地相對於被觀測的NLSs具有非常低的概率得分。記分模塊在本發明的一方面,模塊B被用於評估特定序列(或多個序列)與NLS統計表的適合度。例如,感興趣的序列可被掃描以尋找低得分區域,或者計算整個序列的累積得分。此累積得分可被用於,例如比較編碼相同胺基酸的兩個不同核苷酸序列以確定哪一個序列更適於在目標生物體中表達。儘管不被任何特定的理論或機制所束縛,可提議具有低得分區域優勢的序列(或具有更低累積得分序列)比具有更高得分區域優勢的序列(或具有更高累積得分序列)在目標生物體中有更低水平的表達。一種評估序列與NLS統計表的適合度的方法包括a.提供一NLS統計表(如為目標生物體的NLS統計表,感興趣的序列在其中被表達);b.識別感興趣序列中的每一個NLR,例如使用如上所述的滑動窗口算法;c.為每一NLR讀出在該位置的NLS;d.使用NLS統計表尋找在步驟b和c鑑定的每一NLS的對數概率得分。該NLS概率值被用作為在感興趣序列中每一NLR位置的概率值。e.對所有NLR位置的對數概率得分求和以為感興趣的序列生成一個總得分。注意求和的對數得分與基礎(非對數)概率值相乘是等同的。f.該方法為整個序列提供一個累積得分。另一種評估序列與NLS統計表的適合度的方法涉及在感興趣的較大序列中尋找低得分片段。此低得分片段可代表轉基因表達的重要障礙,或者足以破壞表達。該方法包括a.細分一感興趣的序列為更小的片段。這些片段可重疊。例如,一個IOOObp序列可被分為多個50bp片段;b.使用與上述相似的方法對這樣鑑定每一片段記分;c.為每一片段記錄分值;d.對在該序列中等同於最低計值的片段的全序列賦予一個分值。模塊C.優化模塊當感興趣的核苷酸序列是一感興趣蛋白質的編碼序列時,評估每一給定NLR的所有可能列表以及鑑定那些不破壞可讀框和/或經編碼的胺基酸序列(即關於蛋白質翻譯是「沉默的」)的NLSs將是必要的。這裡所涉及的這些NLSs集合稱作沉默NLSs列表或「SNLS」。在本發明的一方面,SNLS列表通過使用感興趣的整個序列作為翻譯和評估的基礎來生成。該方法包括a.對於感興趣序列中的每一NLR,在該位點上將每個可能的NLS取代初始的感興趣的序列。例如,對於η=5,存在1024個可能的序列(AAAAA,AAAAC,AAAAG...ΤΤΤΤΤ)。b.將整個感興趣的初始序列以及新生成的取代序列翻譯成胺基酸序列。c.比較兩個胺基酸序列。如果兩個翻譯是相同的,取代被認為是沉默的並且在這一輪用到的NLS被加到針對那個NLR位置的SNLS列表。d.在評估每一可能NLS後,該位置的SNLSs列表被完成。在本發明的另一個方面,SNLS列表通過執行僅僅有限的翻譯和在被檢查NLR的附近進行比較來被生成。該方法相對於上文所述的方法在計算上是優選的。該方法包括a.為感興趣序列中的每一NLR,建立NLR周圍的翻譯框內窗口。這如下完成通過在5'和/或3'方向擴展NLR,使得i)區域長度變為3倍(以適應遺傳密碼的三聯體性質),並且ii)擴展區域的開始位置與初始全長序列(即親本序列)的翻譯框架在框內。b.使用對應於擴展區域的親本序列作為基礎序列,在對應於步驟a中起始NLR的位置上將每個可能的NLS取代該基礎序列。c.翻譯初始基礎序列以及新生成的取代序列至胺基酸序列。e.比較兩個胺基酸序列。如果兩個翻譯是相同的,該取代被認為是沉默的並且將在該輪中使用的NLS加到針對那個NLR位置的SNLS列表中。f.在評估每一可能NLS後,該位置的SNLS的列表完成。在本發明的另一個方面,SNLS列表通過首先為每一NLR創建翻譯的肽,而後從所有可編碼翻譯的肽的簡併核苷酸序列集合中選擇SNLS成員而被生成。該方法包括a.為感興趣序列中的每一NLR,在其周圍建立一可翻譯的框內窗口。這如下完成在5'和/或3'方向擴展NLR,使得i)區域長度變為3倍(以適應遺傳密碼的三聯體性質),並且ii)擴展區域的開始位置與初始全長序列的翻譯框架在框內。b.使用對應於擴展區域的親本序列作為基礎序列,生成一目標胺基酸序列(即翻譯該區域的初始核苷酸序列)。c.生成編碼目標胺基酸序列的所有核苷酸序列集合。由於遺傳密碼的冗餘性,該序列集被認為是「簡併的」。d.從簡併的序列集合,識別並記錄在對應於步驟a中初始NLR的位置中的N-長度序列。e.在步驟d中識別的所有NLSs列表,減去任何重複就是該位置的SNLS列表。下一步,使用該NLS統計表對每個SNLS的得分賦予分值,並且對每個SNLS計算delta得分。「delta得分」或「Δ」代表感興趣的核苷酸序列的NLR初始序列與每一對應SNLS之間概率得分的差異(Δ=沉默-初始)。因此,正delta得分指示了SNLS相比初始序列更類似於目標資料庫中的序列(具有更高概率得分),並且delta得分的幅度對應於在目標資料庫中觀測的偏差度。然後,對於每一NLR,SNLSs列表按delta得分從最高到最低排序。為個別的NLR生成的SNLSs列表在這裡被稱作該特定NLR的「對應SNLS列表」。這樣,每一NLR都有其自己對應的SNLS列表。為了優化序列,通常的策略是用具有最大delta得分的SNLS代替每一NLR的初始NLS0這些取代的淨效果是使得初始序列的總體組成更接近於目標資料庫中的序列組成。與此同時,初始序列的低得分子片段被更高得分片段所代替,而保留整個序列的初始翻譯。一個執行該模塊步驟的示例算法可包括如下步驟1)為操作序列,設置序列作為「輸入序列」。2)基於用於該NLS統計表的N-長度來開發在該輸入序列中所有NLR位置的列表。典型地,在一個序列中存在著[L-N+1]個NLR位置,其中L是該初始序列的長度。3)為每一NLR生成一個相應SNLSs列表。4)通過檢查每一對應SNLSs列表為整個序列選擇最高得分SNLS(如有最高delta得分的SNLS)。在相同delta得分的情況下,最5』位置被首先使用。5)為具有最高得分SNLS的NLR,將該NLR序列設定為對應於最高計分SNLS的序列。6)暫時地「鎖定」與剛剛改變的位置重疊的任何NLR,包括自身改變的NLR。要求這個步驟來防止「翻轉」或其中一個單一的限定區域通過重疊取代被改變回去的其他循環過程。在該輪優化的剩餘部分的過程中被鎖定的NLR不被認為是NLS取代。然而,它們在隨後的循環中被解鎖以允許該序列的全部優化。7)從剩餘的解鎖NLR的列表以及對應的SNLS列表中選擇該整個序列的最高計分SNLS。8)重複步驟5至7直到序列中的每一個NLR處於(1)被鎖定,或(2)已經包含其位置最高得分SNLS。在此,優化的一個循環完成。9)解鎖整個序列。10)使用上面描述的NLS統計表為整個序列生成得分。11)從步驟1開始重複優化步驟,使用先前循環的序列作為輸入序列。12)繼續重複步驟1至11(即執行順序優化循環)直到兩個連續的循環產生同樣的得分序列。這表明無進一步優化可能。13)從最後循環中輸出序列作為「完全優化的序列」。在本發明的另一方面中,直接從經翻譯的親本序列的胺基酸序列中進行初步的一輪優化。這種方法包括a.將該整個親本序列翻譯成一個胺基酸序列。b.將該整個經翻譯的基因分成多個鄰接的肽段。每個肽段的長度可以在從1個胺基酸至經翻譯的基因的整個長度之間(其中每一段是相同長度的)。用現有計算機系統優選大約3至大約10個胺基酸的長度。c.對於每個肽段,產生對該片段進行編碼的所有核苷酸序列的一個集合(一個簡併序列的集合)。d.使用該目標資料庫生成的NLS統計表來對因此生成的每個簡併核苷酸序列進行計分(參見模塊B)。使用在以上說明的「計分模塊」中披露的方法來計算該得分用於序列的子段計分。e.對每個肽片段選出最大計分的核苷酸序列並且按順序裝配這些序列。f.通過以上說明的額外的優化作用來通過該初步裝配的序列。在隨後的任選的過程中(模塊D和E),進一步分析並調節從模塊C得到的優化序列以去除任何無意的可讀框或不令人希望的短DNA序列。模塊D.去除不令人希望的短DNA序列在本發明的一個方面中,從該優選的序列中去除代表或據信能夠代表不理想特徵的某些短DNA序列。此類短DNA序列可以包括某些限制性酶識別序列、多腺苷酸化序列、5』和/或3』剪接識別位點、等等。這些元件可以由特定的使用者進行定義。在本發明的一方面中,通過掃描不令人希望的元件的序列並且用不同的NLS從與這些短序列重疊的NLR替換NLS、從而破壞該短核苷酸序列,從該核苷酸序列中去除此類短DNA序列。優選地,用對總得分具有最低影響的NLS取代與該不令人希望的元件相重疊的NLS0在本文其他地方討論了計算總分的方法。在編碼DNA序列的優化作用的情況下,只允許SNLS取代,並且不允許引入假(即,無意的)0RF的取代。典型地重複這個循環,直至沒有不令人希望的位點留下,儘管可能沒有必要去除每個不令人希望的序列。短DNA序列的去除典型地是在根據本文中模塊A、B和C的優化過程中或之後進行的,或可以在這些模塊中任一者的缺失下進行。在本發明的一個方面中,可以將特定的不令人希望的序列(如多腺苷酸化位點)從一個優化序列中去除。按照這種方式,在這種知識是可獲得的情況下,該方法可以實現大體上的優化以及特異性位點校正。多腺苷酸化位點的實例包括但不限於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}植物特異性多腺苷酸化位點說明於Joshi(1987)NucleicAcidsRes.15:9627_9640和Rothnie(1996)PlantMoI.Biol.32:43_61中。原核多腺苷酸化位點討論於Sarkar(1997)Annu.Rev.Biochem.66:173_197中。聚合酶終止信號包括但不限於(CAN)7-9AGTNNAA(參見,例如VankanandFilipowicz(1988)EMBOJ.7791-799)。共有的剪接位點包括但不限於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)。剪接位點最恆定的殘基是5『-GT和3'-AG。這個優化的核苷酸序列也可以通過用NLS進行取代來進行進一步修飾,這些NLS具有生成穩定的RNA二級結構的更低概率。此類二級結構包括但不限於髮夾環(轉折結構)。能夠形成髮夾環的序列包括但不限於CUUCGG(SEQIDNO:27)和UCUUCGG(SEQIDNO:28)(參見,例如Tuerketal.(1988)Proc.Natl.Acad.Sci.U.S.Α.851364-1368)。此外,該優化序列可以通過消除不需要的短核苷酸共有序列(如限制性核酸內切酶的識別位點、多腺苷酸化序列、5』和3』剪接識別序列等)的發生進行進一步優化。模塊Ε.去除額外的ORF在本發明的另一方面中,從該優化序列中去除不編碼感興趣的蛋白質的可讀框(ORF)。這種不令人希望的或「假的」ORF是通過用破壞該假ORF的NLS替換在假ORF內部的NLR位置上的NLS而實現的。「內部NLR」是落在該假ORF的邊界內的NLR,如該感興趣的序列的全框翻譯所鑑定。在這個實施方案中,針對假ORF的存在對該序列進行掃描。下一步,鑑定在假ORF內部的NLR位置。對在這些NLR位置上的SNLS取代進行評估,並且基於如以上說明的δ得分選出破壞該假ORF的那些SNLS取代。典型地,選擇了對總得分具有最低影響的SNLS。因為只考慮了SNLS,選擇在不中斷該初始ORF的同時破壞任何假ORF的取代。可以將這個循環重複以生成越來越完美的優化序列,或直至去除具有長度大於約1000、約900、約800、約700、約600、約500、約400、約300、約200、約100、或大於約75個核苷酸的假ORF。模塊F.GC含量的優化在本發明的又一個方面中,可以進一步改變該優化的核苷酸序列以調節該優化序列的GC含量。通過用具有不同GC含量的NLS取代在NLR上的NLS可以實現該改變。不應當允許引入假ORF或不令人希望的短DNA序列的取代。在一個實例中,檢查了所有NLR上的所有可能的SNLS,並且鑑定出當改變淨GC含量時對總得分具有最小影響的那些SNLS。用如以上說明的鎖定進行反覆取代,直至該基因的總GC含量達到一個目標閾值,例如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%。在一個實施方案中,該優化核苷酸序列的GC含量是均勻遍及該整個核苷酸序列的。通過「均勻遍及」一詞,該核苷酸序列是要指該全長優化序列的任何定義的子段的GC含量具有一個GC含量,該GC含量類似於該全長優化序列的任何其他定義子段的GC含量。通過「類似於」該GC含量,它是要指參比子段的GC含量是在大約20%內、大約19%內、大約15%內、大約10%內、大約9%內、大約8%內、大約7%內、大約6%內、大約5%內、大約4%內、大約3%內、大約2%內、大約1%內,或小於相比較的參比部分的亞部分的GC含量。計算機實現的方法以上說明的用於生成合成的核苷酸序列的方法可以通過使用電腦程式或計算機實現的方法來全部或部分地進行。本發明的電腦程式和電腦程式產品包括計算機可用的介質,其在其中存儲控制邏輯,用於使計算機生成對感興趣的多肽進行編碼的合成的核苷酸序列。在一個實施方案中,該電腦程式包括計算機可用的介質,在其中存儲有控制邏輯,用於使計算機生成NLS統計表,該控制邏輯包含用於使該計算機接受通過輸入裝置輸入的外部信息的第一代碼,其中該外部信息包括DNA序列的資料庫以及η長度的指定值。控制邏輯也被稱作計算機可讀的和/或計算機可執行的代碼。在另一個實施方案中,該電腦程式包括計算機可用的介質,在其中存儲控制邏輯,用於使計算機生成對感興趣的多肽進行編碼的優化的核苷酸序列,該控制邏輯包括用於使該計算機接受通過輸入裝置輸入的外部信息的第一代碼,其中該外部信息包括NLS統計表、以及有待優化的核苷酸序列。控制邏輯也被稱作計算機可讀和/或計算機可執行的代碼。在另一個實施方案中,該電腦程式包括計算機可用的介質,在其中存儲有控制邏輯,用於使計算機生成對感興趣的多肽進行編碼的優化的核苷酸序列,該控制邏輯包括用於使該計算機接受通過輸入裝置輸入的外部信息的第一代碼,其中該外部信息包括優化的核苷酸序列的DNA序列、以及一個較不希望的DNA和蛋白序列的集合(例如,在本文的其他地方披露的短的不令人希望的DNA序列)。控制邏輯也被稱作計算機可讀取和/或計算機可執行的代碼。在另一個實施方案中,該電腦程式包括計算機可用的介質,在其中存儲控制邏輯,用於使計算機生成對感興趣的多肽進行編碼的合成(「優化」)的核苷酸序列,該控制邏輯包括使該計算機接受通過輸入裝置輸入的外部信息的第一代碼,其中該外部信息包括DNA序列的資料庫、η-長度的一個指定值、以及針對其開發一個或多個優化基因的一個胺基酸序列;用於使該計算機從輸入中生成NLS統計表的第二代碼;用於開發NLR集合的第三代碼、用於確定不破壞該可讀框(「沉默NLSs」或「SNLS」)的這個NLS集合的第四代碼、以及用於優化SNLS裝配中的選擇以得到優化的基因序列的第五代碼。用於生成對感興趣的多肽進行編碼的合成的核苷酸序列的本發明的計算機系統包括處理器(進行運算以確定、接受,檢查、並顯示數據)、與所述處理器相連接用於存儲數據的存儲器、與所述處理器相連接用於顯示數據的顯示裝置、與所述處理器相連接用於輸入外部數據的輸入裝置;以及一個具有至少兩種所述處理器可執行的操作模式的計算機可讀的腳本。計算機可讀取腳本可以是一個電腦程式或本發明的一個實施方案的電腦程式產品的控制邏輯。對於本發明而言以任何具體的計算機語言來寫這個電腦程式或在任何特定類型的計算機系統或作業系統上操作不是關鍵性的。例如,可以用C++、Java,Perl、Python、Ruby、Pascal、或Basic程式語言來編寫這個電腦程式。應當理解,可以用多種不同的程式語言之一來產生這個程序。在本發明的一個方面中,寫出該程序以便在使用Linux作業系統的計算機上運行。在本發明的另一方面中,寫出該程序以便在使用MSWindows或MacOS作業系統的計算機上運行。本領域的技術人員應當理解根據本發明可以按任何順序或同時執行代碼,只要該順序符合邏輯流。在一個實施方案中,該計算程序具有對於使用者插入所希望的胺基酸序列的一個輸入空間、以及顯示生成的核苷酸序列的一個輸出空間。在一個實施方案中,該電腦程式具有一種編輯模式,其中可以如使用者所希望修改對於每個NLR選擇每個NLS的概率。用於優化的核苷酸序列對於感興趣的多肽進行編碼的任何核苷酸序列可以生成合成(或「優化的」)的核苷酸序列,包括但不限於對殺蟲蛋白、除草劑耐受性蛋白、真菌耐受性蛋白、水解酶類(包括改變植物穀物中糖類、蛋白質、或脂類/油的量和/或性質的酶類)、品質性狀、或任何其他感興趣的蛋白質進行編碼的序列。殺蟲蛋白包括S-內毒素蛋白,如來自蘇雲金芽孢桿菌中的那些蛋白。通過「殺蟲」一詞是要指帶來至少一種害蟲死亡或明顯地減少害蟲生長、攝食、或正常生理髮育的能力。「殺蟲」化合物是一種具有抗昆蟲種類中的害蟲的活性的化合物。「除草劑耐受性蛋白」或從「編碼除草劑耐受的核酸分子」的表達中得到的蛋白包括多種蛋白質,它們與不表達該蛋白的細胞相比賦予細胞耐受更高濃度的除草劑的能力、或與不表達該蛋白的細胞相比耐受一定濃度的除草劑更長時間的能力。以下實施例是通過闡明方式但不作為限制來提供的。實驗實施例1.使用一個5級統計模型優化在玉蜀黍中表達的細菌δ內毒素基因步驟1:識別並且收集玉蜀黍cDNA序列(模塊A)。從公共資源(例如GENBANK)中收集有待在玉蜀黍中表達的本領域內已知的編碼區域的序列。這些序列由mRNA、cDNA、或代表這些編碼序列的基因組片段組成。按照需要,對這些序列進行編輯以去除非編碼區(優選地通過在該序列群體中識別可讀框(ORF)區域)。步驟2用N=5生成針對玉蜀黍cDNA序列的NLS統計表。使用如在模塊B中所說明的一個5鹼基滑動序列窗對來自玉蜀黍的序列進行分析。生成了由所有可能的5鹼基序列組成的一個表,並且記錄了來自步驟1的在玉蜀黍序列集合中觀察到的每個5鹼基序列的計數。將觀察到的計數除以觀察到的5-鹼基序列的總數生成原始頻率值。將觀察到的原始頻率值除以預期的頻率值以生成在玉蜀黍序列集合中所有5鹼基序列(NLS)的觀察預期的比率。使用水平分布模型來定義該實例中的預期頻率(即,每個NLS(5鹼基序列)在1,024個可能的NLS(5鹼基DNA序列)中被認為相同的可能性)。得到的表被稱為NLS統計表。觀察預期的比率被認為是近似於觀察到的5鹼基序列中每一個的發生概率。步驟3.用高概率序列替換在細菌δ內毒素基因中的低概率5鹼基序列(NLS)。通過滑動窗分析來確定候選的δ內毒素基因(Axmi004;披露於在2003年3月18日提交的美國專利申請10/739,610中)以確定在該基因中每個5鹼基序列(NLS其中N=5)的相對相似性。所有的基因序列核苷酸位置是根據它們在玉蜀黍中發生的概率升序排序的,在這種情況下使用來自步驟2的NLS統計表進行近似。從最低概率序列位置開始,通過在不破壞該基因閱讀框或向該基因胺基酸序列(SNLS)中引入突變的位置上識別所有可能的NLS(5鹼基取代)來生成一個沉默取代的集合。在每個位置上,用具有最高玉蜀黍觀察預期比率(在NLS統計表中最高位次)的5鹼基沉默取代(SNLS)取代現有的5鹼基序列。如在模塊C中(以上)所說明的重複該循環並且重複幾輪,直至增加該基因序列的淨可能性的額外的沉默變化是不可能的。得到的序列被認為是初步優化的基因。步驟4.從該初步優化的基因中去除假0RF。通過用如以上在模塊D中所說明的SNLS(5-鹼基序列)替換在該初步優化基因(5鹼基序列)中的NLS,從該初步優化基因中去除不編碼該感興趣基因的0RF。選出破壞任何識別的假可讀框而不中斷該初始可讀框的取代(在這種情況下,Axmi004蛋白)。重複該循環直至在產生一個「剔除ORF的優化基因」的優化的基因中沒有大於75個胺基酸的假可讀框被保留。步驟5.從該剔除ORF的初步優化基因中去除不令人希望的短DNA序列。通過用如以上在模塊E中所說明的SNLS(5鹼基序列)替換在該初步優化基因中的NLS,從該初步優化的基因中去除對不令人希望的特徵(包括限制性酶識別序列)進行編碼的短DNA序列。不允許引入假的ORF的取代。重複該循環直至沒有留下不令人希望的位點,得到一個完全優化的基因。步驟6.生成具有降低的GC含量的變體全優化基因。通過用如以上在模塊F中所說明的SNL(5鹼基序列)取代在該全優化基因中的NLSs來生成全優化基因的變體。不允許引入假可讀框或不令人希望的短DNA序列的取代。評價所有可能的沉默取代,並且鑑定對觀察預期的比率具有最小影響同時仍降低淨GC含量的那些沉默取代。以這種方式反覆進行取代直至使該基因的總GC含量低於50.0%的目標閾值。該序列被認為是低於50%GC的優化基因。實施例2以下算法提供了用於實施本發明的方法的算法的函數集合的一個實例。#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—oligosself·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,upperforiinrange(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,upperscore=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.closeprint"Datasavedto%s"%(filename)defload(self,filename):"""SimplepickleroutinetoloadN-orderstatdatafromfile.「「「loadfile=open(filename,'r')(self,order,self.oligo_count,self,oligos,self.oligo_stats)=pickle.Ioad(Ioadfile)loadfile.closeclassSiteManager:"""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=SeqHandlerself,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)ifbeginself,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)ifbeginself,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_aaorg_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(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—tableself,changedsites=[]skeys=self·opt—table·keysskeys.sort(cmp=lambdax,y:cmp(self.opt_table[y],self.opt_table[x]))maxdelta=self.opt_table[skeys]#largestobserveddeltaintheopttableifmaxdelta0.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=1whileroundhigh—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=highend:#smallorf,needslightlylargerintervalcenter=lowpos+(highpos-lowpos)/2bmax=center+intsize/2bmin=center-intsize/2ifbmaxhighend: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,Falseotherwise.「「「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—orf1:scrubround+=1print"\tRound%s,currentORFcountis%s"%(scrubround,orfcount)scrubbed=self,scrub—largest—orfifnotscrubbed: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:ifpdeltaseq—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=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)ifbeginIen(sequence):end=Ien(sequence)dna=sequence[begin:end]returndnadefscrub_site(self,site,position):〃〃〃Scubsasinglesitefromadesignatedpositioninthesequence.「「「offset=self,order-1scrubstart=position-offsetifscrubstartself,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.「「「leastscore=Oforiinrange(O,Ien(seq)-windowsize):score,adjscore=complexityscore(seq[i:i+windowsize])ifscore'forward':failed+=1continuescore,adjscore=complexityscore(orf['aa—seq'])leastscore,adjleastscore=leastcomplexwindow(orf['aa—seq'])ifadjleastscore<-O.40oradjscoreopt_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=SeqHandlerfp=fasta—classes·Fastaparser(infile)forseqinfp:org—seq=seq.sequence,upperss=syngene—classes·SeqScrubber(org—seq,statfile,order=5)print"\n0ptimizingsequence%s…"%(seq.title)ss.optimizecheck—sequence(org—seq,ss.sequence,sh)print"\nAttemptingtoscrubspuriousORFs…「unscrubbed=ss.scrub—orfsifunscrubbed:print「\nWarning:%sunscrubbableORF(s)remain.「%(unscrubbed)check—sequence(org—seq,ss.sequence,sh)print"\nAttemptingtoscrubdisallowedsites…」scrubbed=ss.scrub—sitescheck—sequence(org—seq,ss.sequence,sh)print"\nFinalcleanupinprogress…「ss.cleanupcheck—sequence(org—seq,ss.sequence,sh)opt—seq=ss.sequenceopt_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.cleanupcheck—sequence(org—seq,ss.sequence,sh)opt—seq=ss.sequenceopt—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」OptimizedGCpercent:%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=SeqHandlerfp=fasta—classes·FastaParser(infile)forseqinfp:org—seq=seq.sequence,upperprint〃\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.optimizereopt—seq=ss.sequenceprint"\nAttemptingtoscrubspuriousORFs…「unscrubbed=ss.scrub—orfsifunscrubbed:print「\nWarning:%sunscrubbableORF(s)remain.「%(unscrubbed)check—sequence(org—seq,ss.sequence,sh)print"\nAttemptingtoscrubdisallowedsites…」scrubbed=ss.scrub—sitescheck—sequence(org—seq,ss.sequence,sh)print"\nFinalcleanupinprogress…「ss.cleanupcheck—sequence(org—seq,ss.sequence,sh)opt—seq=ss.sequenceopt—title=seq.title+r—DNA'show—sequence(opt—title,opt—seq,seqfile)seqfile.close實施例3.使用核苷酸序列生成優化的基因序列以下實施例顯示了通過使用實施例2的這些算法以生成一個優化基因序列的一個簡化的日誌文件。多個日誌記錄被刪除並且用「數據未顯示」替換,它簡單地指明進行了類似的步驟但沒有在這個實施例中列出。在該實施例中顯示的序列列於表1中。優化序歹Ijaxmi004_original...開始第1輪優化。在位置1222處更新,寡聚物是TGAGA,初始得分是0.032,delta得分是4.664。在位置403處更新,寡聚物是TGAGA,初始得分是0.032,delta得分是4.134。(數據未顯示)在位置1138處更新,寡聚物是ACTTC,初始得分是0.127,delta得分是0.134。第1輪完成。序列得分是70.241(數據未顯示)開始第6輪優化。在位置1561處更新,寡聚物是TGAGG,初始得分是0.091,delta得分是0.058。第6輪完成。序列得分是233.679開始第7輪優化。第7輪完成。序列得分是233.679優化完成。嘗試剔除假ORFs...第1輪,當前ORF計數是10最大假ORF是354個胺基酸,從核苷酸824到1886。發現的解決方案TGCTG在位置1439處,delta是-0.204。(數據未顯示)第31輪,當前ORF計數是2最大假ORF是75個胺基酸,從核苷酸406到631。發現的解決方案TGAGA在位置580處,delta是-0.037。嘗試剔除不允許的位置...第1輪,當前位置計數是11。嘗試剔除位點hindIII的首次發生,序列AAGCTT。為位置AAGCTT沒有發現匹配(數據未顯示)嘗試剔除位點BbsI_RC的首次發生,序列GTCTTC。在位置1152到1158發現位點。發現的解決方案CGTGT在位置1151處,delta是-0.144最終清除進行中...執行清除掃描...在位置1340處改變,寡聚物是CAAAG,delta是0.636(數據未顯示)優化的序列axmi004_original_opt_full初始得分-127.61優化得分=219.30初始GC百分比34.92優化的GC百分比55.59嘗試GC下降到0.500···[1134]掃描序列的可能改變...在位置1284處更新,寡聚物是GGATC,delta是-0.012,新GC百分比是55.54。在位置1625處更新,寡聚物是AAGAT,delta是-0.024,新GC百分比是55.48。(數據未顯示)在位置155處更新,寡聚物是ATTTG,delta是-0.363,新GC百分比是49.97。最終清除進行中...執行清除掃描...在位置1571處改變,寡聚物是TGGGC,delta是0.387(數據未顯示)優化的序列axmi004_original_opt_0.5初始得分-127·61優化的得分202·61初始GC百分比34.92優化的GC百分比49.71實施例4.使用基於胺基酸序列的初步優化步驟生成優化的基因序列以下實施例顯示了通過使用實施例2的算法以便通過使用經翻譯的胺基酸序列進行初步優化的步驟來生成一個優化的基因序列而產生的簡化日誌文件。已經刪除了多個日誌記錄並且用「數據未顯示」替換,它簡單地指明進行了類似的步驟但沒有列於這個實施例中。在這個實施例中顯示的序列列於表1中。生成初始最佳核苷酸序列...在位置0處簡併序列MSELKGK在位置7處簡併序列FKKSTNR在位置14處簡併序列TCCLLKI(數據未顯示)在位置623處簡併序列EFIPVE優化結合處以及低點...開始第1輪優化。在位置1213處更新,寡聚物是CCTTC,初始得分是0.227,delta得分是2.248。在位置1048處更新,寡聚物是ACCGC,初始得分是0.027,delta得分是2.066。在位置1111處更新,寡聚物是CCAAC,初始得分是0.188,delta得分是1.600。(數據未顯示)在位置1129處更新,寡聚物是GGGAC,初始得分是-0.030,delta得分是0.032。第1輪完成。序列得分是235.396開始第2輪優化。在位置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輪優化。在位置1056處更新,寡聚物是ACCTC,初始得分是0.196,delta得分是0.044。第3輪完成。序列得分是235.911[1170]開始第4輪優化。[1171]第4輪完成。序列得分是235.911優化完成。嘗試剔除假ORFs.··第1輪,當前ORF計數是11最大假ORF是354個胺基酸,核苷酸從824到1886。發現的解決方案在位置1439處的TGCTG,delta是-0.700。第2輪,當前ORF計數是12最大假ORF是306個胺基酸,核苷酸從1653到735。發現的解決方案在位置1167處的TCAAA,delta是-0.742。(數據未顯示)第25輪,當前ORF計數是2最大假ORF是75個胺基酸,核苷酸從406到631。發現的解決方案在位置580處的TGAGA,delta是-0.037。嘗試剔除不允許位點...第1輪,當前位置計數是11。嘗試剔除位點HindIII的首次發生,序列AAGCTT。對位點AAGCTT沒有發現匹配(數據未顯示)嘗試剔除位點BsmBl的首次發生,序列CGTCTC。在位置194到200發現位點。發現的解決方案在位置196處的TCAGC,delta是-0.439第2輪,當前位置計數是10。嘗試剔除位點HindIII的首次發生,序列AAGCTT。對位置AAGCTT沒有發現匹配(數據未顯示)嘗試剔除位置PstI的首次發生,序列CTGCAG。在位置1188到1194發現位點。發現的解決方案在位置1189處的TCCAG,delta是-0.344(數據未顯示)第11輪,當前位置計數是1。(數據未顯示)嘗試位置剔除位點BbsI_RC的首次發生,序列GTCTTC。在位置243到249發現位點。發現的解決方案在位置241處的TCGTG,delta是-0.493最終清除進行中...執行清除掃描...在位置629處改變,寡聚物是AATCA,delta是0.567(數據未顯示)[1208]在位置1852處改變,寡聚物是TTTAT,delta是0.112執行清除掃描...優化的序列axmi004_DNA[1211]優化的得分222.40優化的GC百分比57.02表1.在實施例3和4中描述的序列。tableseeoriginaldocumentpage45在本說明書中提及的所有出版物和專利申請都是表明本發明所屬領域內的普通技術人員的水平的。所有出版物和專利申請均通過引用以相同的程度併入本文,就如同每單個的出版物或專利申請是明確地並且單獨地指出通過引用併入本文。[1216]儘管出於理解清楚的目的通過闡明和實施例在一定程度上詳細地說明了以上發明,但是顯而易見的是可以在所附的權利要求的範圍內進行某些改變和修飾。權利要求一種優化核苷酸序列的方法,包括a)提供一個感興趣的核苷酸序列;b)提供多個核苷酸序列的目標資料庫;c)彙編給定長度N的所有可能的N-長度核苷酸序列(NLS)的列表,其中N小於在該資料庫中最短的核苷酸序列的長度,並且其中對於每個NLS而言N是常數;d)對於在步驟(b)中提供的資料庫,為在步驟(c)中所鑑定的每個NLS計算概率得分以生成NLS統計表;e)將該感興趣的核苷酸序列的每個N長度的區域(NLR)鑑定為相應的一個NLS集合,該NLS集合不改變該感興趣的核苷酸序列編碼的胺基酸序列,其中不改變由該感興趣的核苷酸序列編碼的胺基酸序列的NLS被認為是沉默的NLS(SNLS);並且,f)用SNLS來取代在該感興趣的核苷酸序列中的一個或多個NLR以生成優化的序列。2.如權利要求1所述的方法,其中所述方法進一步包括g)對在步驟(f)中生成的優化序列進行掃描以鑑定任何假可讀框(0RF);h)用破壞該假0RF的相應的SNLS來取代該優化序列中的一個或多個NLR;並且,i)任選地重複步驟(g)和(h)直至將所有假0RF從該序列中去除。3.如權利要求2所述的方法,其中所述方法進一步包括j)對於該優化序列設定目標G:C含量;k)用一個相應的SNLS來取代該優化序列中的一個或多個NLR,該相應的SNLS使得G:C含量更接近於該目標G:C含量;並且,1)任選地重複步驟(g)和(h)直至達到目標G:C含量。4.如權利要求1所述的方法,其中所述方法進一步包括g)對在步驟(f)中生成的優化序列進行掃描以鑑定任何不令人希望的短DNA元件;h)用一個相應的SNLS來取代該優化序列中的一個或多個NLR,該相應的SNLS去除了所述不令人希望的短DNA元件;並且,i)任選地重複步驟(g)和(h)直至從該序列中去除所有不令人希望的DNA元件。5.如權利要求4所述的方法,其中所述方法進一步包括j)對於該優化序列設定目標G:C含量;k)用一個相應的SNLS來取代該優化序列中的一個或多個NLR,該相應的SNLS使得G:C含量更接近於該目標G:C含量;並且,1)任選地重複步驟(g)和(h)直至達到該目標G:C含量。6.如權利要求2所述的方法,其中所述方法進一步包括j)對在步驟(f)中生成的優化序列進行掃描以鑑定任何不令人希望的短DNA元件;k)用一個相應的SNLS來取代該優化序列中的一個或多個NLR,該相應的SNLS去除了該不令人希望的短DNA元件;並且,1)任選地重複步驟(g)和(h)直至從該序列中去除所有不令人希望的DNA元件。7.如權利要求1所述的方法,其中所述方法進一步包括g)對於該優化序列設定一個目標G:C含量;h)用相應的SNLS來取代該優化序列中的一個或多個NLR,該相應的SNLS使得G:C含量更接近於該目標G:C含量;並且,i)任選地重複步驟(g)和(h)直至達到所述目標G:C含量。8.如權利要求6所述的方法,其中所述方法進一步包括m)對於該優化序列設定一個目標G:C含量;η)用一個相應的SNLS來取代該優化序列中的一個或多個NLR,該相應的SNLS使得G:C含量更接近於該目標G:C含量;並且,ο)任選地重複步驟(g)和(h)直至達到該目標G:C含量。9.一種優化核苷酸序列的方法,包括a)提供感興趣的核苷酸序列;b)提供多個核苷酸序列的目標資料庫;c)彙編對於給定長度N的所有可能的N-長度核苷酸序列(NLS)的列表,其中N小於在該資料庫中最短的核苷酸序列的長度,並且其中對於每個NLS而言N是常數;d)相對於在步驟(b)中提供的資料庫,為在步驟(c)中所鑑定的每個NLS計算概率得分以生成NLS統計表;e)將該整個感興趣的核苷酸序列翻譯成胺基酸序列;f)將該胺基酸序列分成多個鄰接的肽片段;g)建立對每個片段進行編碼的所有核苷酸序列的集合,以便對每個片段生成一個簡併序列的集合;h)用在步驟(d)中彙編的NLS統計表對每個簡併核苷酸序列打分;i)選擇每個肽片段中最高分的核苷酸序列;j)按照在步驟(k)中所選擇的序列的順序進行裝配以產生一個初步優化的序列;k)將該初步優化序列的每個N-長度的區域(NLR)鑑定為相應的NLS集合,該NLS集合不改變由該感興趣的核苷酸序列所編碼的胺基酸序列,其中不改變由該感興趣的核苷酸序列所編碼的胺基酸序列的NLS被認為是沉默的NLS(SNLS);並且,1)用SNLS來取代在該感興趣的核苷酸序列中的一個或多個NLR以生成優化的序列。10.如權利要求9所述的方法,其中所述方法進一步包括m)對在步驟(f)中生成的優化序列進行掃描以鑑定任何假可讀框(ORF);η)用破壞該假ORF的相應的SNLS來取代該優化序列中的一個或多個NLR;並且,ο)任選地重複步驟(g)和(h)直至將所有假ORF從該序列中去除。11.如權利要求10所述的方法,其中所述方法進一步包括P)對於該優化序列設定目標G:C含量;q)用相應的SNLS來取代該優化序列中的一個或多個NLR,該相應的SNLS使得G:C含量更接近於該目標G:C含量;並且,r)任選地重複步驟(g)和(h)直至達到該目標G:C含量。12.如權利要求9所述的方法,其中所述方法進一步包括m)對在步驟(f)中生成的優化序列進行掃描以鑑定任何不令人希望的短DNA元件;η)用相應的SNLS來取代該優化序列中的一個或多個NLR,該相應的SNLS去除了該不令人希望的短DNA元件;並且,ο)任選地重複步驟(g)和(h)直至從該序列中去除所有不令人希望的DNA元件。13.如權利要求12所述的方法,其中所述方法進一步包括P)對於該優化序列設定目標G:C含量;q)用相應的SNLS來取代該優化序列中的一個或多個NLR,該相應的SNLS使得G:C含量更接近於該目標G:C含量;並且,r)任選地重複步驟(g)和(h)直至達到該目標G:C含量。14.如權利要求10所述的方法,其中所述方法進一步包括P)對在步驟(f)中生成的優化序列進行掃描以鑑定任何不令人希望的短DNA元件;q)用相應的SNLS來取代該優化序列中的一個或多個NLR,該相應的SNLS去除了該不令人希望的短DNA元件;並且,r)任選地重複步驟(g)和(h)直至從該序列中去除所有不令人希望的DNA元件。15.如權利要求9所述的方法,其中所述方法進一步包括m)對於該優化序列設定目標G:C含量;n)用相應的SNLS來取代該優化序列中的一個或多個NLR,該相應的SNLS使得G:C含量更接近於該目標G:C含量;並且,0)任選地重複步驟(g)和(h)直至達到該目標G:C含量。16.如權利要求14所述的方法,其中所述方法進一步包括s)對於該優化序列設定目標G:C含量;t)用相應的SNLS來取代該優化序列中的一個或多個NLR,該相應的SNLS使得G:C含量更接近於該目標G:C含量;並且,u)任選地重複步驟(g)和(h)直至達到該目標G:C含量。17.如權利要求1所述的方法,其中所述目標資料庫對感興趣的生物是特異的。18.如權利要求1所述的方法,其中所述N-長度是在4到10之間。19.如權利要求18所述的方法,其中所述N-長度在5到7之間。20.評價感興趣的核苷酸序列在感興趣的生物中表達的適合度的方法,包括a)提供多個核苷酸序列的一個目標資料庫,其中所述資料庫由對該感興趣的生物特異的多個序列構成;b)彙編對於給定長度N的所有可能的N-長度核苷酸序列(NLS)的列表,其中N小於在該資料庫中最短的核苷酸序列的長度,並且其中對於每個NLS而言N是常數;c)相對於在步驟(a)中提供的資料庫,對在步驟(b)中所鑑定的每個NLS計算概率得分以生成NLS統計表;d)鑑定該感興趣的核苷酸序列中的每個NLR;e)從步驟(d)中鑑定的一個或多個位置讀取NLS;f)使用該NLS統計表來鑑定在步驟(e)中所鑑定的一個或多個NLS的概率得分;g)計算該整個核苷酸序列或其一部分的總得分;其中該核苷酸序列或其一部分的得分指示了該序列在感興趣的生物中表達的適合度。全文摘要本發明是針對用於設計對感興趣的多肽進行編碼的合成的核苷酸序列的方法。這些方法涉及將序列的資料庫組織為N-長度的寡聚體序列的集合併且彙編了針對每個N-長度序列的概率得分的列表。使用這些概率得分將一個或多個更高得分的序列替換進入該親本核苷酸序列之中以生成優化的序列。通過去除無意的可讀框或不令人希望的短DNA元件之一或兩者、和/或取代寡聚體序列以達到特定的GC含量可以進一步優化所感興趣的核苷酸序列。這些方法可以在任何生物中、特別是植物中用於優化異源基因的表達。該方法生成了合成序列,其組成類似於目標資料庫的組成。例如,這些合成的序列可以用於在生物中、特別是在植物或植物細胞中調節殺蟲活性或除草劑耐受性。文檔編號G06F19/00GK101821744SQ200880110786公開日2010年9月1日申請日期2008年10月9日優先權日2007年10月9日發明者D·J·湯姆索申請人:阿森尼克斯公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀