Thu thập nguồn gene và tổ chức dữ liệu gene
Trang 1PHẦN B: TỔNG QUAN – Giới thiệu Bioinformatics – Vài công cụ 31
II.3 Vài công cụ Bioinformatics hiện nay
Vì không có cách nào mô tả hết các công cụ có sẵn, dưới đây chỉ trích một vài công cụ phổ biến dùng trong phân tích trình tự sinh học
II.3.1 Readseq
Readseq là một phần mềm cũ, ra đời từ năm 1989 Được phát triển bởi Don Gilbert, chương trình này đọc và viết trình tự nucleotide và protein sang nhiều định dạng hữu dụng Công cụ này được viết bằng ngôn ngữ Java
II.3.2 BLAST
BLAST (Basic Local Alignment Search Tools) là công cụ được biết tốt nhất trong phân tích trình tự Nó so sánh hai trình tự bởi cố gắng gióng (align) chúng, và cũng được dùng để tìm kiếm trình tự trong cơ sở dữ liệu Thuật toán bắt đầu bởi tìm kiếm sự so khớp chính xác, sau đó mở rộng vùng đã được gióng bởi những so khớp không chính xác (mismatches)
blastall cho phép sử dụng tất cả các chương trình BLAST (blastn, blastp, blastx, và tblastn) Bảng sau đây tóm tắt trình tự dùng truy vấn (Query sequence), trình
tự cơ sở dữ liệu (Database sequence), và loại gióng trình tự (Alignment sequence) đối với lệnh BLAST khác nhau
sequence type
Database sequence type
Alignment sequence type
blastn nucleotide Nucleotide nucleotide
blastp protein Protein protein
blastx nucleotide Protein protein
tblastn protein Nucleotide protein
tblastx nucleotide Nucleotide protein
Bảng 2.1: Bảng liệt kê một số chương trình BLAST
megablast sử dụng thuật toán gióng trình tự nucleotide tìm kiếm và nối nhiều trình tự truy vấn để giảm thời gian quét (scanning) qua cơ sở dữ liệu
Trang 2PHẦN B: TỔNG QUAN – Giới thiệu Bioinformatics – Vài công cụ 32
blastpgp thực hiện blastp có khe (gap) và có thể được dùng để thực hiện lặp đi lặp lại tìm kiếm ở chế độ psi-blast và phi-blast
PSI-BLAST (Position-Specific Iterated BLAST) là sự tìm kiếm lặp lại trong đó
các trình tự tìm thấy trong một vòng tìm kiếm được dùng để xây dựng mô hình tính
điểm cho vòng tìm kiếm kế tiếp
PHI-BLAST (Pattern-Hit Initiated BLAST) là chương trình tìm kiếm kết hợp sự
so khớp của regular expression với sự gióng khu vực xung quanh sự so khớp
bl2seq (BLAST 2 Sequences) cho phép gióng trình tự hai trình tự được nhận
II.3.3 BLAT
BLAT là công cụ gióng trình tự rất nhanh tương tự như BLAST Nó tương đối mới so với BLAST, nhưng nó đã trở nên rất phổ biến BLAT thì chính xác hơn và nhanh hơn hàng trăm lần so với BLAST Tốc độ của BLAT xuất phát từ thời gian chạy các phần tử là các trình tự nhỏ không trùng lắp từ chiều dài được cho Phần tử này đủ nhỏ phù hợp với bộ nhớ máy tính và được tính toán điển hình chỉ một lần đối với mỗi tập hợp genome Jim Kent phát triển BLAT đặc biệt trợ giúp xử lý tập hợp bộ gene trong quá trình làm việc với bộ gene người
II.3.4 ClustalW
ClustalW là chương trình gióng đa trình tự dùng cho trình tự nucleotide và trình
tự protein Sự gióng có thể là toàn bộ (global) (toàn trình tự) hay khu vực (local) (giới hạn đoạn trình tự con) ClustalW tính toán sự khớp tốt nhất cho trình tự được chọn lựa,
và sắp chúng thành hàng để xác định, những sự tương đồng và sự khác biệt có thể được thấy
II.3.5 HMMER
HMMER là tập hợp các chương trình tạo ra mô hình Markov ẩn (hidden Markov model-HMM) của họ trình tự được dùng như trình tự truy vấn đối với cơ sở dữ liệu để xác định thêm sự tương đồng (homologs) của họ trình tự HMMER được phát triển bởi Sean Eddy tại đại học Washington
Trang 3PHẦN B: TỔNG QUAN – Giới thiệu Bioinformatics – Vài công cụ 33
II.3.6 MEME/MAST
Hệ thống MEME/MAST cho phép bạn:
Khám phá motif (vùng có tính bảo tồn cao) trong nhóm trình tự DNA hay protein sử dụng MEME
Tìm kiếm trình tự cơ sở dữ liệu bằng motif dùng MAST
MEME và MAST được phát triển bởi Timothy Bailey, Charles và Bill Grundy tại phòng kỹ thuật và khoa học máy tính tại trung tâm San Diego Supercomputer
EMBOSS chứa khoảng 150 chương trình Chúng xử lý một số lĩnh vực sau:
Trang 4PHẦN B: TỔNG QUAN – Giới thiệu Bioinformatics – Ngôn ngữ 34
II.4 Ngôn ngữ dùng trong Bioinformatics
Cuộc cách mạng về bộ gene đã thay đổi diện mạo của sinh học Bất cứ ai làm việc trong lĩnh vực này đều sử dụng phần lớn thời gian trên máy tính và duyệt qua các
cơ sở dữ liệu lớn về genes, proteins, các bài báo đã công bố trên các cơ sở dữ liệu lớn trên mạng Ví dụ danh sách toàn bộ gene người có sẵn, đã thay đổi cách làm việc của mọi người trong lĩnh vực nghiên cứu di truyền Theo phương cách truyền thống, một nhà sinh học trải qua nhiều ngày suy nghĩ chiến lược cho việc xác định một gene và hàng tháng trời làm việc trong phòng thí nghiệm để tạo dòng Ngày nay, anh ta chỉ phải mất vài ngày suy nghĩ chiến lược phù hợp cho ý nghĩa của gene từ cơ sở dữ liệu
bộ gene, tiếp theo thực hiện truy vấn (query), và vài phút để sắp xếp trật tự các dòng phù hợp từ nguồn dữ liệu
Để tạo thuận lợi trong sinh học mới, các nhà sinh học phải làm quen với máy tính Truy xuất dữ liệu từ trang web dữ liệu sinh học và những công cụ phân tích chúng thì thường không đủ Để thật sự tạo ra cuộc cách mạng thông tin trong sinh học, các nhà sinh học phải có thể quản lý và phân tích lượng lớn dữ liệu sinh học thu được
từ nhiều nguồn khác nhau Điều này có nghĩa là viết phần mềm và Perl là ngôn ngữ ưa thích cho Bioinformatics Khả năng tạo ra Perl script tự động quản lý thông tin là một thuận lợi
Mặc dù Perl là ngôn ngữ rất phù hợp đối với bioinformatics, nó không phải là chọn lựa duy nhất và cũng không phải là chọn lựa tốt nhất Các ngôn ngữ khác như Java, C++, Python… cũng được dùng trong bioinformatics Chọn lựa ngôn ngữ nào phụ thuộc vào vấn đề cần được lập trình, kỹ năng của người lập trình và hệ thống có sẵn
Trang 5PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình hướng đối tượng 35
III Cơ sở tin học cho việc xây dựng cơ sở dữ liệu trình tự
III.1 Khái niệm về lập trình
Hiện nay lập trình thường được phân chia thành hai trường phái:
+ Lập trình cấu trúc hay còn gọi là “lập trình thủ tục”, “lập trình truyền thống” (Structured Programming)
+ Lập trình hướng đối tượng (Object -Oriented Programming)
Để hiểu rõ hơn sự khác biệt cũng như ưu khuyết điểm của hai trường phái này, ta hãy xét một yêu cầu đơn giản: Hãy hiển thị thông tin miêu tả các hình trong CSDL ra màn hình
Ta có thể dễ dàng phân tích vấn đề theo thứ tự các bước sau:
1 Định vị các hình trong cơ sở dữ liệu
2 Tạo danh sách hình
3 Sắp xếp danh sách hình theo một thứ tự nhất định
4 Biễu diễn từng hình riêng ra màn hình
Mỗi một bước trong bốn bước ở trên có thể phân rã thành những đơn vị nhỏ hơn
để có thể dễ dàng hơn trong việc thực hiện Ví dụ ta có thể chia bước 4 thành các bước sau (sử dụng vòng lặp):
- Lấy từng hình trong danh sách bắt đầu từ vị trí đầu tiên cho đến vị trí cuối cùng
- Gọi hàm hiển thị từng hình ra màn hình
Cách nhìn nhận và phân tích vấn đề như thế được gọi là phân rã chức năng (functionnal decomposition) Phân rã chức năng là cách tiếp cận bằng cách chia nhỏ vấn đề đến mức mà người lập trình có thể sử dụng tập lệnh của một ngôn ngữ lập trình
để thực hiện chúng Bằng cách này, ta có thể dễ dàng giải quyết và quản lý những vấn
đề lớn thông qua từng công việc nhỏ
Cách tiếp cận trên là tư tưởng chủ đạo của lập trình cấu trúc Đây cũng là điểm giống nhau giữa lập trình cấu trúc và lập trình hướng đối tượng Tuy nhiên, nếu chỉ dừng lại ở đây thì việc giải quyết một số vấn đề phức tạp ta sẽ gặp khó khăn vì những
lý do sau:
+ Phân rã chức năng thường có một chương trình chính chịu trách nhiệm về các chương trình con và ta không hề gặp khó khăn trong việc chia nhỏ các chức năng Tuy nhiên khi đó chương trình chính phải gánh rất nhiều nhiệm vụ: đảm bảo mọi thứ đều hoạt động tốt, liên kết và quản lý trình tự thực hiện các chức năng Do đó, khi yêu cầu
Trang 6PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình hướng đối tượng 36 ngày càng nhiều, độ phức tạp của các yêu cầu ngày càng cao, thì chương trình viết theo kiểu cấu trúc sẽ ngày càng phức tạp, gây khó khăn trong việc quản lý, bảo trì và phát triển chương trình về sau Mọi thứ đều phát triển và thay đổi theo thời gian, không có gì là bất biến Và một chương trình ứng dụng cũng không nằm ngoài quy luật đó, nó luôn luôn thay đổi để ngày càng phù hợp với yêu cầu của thực tế Tính khó thích nghi khi có những thay đổi là nhược điểm quan trọng nhất của lập trình thủ tục + Trong một chương trình có cấu trúc nhiều phần khác nhau có thể truy cập cùng một dữ liệu Điều này nghĩa là nếu một chương trình cần thay đổi cách tổ chức dữ liệu,
ta phải tìm tất cả các chức năng hoặc các lệnh truy cập dữ liệu đó để có những thay đổi tương ứng Nếu sót một trong các chức năng hoặc lệnh này thì chương trình có thể vẫn hoạt động nhưng sẽ cho ra kết quả sai
+ Một nhược điểm khác của lập trình thủ tục là ta không thể kế thừa hiệu quả cũng như tái sử dụng hiệu quả các chức năng đã viết, trong nhiều tình huống phải viết lại gần như toàn bộ
Lập trình hướng đối tượng được đưa ra để khắc phục các nhược điểm của lập trình có cấu trúc Lập trình hướng đối tượng giúp ta tư duy và giải quyết vấn đề như cách ta thực hiện ngoài đời, do đó giúp ta tiếp cận các vấn đề một cách dễ dàng Nói cách khác lập trình hướng đối tượng chính là mô hình thu nhỏ của thế giới thực dưới góc độ nhìn nhận của con người
Trọng tâm của lập trình hướng đối tượng là ở khái niệm về đối tượng (object)
chứ không phải là khái niệm chức năng Tất cả mọi vật, hiện tượng tồn tại xung quanh
ta khi đưa vào chương trình đều được gọi chung là đối tượng Ví dụ, ta có đối tượng sinh viên, đối tượng sách khoa học, trong vấn đề sinh học đối tượng có thể là gene, record, báo cáo khoa học …
Như đã nói trên, đối tượng chính là các sự vật hiện tượng thật trong cuộc sống, do
đó, nó có các đặc điểm, tính chất để phân biệt với các đối tượng khác và trong lập trình
hướng đối tượng nó được gọi là thuộc tính (attribute) Để làm rõ ta có thể có các ví dụ
về thuộc tính của một số đối tượng như sau:
- lớp
- mã số sinh viên
Trang 7PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình hướng đối tượng 37
Đối tượng nào có thuộc tính nào thì chỉ thực hiện các hành vi phù hợp với thuộc tính mà nó có Những hành vi không phù hợp phải thuộc về một đối tượng nào khác
mà có thuộc tính phù hợp để thực hiện nhiệm vụ đó Như sách chỉ dùng để đọc và xe dùng để lái mà không thể làm ngược lại nghĩa là ta chỉ có thể thực hiện “đọc sách lái xe” chứ không thể “lái sách đọc xe” Trong lập trình hướng đối tượng các chức năng, nhiệm vụ này gọi là hàm
Ví dụ:
Đối tượng Student có các hàm :
gotoSchool() // đi học
learn() // học bài Thay vì xem mỗi sinh viên là một object điều này sẽ giúp ta dễ dàng xác định chính xác đó là sinh viên nào và nó hoàn toàn độc lập với các object khác
Tóm lại, lập trình hướng đối tượng đã bổ sung được những điều mà lập trình cấu trúc còn hạn chế, nó giúp ta quản lý và tiếp tục phát triển chương trình cho phù hợp với các yêu cầu mới phát sinh một cách dễ dàng Hơn thế nữa các nhà phát triển phần mềm có thể hoàn toàn không biết về nhau nhưng điều đó không hề gây khó khăn bởi lập trình hướng đối tượng là mô hình thu nhỏ của thế giới và nó nhìn nhận cũng như phân tích vấn đề xảy ra như bộ não con người Vì thế muốn chương trình của mình có thể phù hợp và phát triển bền vững thì lập trình hướng đối tượng là chọn lựa tốt nhất hiện nay
Trang 8PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình hướng đối tượng 38
Ví dụ: Xác định chức năng f() của ký tự A trong sinh học
- Đối với lập trình cấu trúc
define f() {
if (A of DNA) then
else if (A of RNA) then
else # A of Protein
}
- Đối với lập trình hướng đối tượng
Ta có 3 đối tượng DNA, RNA, và Protein Ba đối tượng này có thể gọi chung là một đại-phân-tử Cho trước một đại-phân-tử bất kỳ, muốn gọi thi hành một chức
năng f nào đó, ta không cần kiểm tra xem đó là DNA, RNA hay Protein Ta chỉ cần gọi đại-phân-tử.f() thì đối tượng đại-phân-tử sẽ cho ra kết quả phù hợp với bản chất của
nó
đại-phân-tử.f()
Cách tiếp cận này sẽ trở nên đơn giản nếu chúng ta phải thực hiện nhiều hàm
khác nhau trên đối tượng đại-phân-tử, chẳng hạn g(), h(), … Khi đó, ta không
phải mất sức nhớ và kiểm tra xem đại-phân-tử đó là DNA, RNA, hay Protein Điều
này giải phóng phần nào năng lực tư duy của người lập trình
Trang 9PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình Perl 39
III.2 Ngôn ngữ lập trình Perl dùng trong Bioinformatics
III.2.1 Giới thiệu Perl
Perl (Pratical Extraction and Reporting Language) là ngôn ngữ đa năng, hữu dụng Perl được dùng xử lý các tập tin, CGI, …đặc biệt hỗ trợ rất mạnh trong việc xử
Để soạn thảo ngôn ngữ Perl, ta có thể dùng các phần mềm soạn thảo như: UltraEdit, Notepad, EditPlus, Perl Builder, …
Để chạy chương trình Perl, ta dùng các dòng lệnh trên MS-DOS
III.2.2 Thành phần cơ bản trong Perl
1 Kiểu dữ liệu vô hướng (Scalar data)
a Kiểu số:
Ví dụ: 1, 109, 1.5e5…
b Kiểu chuỗi:
Chuỗi là một loạt các ký tự liên tiếp từ bộ 256 ký tự ASCII có sẵn
Ví dụ: „Đây là chuỗi trình tự DNA‟, hay ta có thể viết “Đây là chuỗi trình tự DNA” Chuỗi có thể đặt trong dấu „‟ hay “”
c Biến vô hướng:
Biến vô hướng dùng để lưu giá trị dữ liệu vô hướng trong quá trình tính toán, thực hiện chương trình
Biến vô hướng phải bắt đầu tên biến với ký tự “$”
Sau ký tự “$” phải có ít nhất một mẫu tự, và mẫu tự bắt đầu không được
là ký tự số
Tên biến có sự phân biệt giữa chữ hoa và chữ thường
Ví dụ: $a, $A, $DNA, $number2…
Trang 10PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình Perl 40
$DNA=„actacacagt‟
2+3 5-6 4*2 10/5 5**3
Các toán tử so sánh: kết quả trả về là true hay false
Áp dụng
đối với số
Áp dụng đối với chuỗi
Trang 11PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình Perl 41
2 Các cấu trúc điều khiển
a Câu lệnh điều kiện:
Trang 12PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình Perl 42
Khối lệnh cần thực hiện;
}
Nếu biểu thức 1 là đúng thì khối lệnh 1 đƣợc thực hiện, nếu không sẽ kiểm tra biểu thức 2 Nếu biểu thức 2 đúng thì khối lệnh 2 đƣợc thực hiện…Nếu không biểu thức nào đƣợc thỏa mãn, khối lệnh trong biểu thức else đƣợc thực hiện
Trang 13PHẦN B: TỔNG QUAN – Cơ sở tin học – Lập trình Perl 43
c Vòng lặp “for”:
Vòng lặp for thường dùng để xác định số lần mà khối lệnh muốn thực hiện
for (biểu thức 1; biểu thức điều kiện; biểu thức 2){
khối lệnh cần thực hiện;
}
Vòng lặp sẽ dừng lại khi “biểu thức điều kiện” là sai
3 Mảng và Bảng băm (Array and Hash)
3.1 Mảng
a) Giới thiệu:
Biến mảng giống như biến vô hướng, nó được tạo ra để lưu dữ liệu Tuy nhiên dữ liệu là một danh sách (list) (danh sách là một nhóm dữ liệu vô hướng được sắp xếp theo thứ tự)
Mở đầu biến mảng là ký tự “@”, và các quy tắc đặt tên cho biến mảng cũng tương tự như đặt tên cho biến vô hướng
Ví dụ:
@a;
@a = (1, 2, 3, $x, $y);
Các phần tử của mảng được đánh số từ 0, như mảng trên 1 ở vị trí 0, 2 là vị trí 1…
Truy cập đến một phần tử trong mảng: $a[0] truy cập đến phần tử thứ 0,
$a[1] truy cập đến phần tử thứ 1 của mảng
Nhập phần tử vào mảng từ bàn phím: @array = <STDIN>;
b) Một số hàm thao tác trên mảng:
Tìm chiều dài mảng:
$chieudai = scalar (@a);
Hoặc $chieudai = ($#a +1);
Tìm chỉ số phần tử cuối cùng của mảng:
$chisophantucuoi = $#a;
Hàm sort, sắp xếp thứ tự:
@b = sort (@a);