Chuẩn bị dữ liệu

Một phần của tài liệu (LUẬN văn THẠC sĩ) cây quản lí đoạn và ứng dụng (Trang 44)

Hiện nay, cơ sở dữ liệu về tin sinh học được lưu trữ rất nhiều trên các ngân hàng cơ sở dữ liệu như: DDBJ, GenBank, EMBL, NCBI-Unigen, TRANSFAC, EBI,v.v… , đây là những kho dữ liệu khổng lồ được cập nhật hàng ngày và miễn phí đối với tất cả mọi người trên thế giới. Luận văn sử dụng ngân hàng cơ sở dữ liệu của UCSC [12], dữ liệu về các hệ gen ở định dạng BED [11]. BED là một cách linh hoạt thể hiện các đặc điểm, chú giải gen và các đoạn gen, truy cập cũng nhanh hơn, thay vì các cơ sở dữ liệu phức tạp khác. BED mô tả hơn 12 thuộc tính của hệ gen, tuy nhiên trong bài toán này ta chỉ quan tâm tới 3 thuộc tính sau:

1. chromName: là một xâu kí tự biểu diễn tên nhiễm sắc thể (Ví dụ: chr3, chrY, chr2_random, scaffold10671,...).

2. chromStart: là số nguyên chỉ ra vị trí bắt đầu của đoạn gen trong nhiễm sắc thể (đánh số bắt đầu từ 0).

3. chromEnd: là số nguyên cho biết vị trí kết thúc của đoạn gen trong nhiễm sắc thể.

Các thuộc tính ngăn cách nhau bởi khoảng trống. Thí dụ: chr19 11823 14433

Mô tả: đoạn gen nằm ở nhiễm sắc thể chr19, từ vị trí 11823 đến vị trí 14433.

Hình 3.1 là giao diện trang web và các lựa chọn tương ứng để lấy dữ liệu về hệ gen người trên ngân hàng gen UCSC. Tương tự theo cách này, ta có thể lấy ra dữ liệu về hệ gen chuột, virus Ebola hay dữ liệu hệ gen của một số loại

vi khuẩn khác làm dữ liệu kiểm thử cho chương trình bằng cách thay thế lựa chọn ở mục clade và genome.

Hình 3.1. Giao diện mô phỏng cách lấy dữ liệu hệ gen người từ UCSC Table Browser

3.2. Mã hóa chƣơng trình tìm giao các đoạn gen

3.2.1. Ngôn ngữ và môi trƣờng lập trình

Để mô phỏng ứng dụng của cấu trúc dữ liệu cây quản lí đoạn trong bài toán tìm giao của các đoạn gen, tôi xây dựng chương trình ứng dụng “Tìm

giao các đoạn gen” sử dụng ngôn ngữ lập trình Java, môi trường NetBeans

IDE 8.0.1.

Java là một ngôn ngữ lập trình hướng đối tượng, dựa trên các lớp. Khác với phần lớn ngôn ngữ lập trình thông thường, thay vì biên dịch mã

nguồn thành mã máy hoặc thông dịch mã nguồn khi chạy, Java được thiết kế để biên dịch mã nguồn thành bytecode, bytecode sau đó sẽ được môi trường thực thi chạy. Trước đây, Java chạy chậm hơn những ngôn ngữ dịch thẳng ra mã máy như C và C++, nhưng sau này nhờ công nghệ "biên dịch tại chỗ", khoảng cách này đã được thu hẹp, và trong một số trường hợp đặc biệt Java có thể chạy nhanh hơn. So với C#, một ngôn ngữ khá tương đồng về mặt cú pháp và quá trình dịch/chạy, Java chạy nhanh tương đương.

Cú pháp Java được vay mượn nhiều từ C, C++ nhưng có cú pháp hướng đối tượng đơn giản hơn và ít tính năng xử lý cấp thấp hơn. Do đó việc viết một chương trình bằng Java dễ hơn, đơn giản hơn, đỡ tốn công sửa lỗi hơn.

