Bước 3: Sắp xếp lại các dòng của ma trận theo thứ tự từ điển
Hình 2.6 Chuỗi BWT Thu được bằng cách sắp xếp ma trận L * L theo thứ tự từ điển
Cột cuối của ma trận (kí hiệu L) là chuỗi chuyển đổi BWT cần tìm
BWT(“ATGTAC$”) = “CT$ATGA”
Bước 4: Trích xâu từ các kí từ cuối ở mỗi dịng, thơng báo xâu này và cho biết từ gốc là thứ tự thứ mấy trong ma trận nhận được ở bước 2.
Ta có kết quả („CT$ATGA‟,4). Xâu CT$ATGA chính là xâu để thực hiện tìm kiếm trong các bước tiếp theo.
Tuy nhiên, thay vì sử dụng khơng gian O (n2) để lưu trữ ma trận L * L như đã đươ ̣c đề xuất thì ta có thể tạo ra một mảng R[1. . . n] tham chiếu đến các xâu đã được quay trongvăn bản đầu vào T.
Khởi tạo R[i]=i với i = (1, n) để biểu diễn danh sách chưa được sắp xếp . Sau đó nó được sắp xếp bằng cách sử dụng xâu con bắt đầu tại T[R[i]] như là khóa so sánh.
xuất hiện trước đó).
Ƣu điểm: Sự phân cụm này làm cho quá trình tìm kiếm trở nên tập trung theo
từng kí tự và trở nên dễ dàng hơn
Nhƣơ ̣c điểm: Do chuyển đổi Burrows Wheeler làm việc theo phương pháp từng
khới (block-wise), vì vậy nó khơng thể xử lý văn bản theo từng ký tự một , mà phải đọc một khối (thường là hàng chu ̣c KB ) và sau đó nén nó . Điều này không có mô ̣t giới hạn với hầu hết các mục đích, nhưng khơng loa ̣i trừ mơ ̣t sớ ứng du ̣ng phải xử lý dữ liệu xen chương trình chạy (on-the-fly) khi nó đến. Mục đích quan trọng khác là văn bản phải được săp xếp.
Trong suốt luâ ̣n văn này, ta giả thiết viê ̣c sắp thứ tự duy nhất trên các ký tự hoă ̣c các biểu tượng trong văn bản để các xâu con có thể được so sánh bằng các thuậtto án sắp xếp.
Ngoài ra một nhược điểm lớn của phương pháp trên là dung lượng bộ nhớ tốn kém khi phải lưu trữ và sắp xếp ma trận xoay vịng L*L. Văn bản X càng có độ dài lớn thì phương pháp trên càng không khả thi khi thực hiện trên thực tế. Do vậy phương pháp trên đã được cải tiến như sau:
Phƣơng pháp cải tiến:
Bƣớc 1: Cho xâu ban đầu là X. Điền kí tự “$” vào cuối xâu X
Bƣớc 2: Xâu nhận được được hoán vị xoay vịng, đồng thời xóa các kí tự sau kí tự
“$” trong mỗi xâu mới nhận được.
Bƣớc 3: Thực hiện sắp xếp lại các chuỗi nhận được theo thứ tự chữ cái.
X[SA[i] – 1] nếu SA[i] > 0
“$” nếu SA[i] = 0
Ví dụ: X = “agcagcagact”
Bƣớc 1: Thêm kí tự “$” vào cuối xâu X, ta nhận được: X = “agcagcagact$
Bƣớc 2: Xâu nhận được được hốn vị xoay vịng, đồng thời xóa các kí tự sau kí tự “$”
trong mỗi xâu mới nhận được.
Bƣớc 3,4 : Sắp xếp lại các chuỗi nhận được theo thứ tự từ điển. Nhận được mảng SA[]
Hình 2.9 Tính chuỗi chuyển đổi BWT
Như vậy, phương pháp cải tiến để tính tốn chuỗi chuyển đổi BWT tối ưu hơn về mặt thời gian chạy cũng như không gian nhớ.
2.3.2 Chuyển đổi Burrows-Wheeler nghi ̣ch Input: Chuỗi chuyển đổi BWT của văn bản X Input: Chuỗi chuyển đổi BWT của văn bản X Output: Khôi phục lại văn bản X ban đầu
thường hai mảng chỉsố O (n) sẽ cần thiết , cộng với hai mảng O (|Σ|) để đếm các ký tự trong đầu vào. Có nhiều cách để thực hiện viê ̣c giải mã.
Thuật toán chuyển đổi nghịch được thực hiện qua các bước đơn giản như sau: Bước 1: Lấy các kí tự trong xâu cuối cùng , sắp xếp lại theo thứ tự từ điển Bước 2: (Lặp)
- Lấy các kí tự ở xâu cuối cùng, thêm vào các xâu đã có. - Sắp xếp lại theo thứ tự từ điển
Hình 2.10 Minh họa việc giải mã BWT xâu „CT$ATGA‟
Thuật toán kết thúc khi xâu nhận được có đủ độ dài L và xâu văn bản đầu vào là văn bản nhận được cuối cùng khi có kí tự kết thúc “$”. Theo ví dụ trên, văn bản đầu vào tìm được là xâu “ATGTAC$” ở vị trí thứ 2.
Mã giả của phương pháp giải mã:
Def inverseBWT(s):
B = [s1, s2, s3, …., sn]
For I = 1 …n:
Input: Xâu kí tự W, văn bản X
Output: vị trí xuất hiện của xâu W trong văn bản X
Phân tích ví dụ sau: Tìm kiếm những vị trí xuất hiện của chuỗi kí tự W = “gca” trong chuỗi X = “agcagcagact”
B1: Lấy chuỗi kí tự BWT theo phương pháp đã hướng dẫn ở phần trên: Ví dụ:
+ Chuỗi gốc ban đầu: X = “agcagcagact”
+ Thêm kí tự đặc biêt “$” vào làm kí tự kết thúc của chuỗi X: X = “agcagcagact$”
+ Lấy các chuỗi xoay vòng của X, sắp xếp các chuỗi theo thứ tự từ điển + Lấy giá trị kí tự của cột cuối cùng là chuỗi BWT thu được
B2: Tìm kiếm chuỗi W=“gca” trong chuỗi ban đầu X = “agcagcagact$”
Đánh giá: Dựa vào ma trận xoay vòng L * L ta thấy : tất cả các lần xuất hiện
của 1 chuỗi con trong ma trận xoay vịng L*L đều xuất hiện bên cạnh nhau (vì ma trận L*L nhận được là ma trận đã được sắp xếp theo thứ tự từ điển).
Ví dụ: Kí tự “a” xuất hiện trong khoảng hàng [1,4] của ma trận L*L, tương ứng với SA[1,4] = {9,7,4,1}. Điều đó có ý nghĩa, kí tự “a” xuất hiện trong chuỗi ban đầu X tại các vị trí 9, 7, 4, 1
Hình 2.12 Vị trí xuất hiện của kí tự “a” trong chuỗi X =”agcagcagact
Do đó, để tìm vị trí của chuỗi W trong chuỗi X ban đầu, ta xác định 1 khoảng cách :
SA =[ 𝑹 𝑾 , 𝑹 𝑾 ]
Với W=”gca” ta nhận thấy khoảng cách SA được xác định là : SA = [9,10] tương ứng với giá trị {5, 2} trong mảng hậu tố SA. Do đó W=”gca” được xuất hiện trong chuỗi ban đầu X = “agcagcagact $” 2 lần tại vị trí 5 và vị trí 2 như mơ tả dưới:
Hình 2.13 Giá trị SA = [9,10] của chuỗi W=“gca”
Cơng thức tổng qt tính khoảng cách SA[] cho chuỗi W như sau:
𝑹 𝜶𝑾 = 𝑪 𝜶 + 𝑶 𝜶, 𝑹 𝑾 − 𝟏 + 𝟏 𝑹 𝜶𝑾 = 𝑪 𝜶 + 𝑶 𝜶, 𝑹 𝑾
Hình 2.14 Cơng thức tính khoảng cách SA
Nếu W là chuỗi rỗng: R W = 1 và R W = n − 1 ( n là độ dài của chuỗi ban đầu)
C(α): là mảng đánh dấu số lần xuất hiện của những kí tự nhỏ hơn kí tự α trong
bảng chữ cái tại chuỗi X[0,n-2] (Khơng tính kí tự $)
a c g T
C 0 4 7 10
WT t g c c $ g g a a a a c
O(α,i): số lần xuất hiện của kí tự α trong chuỗi WT[0,i]
a c g t 0 0 0 1 0 0 1 1 0 1 1 1 0 2 1 1 0 2 1 1 0 2 2 1 0 2 3 1 1 2 3 1 2 2 3 1 3 2 3 1 4 2 3 1 4 3 3 1
Tính tốn SA với W=”gca”, X=”agcagcagact$” từng bước như sau: B1: W’ = “a” Có 𝑅 "" = 1 và 𝑅 "" = 𝑛 − 1 = 11 C(a) = 0 ta có: 𝑅 "𝑎" = 𝐶 "𝑎" + 𝑂 "𝑎", 𝑅 "" − 1 + 1 = 0 + 𝑂 "𝑎", 0 + 1 = 0 + 0 + 1 = 1 𝑅 "𝑎" = 𝐶 a + 𝑂 a, 𝑅 "" = 0 + 𝑂 a, 11 = 0 + 4 = 4 SA(“a”) = [1,4]
(SA[1,4] = {9,7,4,1} => Cho thấy kí tự “a” xuất hiện tại các vị trí 9,7,4,1 của chuỗi X ) B2: W’ = “ca” = “cW’” 𝑅 "𝑐𝑎" = 𝐶 "𝑐" + 𝑂 "𝑐", 𝑅 "𝑎" − 1 + 1 = 4 + 𝑂 c, 1 − 1 + 1 = 4 + 0 + 1 = 5 𝑅 "𝑐𝑎" = 𝐶 c + 𝑂 c, 𝑅 𝑎 = 4 + 𝑂 c, 4 SA(“ca”) = [5,6]
(SA[5,6] = {6,3} => Cho thấy kí tự “ca” xuất hiện tại các vị trí 6, 3 của chuỗi X)
= 7 + 𝑂 g, 6 = 7 + 3 = 10
SA(“gca”) = [9,10] SA[9,10] = {5,2}
Cho thấy chuỗi kí tự W = “gca” xuất hiện tại vị trí 5 và 2 trong chuỗi X = “agcagcagact$”.
Kết thúc quá trình tìm kiếm:
+ Mã giả của q trình tìm kiếm chính xác
Backward_Search( P[1, p] )
{
i = p, c = P [ p], First = C [ c]+1, Last = C [ c+1];
while ( ( First ≦ Last) and i ≧ 2 )
{
c = P [ i-1];
First = C[ c] + Occ( c, First-1)+1; Last = C[ c] + Occ( c, Last); i = i-1;
}
if ( Last < First )
then return “no occurrence” ;
else
return ( First, Last ); }
2.3.4 Tìm kiếm có sai khác khơng nhiều hơn z vị trí (Inexact matching) Input: chuỗi gốc ban đầu X Input: chuỗi gốc ban đầu X
Chuỗi tìm kiếm W
Ví dụ: X = “TTAACGTTTATTACGTTTAAGTTTAACCTT”
W= “AACG”
Số lượng sai khác cho phép: z = 2
Ý tƣởng thuật tốn: Thực hiện tìm kiếm chính xác theo kỹ thuật đã được giới thiệu ở
trên từ phải sang trái của chuỗi W xuất hiện trong chuỗi ban đầu X. Khởi tạo 1 ngân sách z. Nếu Quá trình tìm kiếm phát hiện 1 điểm sai khác, ngân sách sẽ được giảm đi 1. Dừng lại khi ngân sách trở về 0 hoặc đã tìm thấy đủ chuỗi W trong X.
Các trường hợp sai khác có thể xảy ra tại 1 kí tự:
+ W được tìm thấy trong X nhưng thừa 1 kí tự (insertion) + W được tìm thấy trong X nhưng thiếu 1 kí tự (deletion) + W được tìm thấy chính xác trong X (match)
+ W được tìm thấy trong X nhưng bị thay đổi 1 kí tự (mismatch)
Để giảm khơng gian tìm kiếm, Inexact matching sử dụng mảng D[] trong đó D (i) là giới hạn dưới của các số sai khác trong W [0… i]
D[i] được tính tốn như sau:
CALCULATED(W)
z 0 j 0
for i = 0 to |W| - 1 do
if W[j…i] is not a substring of X then z z + 1
j I + 1 D(i) z
Ví dụ với chuỗi ban đầu: X = “gaagax” và W=”xag” ta sẽ tính tốn được với vịng lặp từ 0 đến 2 ta có: D(0) = 0, D(1) = 1, D(2) = 1
Tổng quan thuật tốn tìm kiếm Inexact matching được định nghĩa như sau:
InexactSearch(W; z)
{
CalculateD(W)
return InexRecur(W; |W| - 1, z, |X| - 1) }
Trong đó InexRecur(W; i ; z; k; l) trả lại giá trị là khoảng cách SA của chuỗi W trong chuỗi X với số sai khác không quá z sai khác.
W: chuỗi tìm kiếm
i: vị trí đang tìm kiếm W[i] z: số lượng sai khác cho phép
+ Nếu z nhỏ hơn giới hạn dưới của vị trí đang xét thì chương trình dừng. Hàm trả về giá trị null
+ Nếu i < 0, trả về khoảng cách SA cần tìm
+ Khởi tạo I là tập hợp chứa các khoảng cách SA tìm kiếm được.
+ Mỗi kí tự b đang xét b € ∑ = {A, C, G, T}, khoảng cách SA được tính theo cơng thức như đã định nghĩa trong tìm kiếm chính xác:
𝑹 𝜶𝑾 = 𝑪 𝜶 + 𝑶 𝜶, 𝑹 𝑾 − 𝟏 + 𝟏 𝑹 𝜶𝑾 = 𝑪 𝜶 + 𝑶 𝜶, 𝑹 𝑾
Cụ thể ta có:
k = C(b) + O(b, k – 1) + 1 l = C(b) + O(b,l) + 1
+ Khi tìm thấy trong X chèn thêm 1 kí tự của W (insertion), chuyển sang xét kí tự tiếp theo, ngân sách z giảm đi 1 đơn vị
I = I U InexRecur(W, (i-1), (z-1), k, l)
+ Khi tìm thấy trong X mất 1 kí tự của W (deletion), vẫn đứng ở kí tự đang xét, ngân sách z giảm đi 1 đơn vị
I = I U InexRecur(W, i, (z-1), k, l)
+ Khi tìm thấy trong X chính xác W (match), chuyển sang xét kí tự tiếp theo, ngân sách không thay đổi
I = I U InexRecur(W, (i-1), z, k, l)
+ Khi tìm thấy trong X nhưng sai khác 1 kí tự của W (mismatch), chuyển sang xét tiếp kí tự tiếp theo, ngân sách giảm đi 1 đơn vị.
I = I U InexRecur(W, (i-1), (z-1), k, l)
2.4 Kết luận
Trong chương này tác giả đã trình bày ý tưởng và thuật tốn BWT áp dụng trong việc tìm kiếm trên hệ gen tham chiếu trong bài tốn gióng hàng trình tự. Đối với thuật tốn Smith – Waterman khi ứng dụng gióng hàng trên số lượng lớn n read (lên tới hàng triệu read) với một hệ gen reference thì số lượng bài tốn phải giải là n bài toán. Tuy
ra số vị trí sai khác q lớn trong kết quả gióng hàng. Tuy nhiên thuật toán Burrows- Wheeler Transform đã đưa ra giải thuật cho phép giới hạn số vị trí sai khác trong mỗi lần chạy, từ đó kết quả gióng hàng vị trí các read vào hệ gen tham chiếu reference chính xác và hiệu quả hơn.
CHƢƠNG 3 : ỨNG DỤNG THUẬT TOÁN BWT VÀ THỬ NGHIỆM TRÊN DỮ LIỆU SINH HỌC
Tại chương hai của luận văn, tác giả đã trình bày về cơ sở lý thuyết và thuật toán BWT. Để hiểu sâu hơn về mặt ứng dụng của thuật toán, tác giả sẽ giới thiệu chương ba với các kết luận cụ thể về mặt thực nghiệm của thuật toán trên dữ liệu sinh học.
3.1 Quy trình thực nghiệm
Mô phỏng phần thực nghiệm bao gồm các bước sau:
Bƣớc 1: Lựa chọn hệ gen tham chiếu
Bƣớc 2: Giả lập dữ liệu và lựa chọn dữ liệu thực nghiệm
Bƣớc 3: Sử dụng công cụ đã xây dựng – BWTAligner để gióng hàng trình tự trên
dữ liệu giả lập và dữ liệu thực nghiệm
Bƣớc 4: Sử dụng công cụ thông dụng BWA để gióng hàng trình tự trên dữ liệu
giả lập và dữ liệu thực nghiệm
Bƣớc 5: Đánh giá kết quả SNP chạy trên dữ liệu giả lập của 2 phần mềm
BWTAligner và BWA
Bƣớc 6: Đánh giá kết quả SNP chạy trên dữ liệu thực nghiệm của 2 phần mềm
Hình 3.1 Mơ phỏng nhiệm vụ thực nghiệm trong chương 3
Các báo cáo chi tiết của phần thực nghiệm sẽ được trình bày tại các mục tiếp theo của chương 3.
3.2 Cài đặt ứng dụng
Input : Hệ gen tham chiếu (reference genome)
Hệ gen dữ liệu (reads) – là dữ liệu giả lập và dữ liệu thực nghiệm sẽ được mô tả chi tiết trong mục chuẩn bị dữ liệu 3.2
Output : Đưa ra kết quả tìm kiếm Inexact matching của các đoạn dữ liệu reads
trên hệ gen tham chiếu (reference genome)
Hình 3.2 Ví dụ mơ phỏng mục tiêu của ứng dụng
Cùng với sự cộng tác của các thành viên trong phòng Tin – Sinh học, Viện Công nghệ sinh học, Viện Hàn lâm Khoa học và Công nghệ Viêt Nam, chúng tôi đã xây dựng thành cơng cơng cụ gióng hàng trình tự BWTAligner sử dụng thuật tốn BWT đã được giới thiệu chi tiết tại chương 2.
Công cụ BWTAligner được cài đặt trên máy chủ (server) của phịng Tin - Sinh học, Viện Cơng nghệ sinh học (IBT), Viện Hàn lâm Khoa học và Cơng nghệ Viêt Nam (VAST). Các trình biên dịch như perl, C++, thư viện và công cụ cần thiết cũng được
Hệ điều hành Ubuntu 14.10 HDD 6 TB SSD 120 GB CPU X5650 @ 2.67 GHz; 24 processors RAM 198 GB
Bảng 3.1 Thông tin về máy chủ được sử dụng để cài đặt thử nghiệm
3.3 Chuẩn bị dữ liệu
a. Hệ gen tham chiếu
Để tìm kiếm các biến dị trên hệ gen, quá trình thực nghiệm sử dụng phần mềm đã được nhóm xây dựng là BWTAligner và phần mềm BWA (Burrows -Wheeler Aligner) để gióng hàng trình tự. Hệ tham chiếu – định nghĩa tại mục 1.3.3 - được chọn là hệ gen lúa Nipponbare, bản 7.0 từ Dự án chú giải hệ gen lúa (kích thước hệ gen tham chiếu là 373,245,519 bp).
Hệ gẹ Nipponbare được lựa chọn là hệ gen được nghiên cứu bởi các nhà khoa học Nhật Bản. Có nhiều bài báo được công bố, cũng như nhiều nghiên cứu khoa học khác trên thế giới cũng đã lựa chọn và sử dụng hệ gen Nipponbare làm hệ gen tham chiếu. Hệ gen Nipponbare là hệ gen duy nhất được chú giải hoàn toàn chức năng hệ gen tính đến đầu năm 2014. Do vậy hệ gen Nipponbare là hệ gen tham chiếu phù hợp được lựa chọn để tiến hành thực nghiệm.
b. Dữ liệu giả lập
Dữ liệu giả lập là dữ liệu được trích chọn một phần từ hệ gen tham chiếu. Dữ liệu giả lập sẽ được thay đổi sai ngẫu nhiên một số vị trí Nucleotid rồi đưa vào chạy gióng hàng trình tự bởi hai cơng cụ BWTAligner và BWT. Kết quả thu được sau khi gióng hàng trình tự sẽ được đem kiểm chứng với giả thiết trước đó và đưa ra đánh giá hiệu quả của phần mềm.
Dữ liệu giả lập lựa chọn nhiễm sắc thể số 9 của hệ gen tham chiều (kích thước 23,012,720 bp). Dữ liệu đã được thay đổi ngẫu nhiên 0.085% SNP. Để đánh giá phần mềm gióng hàng, dữ liệu được giả lập các độ sâu (depth coverage) khác nhau là 5X, 10X và 30X với chất lượng trình tự tốt .
Các thông số giả lập dữ liệu được thể hiện qua bảng dưới đây :
Thông số Giá trị Tỷ lệ lỗi base 0.020 Tỷ lệ đột biến 0.085%