Trong Java, hiện tượng rò rỉ bộ nhớ hầu như không xảy ra do bộ nhớ được quản lí bởi Java Virtual Machine bằng cách tự động "dọn dẹp rác". Người lập trình không phải quan tâm đến việc cấp phát và xóa bộ nhớ như C, C++. Điều này hoàn toàn có lợi khi ta triển khai một ứng dụng cần cấp phát nhiều bộ nhớ, khối lượng dữ liệu lớn, có quy mô như một hệ gen.

Bên cạnh đó, NetBeans là một công cụ hoàn toàn miễn phí, hỗ trợ nhiều hệ điều hành khác nhau như Windows, Mac, Linux, và Solaris. NetBeans bao gồm một môi trường phát triển tích hợp IDE mã nguồn mở và một nền tảng ứng dụng cho phép thiết kế và lập trình các chương trình Java một cách dễ dàng, nhanh chóng và nhẹ nhàng.

Tất cả những ưu điểm kể ra trên đây của cả Java và NetBeans rất phù hợp để triển khai chương trình “Tìm giao các đoạn gen”.

Chương trình “Tìm giao các đoạn gen” được thiết kế gồm hai chức năng chính, tương đương với hai trường hợp của bài toán đã phát biểu đó là cửa sổ truy vấn gen thực hiện tìm giao của một đoạn gen với các đoạn gen trong một tập, các truy vấn được người dùng nhập trực tiếp từ bàn phím; và chức năng chọn hai tập dữ liệu để tìm giao của các đoạn gen trong hai hệ gen này. Khởi

động chương trình, người dùng sẽ tùy chọn chức năng để thực hiện (hình 3.2): cửa sổ truy vấn gen (hình 3.3) và tìm giao hai tập các đoạn gen (hình 3.5).

Hình 3.2. Giao diện lựa chọn chức năng

3.2.2. Chức năng cửa sổ truy vấn gen

Dữ liệu vào: tập dữ liệu các đoạn gen và một đoạn gen cần tìm giao.

Kết quả ra: Các đoạn gen trong tập dữ liệu có giao với đoạn gen nhập vào và số lượng các đoạn này.

Thiết kế giao diện: giao diện cửa sổ truy vấn gen (hình 3.3), giao diện hộp thoại chỉ định tệp dữ liệu về đoạn gen (hình 3.4)

Trong giao diện này, người dùng sẽ lựa chọn tệp nguồn, chứa thông tin về các đoạn gen theo đúng định dạng BED bằng nút lệnh Open file. Hình 3.4 minh họa người dùng chọn tệp human_bed.gen chứa dữ liệu về hệ gen người.

Hình 3.4. Giao diện hộp thoại chỉ định tệp dữ liệu về đoạn gen

Các xử lí, thao tác:

Khi một tệp gen được người dùng lựa chọn, chương trình sẽ đọc tệp và lữu trữ vào trong đối tượng itContainer (xem phụ lục).

Một đối tượng thuộc lớp itContainer chứa tập hợp các cây quản lí đoạn, biểu diễn bởi lớp ITtree và tên nhiễm sắc thể tương ứng của chúng lưu trữ vị trí các đoạn gen trên cùng một nhiễm sắc thể (xem phụ lục).

Vì trong một tệp dữ liệu, có thể chứa thông tin liên quan đến nhiều nhiễm sắc thể khác nhau, mỗi nhiễm sắc thể đại diện bởi một tên, ta sử dụng một combobox liệt kê danh sách tên các nhiễm sắc thể để người sử dụng thuận tiện trong việc lựa chọn đối tượng để làm việc.

Cây quản lí đoạn trong cài đặt có các phương thức sau:

 Thêm một đoạn mới vào cây,

 Tìm giao của một đoạn cho trước trên cây,

 Duyệt cây theo thứ tự giữa.

Đoạn gen cần tìm giao g do người dùng nhập vào chương trình thông qua ô nhập dữ liệu có định dạng: tên nhiễm sắc thể, vị trí đầu đoạn gen, vị trí cuối đoạn gen.

Chương trình cài đặt sử dụng thuật toán tìm giao các đoạn gen trình bày ở chương trước, thực hiện tìm kiếm trên cây quản lí đoạn và trả ra kết quả là danh sách các đoạn có giao với g và chi tiết về đoạn gen giao nhau giữa chúng một cách chính xác và đáng tin cậy.

3.2.3. Chức năng tìm giao hai tập các đoạn gen Dữ liệu vào: hai tập dữ liệu về các đoạn gen. Dữ liệu vào: hai tập dữ liệu về các đoạn gen.

Kết quả ra: các đoạn gen giao nhau của tập dữ liệu thứ nhất với tập dữ liệu thứ hai và vị trí giao nhau của chúng; số lượng các đoạn này.

Thiết kế chức năng: Mã nguồn (Xem phụ lục)

Thiết kế giao diện: giao diện chức năng tìm giao hai tập các đoạn gen (hình 3.5), giao diện hộp thoại chỉ định tệp dữ liệu về đoạn gen (hình 3.4) và giao diện hộp thoại lưu kết quả các đoạn gen giao nhau vào tệp (hình 3.6).

Hình 3.5. Giao diện chức năng tìm giao hai tập các đoạn gen

Khác với cửa sổ truy vấn, người dùng cấp lần lượt thông tin về các đoạn gen, trong trường hợp này, người dùng cần tìm giao của các đoạn gen sẽ cho biết thông tin về hai tập gen bằng cách chọn hai tệp. Chương trình đi xây dựng rừng các cây quản lí đoạn từ tệp thứ nhất, sau đó duyệt lần lượt các đoạn của tệp thứ hai, truy vấn tìm giao của nó với rừng các cây quản lí đoạn đã dựng, trả kết quả về các đoạn gen giao nhau ra hộp danh sách kết quả. Danh sách các đoạn giao có thể được kết xuất ra tệp để người dùng có thể tái sử dụng về sau (hình 3.6).

Các xử lí, thao tác: các lớp đối tượng, các hàm và thủ tục sử dụng như chức năng cửa sổ truy vấn gen, chỉ khác ở chỗ ta phải duyệt qua tất cả các đoạn gen của tệp thứ hai, và với mỗi đoạn thì thực hiện truy vấn tìm giao của đoạn gen này với các đoạn gen trong tệp thứ nhất cùng nhiễm sắc thể với nó.

Trong trường hợp cần tìm giao các đoạn gen của hai tệp dữ liệu có dung lượng rất lớn, ta thường gặp phải rắc rối về việc sử dụng quá nhiều bộ nhớ, khi đó hãy sắp xếp trước dữ liệu đầu vào theo từng nhiễm sắc thể. Tức là dữ liệu các đoạn gen cần được sắp xếp theo một trình tự nhất định, chẳng hạn tăng dần theo vị trí bắt đầu của các đoạn gen. Trên thực tế, nếu sử dụng dữ liệu về các hệ gen từ các ngân hàng cơ sở dữ liệu gen thì dữ liệu này thường đã được sắp xếp sẵn từ trước.

3.3. Kiểm thử chƣơng trình

3.3.1. Sử dụng cửa sổ truy vấn tìm giao giữa các đoạn gen của virus Ebola với hệ gen ngƣời Ebola với hệ gen ngƣời

Phát hiện hiện nay về hệ gen virus Ebola gồm 7 đoạn gen. Dữ liệu này đủ ít để có thể kiểm thử tính đúng đắn của chương trình một cách thủ công. Vì thế, sử dụng lần lượt dữ liệu về các đoạn gen đã biết của virus Ebola để kiểm thử cho chương trình truy vấn cửa sổ tìm giao của từng đoạn gen này trong hệ gen người là hợp lí. Kết quả truy vấn trả ra một cách nhanh chóng, đúng đắn.

Dữ liệu vào:

 Tệp dữ liệu về hệ gen người, gồm 60726 đoạn gen chứa trong 23 nhiễm sắc thể. Xét riêng nhiễm sắc thể 1 có 5677 đoạn gen.

 7 đoạn gen của virus Ebola cần xác định có giao với những đoạn gen nào của nhiễm sắc thể số 1 trong hệ gen người.

Kết quả ra: Kết quả kiểm thử với lần lượt truy vấn từng đoạn gen như trong

Bảng 3.1. Kết quả kiểm thử cửa sổ truy vấn

Đoạn gen g của virus Ebola

Số lượng đoạn gen giao giữa đoạn gen g với các đoạn gen trên nhiễm sắc

thể số 1 hệ gen người 55 3026 0 3031 4407 0 4389 5894 0 5899 8305 0 8287 9740 0 9884 11518 0 11500 18282 14

3.3.2. Tìm giao giữa hệ gen ngƣời và hệ gen chuột

Gen chồng chéo trong hệ gen động vật có vú là hiện tượng bất ngờ mặc dù hàng trăm cặp protein mã hóa gen chồng chéo đã được báo cáo cho đến nay. Gen chồng chéo có thể được chia thành các loại khác nhau dựa trên định hướng của phiên mã cũng như về trình tự phân đoạn được chia sẻ giữa vùng mã hóa chồng chéo [6].

Năm 2005, các nhà khoa học Anh đã cấy thành công nhiễm sắc thể số 21 của người vào chuột để gây bệnh Down nhằm phục vụ nghiên cứu và phát triển phương pháp điều trị mới cho những người bị rối loạn gen. Thông thường, hầu hết mọi người đều có 23 cặp nhiễm sắc thể. Người bị bệnh Down (thiểu năng trí tuệ) lại có ba nhiễm sắc thể 21 thay cho hai nhiễm sắc thể bình thường. Nhóm nghiên cứu đã tạo ra một giống chuột mang trong cơ thể bản sao giống nhiễm sắc thể số 21, trong đó có hơn 200 gen của người, bằng cách lấy nhiễm sắc thể từ tế bào người và cấy vào các tế bào phôi của chuột. Qua vài thế hệ, giống chuột này có những triệu chứng của bệnh Down như rối loạn

trí nhớ, rối loạn chức năng não và rối loạn cấu tạo tim. Việc cấy ghép thành công có thể giúp các nhà khoa học nghiên cứu sâu hơn những vấn đề mà bệnh nhân Down gặp phải. Hội chứng Down ảnh hưởng tới 1/800 ca sinh nở, gây ra sự chậm chễ trong việc phát triển thể chất và thần kinh. Những người bị bệnh này cũng gặp vấn đề về tim, thính giác và có nguy cơ cao mắc bệnh máu trắng và mất trí nhớ. Nghiên cứu này được đánh giá là một tiến bộ kỹ thuật quan trọng trong nghiên cứu bệnh Down và những bệnh khác do sự không bình thường của nhiễm sắc thể.

Vì thế, tiến hành kiểm thử chương trình trên hai tập dữ liệu các đoạn gen của hệ gen người và hệ gen chuột, xem xét các đoạn giao nhau của từng cặp nhiễm sắc thể, mục đích đánh giá tính đúng đắn của chương trình tìm giao của hai tập các đoạn gen, kết quả được mô tả như bảng 3.2. Khoảng 90% gen của chuột có các gen tương ứng trên người, đúng như mô tả trong tài liệu [6].

Bảng 3.2. Kết quả kiểm thử tính đúng đắn chương trình tìm giao giữa hai hệ gen

Hệ gen người (số đoạn gen)

Hệ gen chuột (số đoạn gen)

Số lượng đoạn gen giao nhau chr1 5677 chr1 3893 5662 chr2 3780 chr2 1877 2692 chr3 3132 chr3 2237 3383 chr4 2122 chr4 1754 1256 chr5 2519 chr5 1763 2616 chr6 3177 chr6 1278 2180 chr7 2925 chr7 1646 2735 chr8 1883 chr8 1542 1862 chr9 2428 chr9 1085 1501 chr10 2325 chr10 2193 3717

chr11 3323 chr11 770 1591 chr12 2767 chr12 849 1353 chr13 1061 chr13 949 949 chr14 2126 chr14 948 1378 chr15 2689 chr15 986 1461 chr16 2382 chr16 792 1750 chr17 3241 chr17 862 1810 chr18 884 chr18 693 945 chr19 3408 chr19 701 1486 chr20 1432 chr20 840 1266 chr21 2170 chr21 1439 1565

3.3.3. Tìm giao giữa hệ gen chuột nhắt và hệ gen chuột cống

Chuột chia thành khoảng 35 họ. Mỗi họ có khoảng 350 loài. Trong những loài này có cả chuột nhắt hay chuột nhà và chuột cống. Xã hội chuột trong tự nhiên được tổ chức theo kiểu phân tán để tồn tại. Nhờ có chuột, hàng loạt loại thuốc đã ra đời để trị bệnh cho con người.

Về di truyền học, chuột cống có 22 cặp nhiễm sắc thể với 2,75 triệu cặp bazơ nitơ trong khi chuột nhắt chỉ có 20 cặp nhiễm sắc thể với 2,6 triệu cặp (người có 2,9 triệu). Cặp nhiễm sắc thể cuối cùng là cặp nhiễm sắc thể giới tính. Khoảng 90% gen của chuột cống có các gen tương ứng trên chuột nhắt [6].

Tiến hành chạy thử chương trình với dữ liệu vào là hai tập dữ liệu hệ gen chuột nhắt và chuột cống, tính số lượng gen giao nhau theo từng nhiễm sắc thể, quan sát thời gian thực hiện chương trình cho kết quả như trong bảng 3.3. Mục đích thử nghiệm: đánh giá thời gian, hiệu năng chạy chương trình.

Bảng 3.3. Thời gian (s) trung bình chạy chương trình Hệ gen chuột nhắt Hệ gen chuột cống Số lượng đoạn gen giao nhau Thời gian (s) chạy thuật toán dùng cây quản lí

đoạn

Thời gian (s) chạy thuật toán tìm kiếm tuần tự chr1 1697 chr1 3893 1769 0.453 chr2 2782 chr2 1877 936 0.593 chr3 1508 chr3 2237 1238 0.449 chr4 1950 chr4 1754 661 0.353 chr5 1736 chr5 1763 1187 0.250 chr6 1634 chr6 1278 1091 0.460 chr7 2808 chr7 1646 1698 0.182 chr8 1490 chr8 1542 1288 0.154 chr9 1645 chr9 1085 1009 0.228 chr10 1506 chr10 2193 1709 0.209 chr11 2344 chr11 770 931 0.106 chr12 1019 chr12 849 342 0.020 chr13 1160 chr13 949 681 0.094 chr14 1116 chr14 948 593 0.059 chr15 1075 chr15 986 525 0.033 chr16 970 chr16 792 555 0.040 chr17 1501 chr17 862 936 0.076 chr18 745 chr18 693 539 0.040 chr19 908 chr19 701 513 0.192 Tổng cộng 18201 3.991 31.918

3.4. Đánh giá độ phức tạp và kết quả thực hiện chƣơng trình

Tuy trong trường hợp xấu nhất, khi mà đoạn cần tìm giao bao cả cây, chương trình có độ phức tạp tương đương với việc duyệt thông thường. Nhưng với các bộ dữ liệu thực tế, chương trình nhanh chóng loại các tập đoạn không phù hợp và trả về kết quả trong thời gian cho phép.

Việc đọc dữ liệu từ tệp tiêu tốn thời gian bởi tốc độ đọc tệp chậm hơn khả năng xử lý, độ phức tạp O(n).

Việc thêm một đoạn vào cây như chương trước đã đề cập mất O(lgn), vì thế thao tác xây dựng cây mất O(nlg(n)), và xây dựng rừng các cây quản lí đoạn itContainer mất O(n.k.lg(n)) với k là số nhiễm sắc thể khác nhau trong

một tập gen hay là số cây quản lí đoạn khác nhau dựng được từ tệp ban đầu.

Một phần của tài liệu (LUẬN văn THẠC sĩ) cây quản lí đoạn và ứng dụng (Trang 44)

Tải bản đầy đủ (PDF)

(65 trang)