Sunday, October 12, 2008

Segmentation fault

Quoted from wikipedia:

A segmentation fault (often shortened to segfault) is a particular error condition that can occur during the operation of computer software. A segmentation fault occurs when a program attempts to access a memory location that it is not allowed to access, or attempts to access a memory location in a way that is not allowed (for example, attempting to write to a read-only location, or to overwrite part of the operating system). Systems based on processors like the Motorola 68000 tend to refer to these events as address or bus errors.

Segmentation is one approach to memory management and protection in the operating system. It has been superseded by paging for most purposes, but much of the terminology of segmentation is still used, "segmentation fault" being an example. Some operating systems still have segmentation at some logical level although paging is used as the main memory management policy.

On Unix-like operating systems, a process that accesses invalid memory receives the SIGSEGV signal. On Microsoft Windows, a process that accesses invalid memory receives the STATUS_ACCESS_VIOLATION exception, and usually a window asking the user to send an error report to Microsoft appears.

------------

Well, worth learning huh?

That's the error I got when running Matt to align 3 pdb structures. Omg, how can I fix such a mass of c library without no knowledge about the language? Hehe, the final way is nothing other than emailing the author. OMG, I' ve just remember that the author was not at the same institute when he wrote this any longer. OMG, then... what to do next???

Tuesday, August 12, 2008

Linux loadable kernel modules (LKM)

15. Giới thiệu các modules

15.1 Trình phiên dịch thi hành (Executable interpreters)

Bạn phải có ít nhất một trình phiên dịch thi hành gắn vào kernel cơ sở, vì để load một LKM phiên dịch thi hành (executable interpreter LKM), bạn cần phải thực thi một lệnh, và do đó, cần có chương trình để phiên dịch lệnh thực thi này.

Trình này gần như hiển nhiên là ELF, vì hầu hết các lệnh thực thi trong hệ thống Linux là ELF.

Trước khi ELF tồn tại trên Linux, dạng lệnh thực thi thông thường là a.out. Có một thời gian ngắn, các hệ thống nửa-ELF/nửa-a.out khá thông dụng. Một số vẫn còn tồn tại.

15.1.1. binfmt_aout: EI cho dạng a.out

a.out là định dạng thực thi phổ biến trong những ngày đầu của Linux và từng là định dạng duy nhất của Linux. Cho đến ngày nau, tên mặc định của các file xuất thực thi của một trình biên dịch GNU (GNU compiler) là a.out (bất kể chúng có định dạng gì).

Nếu bạn thử chạy một file thực thi a.out mà không cần EI, lệnh hệ thống exec sẽ không thực hiện được và báo lỗi "cannot execute binary file".

Không có tham số LKM

Ví dụ:


modprobe binfmt_aout


15.1.2 binfmt_elf: EI cho định dạng ELF

ELF là định dạng thực thi thông thường trên các hệ thống Linux.

Gần như không thể nào không có EI này trong kernel cơ sở của bạn (nếu không còn lý do nào khác thì: insmod là một file thực thi dạng ELF!). Tuy nhiên, về lý thuyết, có thể bỏ nó ra khỏi kernel cơ sở và đưa nó vào như một LKM.

Không có tham số LKM.

VD:

modeprobe binfmt_elf

15.1.3 binfmt_java: EI cho Java bytecode

Java là một ngôn ngữ lập trình hướng đối tượng khá hiện đại. Những chương trình Java truyền thống được biên dịch thành các "Java bytecode", nghĩa là cần phiên dịch bởi một trình phiên dịch Java bytecode. Điếm quan trọng đối với ngôn ngữ hướng đối tượng mới này là các file đối tượng hoàn toàn linh động: chúng có thể được chạy trên mọi hệ thống, miễn là hệ thống đó có một trình phiên dịch bytecode.

Trong khi dự tính ban đầu là trình phiên dịch bytecode sẽ chạy như một chương trình người dùng, với LKM này, bạn có thể làm cho kernel linux phiên dịch file thực thi Java như bất kỳ một file thực thi nào khác. Và vì vậy, bạn có thể chạy một chương trình biên dịch từ Java cũng như chương trình biên dịch từ C, tức là gõ tên chương trình tại dấu đợi lệnh của giao diện dòng lệnh.

Thực tế, lợi ích của ngôn ngữ bytecode trung gian vẫn chưa được chứng minh. Và thường, Java được biên dịch hẳn thành một file thực thi truyền thống như ELF. Nếu làm như vậy, bạn sẽ không cần tới binfmt_java.

Không có tham số LKM.

VD:
modeprobe binfmt_java

15.2. Block device drivers

15.2.1. floppy: floppy disk driver

Đây là driver thiết bị cho ổ đĩa mềm. Bạn sẽ cần đến driver này để có thể truy xauất một đĩa mềm. Tài liệu về LKM này được ghi trong README.fd đặt trong linux/drivers/block directory.

Lưu ý rằng nếu bạn boot từ đĩa mềm hay có hệ thống file root trên một đĩa mềm, bạn phải đưa driver này vào kernel cơ sở.

[ ... ]

15.2.2 loop: loop device driver

Module này cho phép bạn tổ chức một filesystem được lưu trữ dưới dạng file thông thường (trong một filesystem khác). File này được gọi là backing file.

Một ứng dụng của việc này là kiểm tra một filesystem ISO 9660 trước khi ghi chính thức lên một CD. Bạn xây dựng một filesystem trong một file thông thường 650MB. File này sẽ được đưa vào một chương trình ghi đĩa CD. Nhưng bạn có thể định nghĩa một loopback device dựatre6n file này như một backing file và sau đó tổ chức filesytem từ backing file.

Bạn cũng có thể dùng loop device để chuyển các tập hợp file qua một hệ thống mạng. Nó giống như một file .tar, chí khác là bạn không cần phải gói và mở gói. Bạn chỉ cần tổ chức lại file nguyên thủy.

Một số người dùng các loop device trên một hệ thống khi thì chạy WIndows, khi thì chạy Linux, để có thể duy trì hệ thống Linux thông qua hệ thống Windows: đặt một root filesystem vào một file trong hệ FAT để windows có thể truy xuất, sau đó tổ chức hệ thống Linux thông qua một loop device khi Linux đang chạy.

Bạn có thể giữ filesystem mã hóa hoặc nén, hoặc bất cứ cách biến đổi nào, trong một backing file. Loop device mã hóa khi bạn ghi vào, và giãi mã khi bạn truy xuất. Một chiến lược khác khá phổ biến để mã hóa và nén một filesystem là sử dụng một định dạng filesystem đã nén hoặc mã hóa, chẳng hạn như Cfs, Tcfs, Stegfs.

Một hệ thống mã hóa được dựa trên một hàm chuyển (transfer function). Có hai hàm chuyển sẵn có trong một loop module: identify (dùng cho trường hợp mã hóa thông thường: những gì bạn thấy trong loop device chính xác là những gì có trong backing file) và hàm mã hóa XOR đơn giản. Một module độc lập khác có thể bổ sung vào bất kỳ chức năng chuyển nào bằng cách gọi hàm loop_register_transfer() trong loop module.

Tuesday, August 5, 2008

[Chapter 20] Web automation - Perl cookbook

20.1 Truy xuất một URL từ một perl script

Vấn đề
Dùng một script để truy xuất đến một url

Giải pháp
Sử dụng hàm get từ module LWP::Simple.
use LWP::Simple$content = get($url)

Thảo luận
Hàm get trong LWP::SImple trả về undef nếu có lỗi, nên ta có thể kiểm tra lỗi như sau:

use LWP::Simple;
unless (defined ($content = get $url) ) {
die "could not get $url\n";
}

Tuy nhiên, với cách trên, ta không thể xác định được nguyên nhân gây lỗi. Để có được khả năng này cũng như một số xử lý tinh tế hơn, chúng ta cần dùng các module khác.Ví dụ 20.1 là một chương trình truy xuất một tài liệu từ xa. Nếu thất bại, chương trình sẽ xuất ra dòng trạng thái lỗi, ngược lại xuất ra tiêu đề của tài liệu và số byte có trong nội dung. Ở đây chúng ta sử dụng 3 module từ LWP và 1 module khác.

LWP::UserAgent
Module này tạo ra một trình duyệt ảo. Đối tượng trả về từ hàm new được dùng để tạo một request thực. Tên của trạm trình duyệt ảo được đặt là "Schimozilla/v9.14 Platinum" để webmaster thấy ganh tị khi họ kiểm tra file log. :))

HTTP::Request
Là đối tượng được trả về khi trạm người dùng (user agent) chạy request. Dùng để kiểm tra nội dung và lỗi.

URI::Heuristic
Module tí hon này sử dụng thuật toán đoán theo kiểu Netscape để mở rộng các URL chưa hoàn chỉnh. Ví dụ:
Đơn giản Đoán
perl http://www.perl.com/
www.oreilly.com http://www.oreilly.com/
ftp.funet.fi ftp://ftp.funet.fi/
/etc/passwd file:/etc/passwd

Mặc dù những địa chỉ này không phải là những url hợp lệ, Netscape cố đoán url chính xác của chúng. Hầu hết các browser khác cũng làm tương tự.
Source

#!usr/bin/perl# titlebytes - tim tieu de va kich thuoc cua tai lieu
use warnings;
use LWP:::UserAgent;

use HTTP::Request;
use HTTP::Response;
use URI::Heuristic;
my $raw_url = shift or die "usage: $0 url\n";

my $url = URI::Heuristic::uf_urlstr($raw_url);
$ = 1; # flush dòng kế tiếp

printf "%s =>\n\t", $url;

my $ua = LWP::UserAgent->new();
$ua->agent("Schmozilla/v9.14 Platinum"); # đợi đi, thế nào cũng có
my $req = HTTP::Request->new(GET => $url);$req->referer("http://wizard.yellowbrick.oz"); # tung hoả mù cho các chương trình phân tích log
my $response = $ua->request($req);

if ( $response->is_error() ) {
printf " %\n", $response->status_line;
} else {
my $count;
my $byte;
my $content = $response->content();
$bytes = length $content;
$count = ($content =~ tr/\n/\n/);
printf "%s (%d lines,%d bytes)\n", $response->title(), $count, $byte;
}

Khi chạy, chương trình sẽ cho ra kết quả như sau:

% titlebytes http://www.tpj.com/

http://www.tpj.com/ =>
The Perl Journal (109 lines, 4530 bytes)

Xem thêm

Tài liệu CPAN về LWP::Simple, trang hướng dẫn của lwpcook đi kèm với LWP; tài liệu của các module LWP::UserAgent, HTTP::Request, HTTP::REsponse, URI::Heuristic, công thức 20.2.

[Chapter 20] Web automation - Perl cookbook

20.0 Giới thiệu

Chương này tiếp cận Web từ một hướng khác so với chương 19 (CGI programing): thay vì trả lời một yêu cầu từ trình duyệt, ở đây chúng ta giả làm một trình duyệt, phát sinh yêu cầu và xử lý kết quả trả về. Vì các giao thức mạng và các định dạng tài liệu rất phức tạp, chúng ta sẽ tận dụng các module sẵn có để đơn giản hoá quá trình này và có thể tập trung vào chương trình của mình.

Những module thích hợp có thể tìm thấy tại http://www.perl.com/CPAN/modules/by-category/15_World_Wide_Web_HTML_HTTP_CGI/

Có những module dùng để kết toán thẻ tín dụng, tương tác với Netscape hay API của server Apache, xử lý bản đồ hình ảnh, kiểm tra tính hợp lệ của HTML, thao tác MIME. Những module lớn nhất và quan trọng nhất đối với chương này được tìm thấy trong bộ module libwww-perl, gọi tắt là LWP. Sau đây là một số module được tích hợp trong LWP:

Các module HTTP và LWP cho phép thực hiện một yêu cầu tài liệu từ một server. Cụ thể, module LWP::Simple cung cấp một cách thức dơn giản đế lấy về một tài liệu. Tuy nhiên , module này không có khả năng truy xuất đến từng thành phần riêng biệt của một trả lời http. Để có thể truy xuất các thành phần này, cần dùng đến TTP::Request, HTTP::Response và LWP::UserAgent.








ModuleMục đích
LWP::UserAgentwww user agent class
LWP::RobotUAPhát triển các ứng dụng robot
LWP::Protocolgiao tiếp với các kiểu giao thức khác nhau
LWP::Authen::BasicXử lý các trả lời 401 và 407
LWP::MEdiaTypescấu hình các kiểu MIME (text/html, ...)
LWP::Debugdebug logging module
LWP::Simplegiao tiếp với các giao thức đơn giản cho các hàm chung
HTTP::Headerscác dạng header MIME/RFC822
HTTP::Messagemessage dạng HTTP
HTTP::RequestHTTP request
HTTP::ResponseHTTP response
HTTP::Deamon1 lớp HTTP server
HTTP::Statusmã status HTTP
HTTP::Datelấy ngày từ định dạng ngày http
HTTP::NegotiateHTTP content negotiation calculation
HTTP::RobotRulesđọc các file robot.txt
File::Listingđọc danh sách liệt kê thư mục


Liên hệ chặt chẽ với LWP nhưng không được phát hành chung với LWP là các module HTML. Các module này cho phép diễn dịch tài liệu HTML. Chúng cung cấp nền tảng cho các recipe được giới thiệu trong phần 20.5, 20.4, 20.3 và 20.7

Recipe 20.12 đưa ra một rehular expression để giải mã các trường trong file log của web server và trình bày cách diễn dịch các trường này. Regular expression này được sử dụng cùng với module Logfile::Apache trong recipe 20.13 để trình bày hai cách tóm lược dữ liệu trong log file của web server.

Linux loadable kernel modules (LKM)

4. Công cụ LKM

Chương trình cần để load, unload và thực hiện các tác vụ khác với LKM nằm trong gói modutils. Bạn có thể tìm thấy gói này trong thư mục modutils tại đây

Gói này chứa những chương trình sau giúp bạn sử dụng LKM:

insmod gắn một LKM vào kernel
rmmod gỡ một LKM khỏi kernel
depmod xác định sự phụ thuộc lẫn nhau giữa các LKM
kerneld chương trình kernel daemon
ksyms thể hiện các symbol được kernel xuất ra để các LKM mới sử dụng
lsmod liệt kê các LKM đang được load
modinfo thể hiện nội dung của phần .modinfo trong file object LKM
modprobe gắn hoặc gỡ một LKM hay một bộ các LKM một cách thông minh. Ví dụ, nếu bạn phải load A trước khi load B, modprobe sẽ tự động load A rồi mới load B.

Thay đổi trên kernel thường yêu cầu kèm theo thay đổi trên modutils, vì vậy hãy chắc chắn bạn đang sử dụng phiên bản mới nhất của modutils khi bạn nâng cấp kernel. modutils luôn luôn tương thích ngược (hoạt động với các kernel cũ hơn).

Cảnh báo: modprobe sẽ khởi động insmod với vị trí cố định trong code là /sbin/insmod. Có thể có những PATH không được modutils sử dụng để tìm kiếm chương trình. Vì vậy hãy chỉnh sửa code của modutils trước khi bạn xây dựng, hoặc bảo đảm bạn sẽ cài đặt chương trình vào các thư mục truyền thống.

Linux loadable kernel modules (LKM)

vietnamized and note-taking version of Linux Loadable Kernel Module HOWTO

3.Tạo LKM


Một LKM nằm trong một file đối tượng ELF (thường được đặt tên theo dạng serial.o) Thông thường bạn lưu tất cả file object LKM trong một thư mục nhất định (gần file image của kernel cơ sở). Khi dùng chương trình insmod để chèn một LKM vào kernel, bạn cần đưa vào tên của file đối tượng đó.

Đối với các LKM là một phần của linux, bạn xây dựng chúng cùng lúc với việc tạo image của kernel cơ sở. Đọc file README trong cây thư mục chứa source Linux. Ngắn gọn, sau khi tạo image cho kernel cơ sở với một lệnh (chẳng hạn như make zImage, bạn sẽ tạo tiếp tất cả các LKM với lệnh

make modules

Lệnh này sẽ cho ra một loạt các file đối tượng LKM *.o trong cây thư mục chứa source Linux. (Trong những phiên bản cũ của Linux, sẽ có link trong thư mục modules trỏ đến tất cả các file này. Những LKM này đã sẵn sàng để được load, nhưng có thể bạn sẽ muốn cài đặt chúng trong những thư mục thích hợp hơn.

Một trong những công việc cần làm để cấu hình kernel (lúc xây dựng) là chọn những phần nào của kernel để đưa vào kernel cơ sở và những phần nào để tạo LKM độc lập. Trong quá trình cấu hình cơ bản theo dạng hỏi-trả lời ( make config ), với mỗi phần tuỳ chọn của kernel, bạn sẽ được chọn Y - để tích hợp vào kernel cơ sở, hay M - để tạo module độc lập, hay N - bỏ qua hoàn toàn. Những cách cấu hình khác cũng tương tự.

Như đã giải thích trong phần 2.3, bạn chỉ nên đưa vào kernel cơ sở những phần tối thiểu, và bỏ qua những phần chắn chắn là bạn không cần tới. Không mất mát gì nhiều nếu bạn tạo một LKM mà bạn không dùng tới. Chỉ là một ít thời gian biên tập (compile), một ít không gian lưu trữ, và khả năng lỗi trong module đó làm cản trở quá trình xây dựng kernel.

Cũng trong bước cấu hình, bạn phải chọn có sử dụng symbol versioning hay không. Lựa chọn này ảnh hường đến cả việc xây dựng kernle cơ sở lẫn LKM, và bạn nhất thiết phải chọn đúng. (Xem phần 6).

Monday, August 4, 2008

Developing bioinformatics computer skills - 14.7

14.7 Khai khóang dữ liệu và thông tin sinh học

Một trong những lĩnh vực hứng thú nhất của sinh học hiện đại là việc ứng dụng khai khoáng dữ liệu vào các cơ sở dữ liệu sinh học. Rất nhiều phương pháp trong số này cũng đồng thời rơi vào lĩnh vực máy học (máy học - tên gọi phổ biến trong lĩnh vực trí tuệ nhân tạo, chỉ các chương trình thay đổi dần hoạt động để thích nghi với dữ liệu được tiếp xúc). Ở đây giới thiệu tóm tắt một vài phương pháp đã xuất hiện gần đây trong những công trình liên quan đến tin - sinh học. Danh sách này chưa đầy đủ, nhưng cũng hy vọng tạo một điểm xuất phát để bước vào lĩnh vực đang phát triển này.

Xin lưu ý rằng: cách nói nhân cách hóa đã thâm nhập khá sâu vào lĩnh vực khai khoáng dữ liệu và máy học. Tuy nhiên, không có gì bí ẩn ở đây. Các chương trình 'học' hay 'được huấn luyện', chỉ có nghĩa là chúng tuân theo những bộ lệnh được định nghĩa rõ ràng. Cũng như với bất kì công cụ nào được giới thiệu trong quyển sách này, công cụ khai khoáng dữ liệu chỉ nhằm hỗ trợ, chứ không thay thế, cho kiến thức và trực giác của con người. Không có chương trình nào đủ thông minh đến mức có thể lấy vào một mớ dữ liệu thô rồi phát sinh ra những kết quả thú vị và có đủ chất lượng để công bố trên tạp chí khoa học. Như đã nhấn mạnh , việc tạo ra những câu hỏi có ý nghĩa, thiết kế thí nghiệm và diễn giải kết quả hoàn toàn là trách nhiệm của bạn.

14.7.1 Các vấn đề trong khai khoáng dữ liệu và máy học

Các chủ để khai khóang dữ liệu đã được các nhà thống kê học và toán học ứng dụng nghiên cứu trong nhiều thập kỷ. Chính vì vậy, ranh giới giữa thống kê và khai khoáng dữ liệu trở nên cực kỳ mờ nhạt. Nếu bạn làm việc với các kỹ thụât khai khoáng dữ liệu hay phương pháp máy học, bạn sẽ muốn đào sâu vào các kỹ thuật thống kê cổ điển. Nếu vấn đề của bạn có thể giải quyết bằng thuật tóan khai khoáng dữ liệu mới nhất hay một phép tính thống kê đơn giản, rất có thể bạn sẽ chọn phép tính đơn giản. Tương tự như vậy, hãy tránh bị cám dỗ bởi việc tự thiết lập các phương pháp tính điểm của riêng bạn trước khi tham khảo một quyển sách thống kê để xem liệu một phương pháp thích hợp đã có hay chưa. Trong cả hai trường hợp, sẽ dễ dàng hơn cho bạn khi tìm lỗi cũng như khi lý giải lựa chọn của bạn đối với người cộng tác.

14.7.1.1 Máy học có-hướng-dẫn và không-hướng-dẫn

Các phương pháp máy học có thể được chia thành 2 nhóm lớn: học có-hướng-dẫn và không-hướng-dẫn. Học có-hướng-dẫn là trường hợp một thuật toán máy học được đưa vào các dữ liệu mẫu đã gắn nhãn đúng để làm dữ liệu luyện, và được kiểm tra bằng các mẫu chưa gắn nhãn. Học không-hướng-dẫn là trường hợp chỉ cung cấp dữ liệu mà hòan tòan không có thêm thông tin gì về dữ liệu. Mục tiêu của thuật toán là tìm ra các mô hình chung hoặc các xu hướng của dữ liệu, nhằm hỗ trợ cho việc hiểu dữ liệu. Ví dụ như chương trình MEME giới thiệu trong chương 8 là một chương trình học không-hướng-dẫn, mục tiêu tìm ra các motif trình tự từ những trình tự chưa được sắp gióng, tức là trong điều kiện không rõ trình tự có dạng chung hay không, xác định xem dạng chung nằm ở đâu và như thế nào.

Phân tích cluster là một dạng khác của máy học không-hướng-dẫn. Phương pháp này đã được chú ý trong lĩnh vực phân tích dữ liệu microarray. Clustering là một thủ tục phân loại dữ liệu sao cho các thành phần giống nhau nằm trong cùng một nhóm, trong điều kiện chưa biết thực tế có những nhóm như thế nào. Đây là một phương pháp chuẩn để làm việc với dữ liệu đa chiều.

14.7.2 Một số phương pháp khai khoáng dữ liệu

Trong phần này, chúng tôi mô tả một số phương pháp khai khoáng dữ liệu thường được báo cáo trong các tài liệu tin - sinh học. Mục tiêu của phần này là tóm lược các kỹ thuật phức tạp dùng trong phân tích dữ liệu. Chúng tôi không mong bạn có thể cài đặt các thuật toán này bằng cách sử dụng một ngôn ngữ lập trình nào đó. Tuy nhiên, nếu bắt gặp bất cứ phương pháp nào trong số này được sử dụng trong một báo cáo khoa học, bạn sẽ có thể nhận ra phương pháp và nếu cần, có thể đánh giá cách chúng được áp dụng. Cũng như bất kì kỹ thuật nào trong sinh học thực nghiệm, quan trọng là bạn phải hiểu những phương pháp máy học để biết được chúng có được áp dụng hợp lý và đúng đắn hay không.

14.7.2.1 Cây quyết định

Ở dạng đơn giản nhất, một cây quyết định là một loạt các câu hỏi có-không được sắp xếp phân cấp để dẫn đến một quyết định. Ví dụ, để quyết định liệu một đoạn DNA có phải là gene hay không, chúng ta sẽ cần một cây quyết định giống như trong hình 14.6.

Một cây quyết định như thế này rất dễ chạy, vì chúng có một số xác định các khả năng tại mỗi điểm nhánh, và mọi con đường đi qua cây đều đưa đến một quyết định. Cấu trúc cây và các quy luật tại mỗi nhánh được xác định từ dữ liệu, bằng thuật toán máy học. Phương pháp luyện một cây quyết định được mô tả bởi Leo Breiman và đồng sự vào đầu những năm 1980, sau trở nên phổ biến nhờ J. R. Quinlan, tác giả của phần mền C4.5 miễn phí và C5 - những phần mềm chuẩn mực trong lĩnh vực cây quyết định.

Một ưu điểm chính của cây quyết định là chúng tạo ra các kết quả mà con người có thể diễn giải được. Đây là một đặc điểm quan trọng, vì các chuyên gia có thể nhìn vào một cây quyết định và đánh giá liệu một mô hình đã học có đúng trong các điều kiện thực hay không. Trong sinh học có xu hướng các hàm phân loại dạng cây trong các vấn đề tìm mẫu chung (pattern regconition), ví dụ như tìm các vị trí splice của gene, xác định họ cho các protein chưa được phân loại. MORGAN genefinder được phát triển bởi Steven Salzberg và đồng sự là một ví dụ vế ứng dụng cây quyết định trong tìm kiếm gene.

14.7.2.2 Mạng neuron

Mạng neuron là mô hình thống kê sử dụng trong pattern regconition và phân loại. Được phát triển đầu tiên vào năm 1940 như một mô hình toán học của trí nhớ, mạng neuron đôi khi còn được gọi là mô hình kết nối, vì chúng được biểu diễn bằng các node (thường là các biến) được nối với nhau bằng các hàm có trọng số. Hình 14.7 thể hiện quá trình xây dựng một mạng neuron. Chú ý rằng, không có gì liên quan đến neuron trong mô hình này, các node và liên kết giữa chúng cũng không phải là thực thể vật lý. Ý tưởng đằng sau mạng neuron là, bằng cách làm việc phối hợp, các phần tử xử lý đơn giản có thể thực hiện được những phép tính phức tạp hơn.

Một mạng neuron bao gồm một tập hợp các node liên kết nhau theo một dạng hình học xác định, trong đó mỗi node đều có liên kết vào và liên kết ra đối với các node khác. Tổng quát, một mạng neuron sẽ nhận tín hiệu vào , thiết lập giá trị cho các node ở lớp đầu tiên; các giá trị này được phát tán nhờ các hàm chuyển (các liên kết) để đến lớp tiếp theo... cho đến khi chạm đến lớp tín hiệu ra. Dạng của tín hiệu ở lốp đầu ra chính là kết quả của mạng.

Mạng neuron được dùng rất nhiều trong các vấn đề sinh học, ví dụ như PHD, PSIPRED trong dự đoán cấu trúc bậc 2, GRAIL genefinder (chương 7).

14.7.2.3 Thuật toán di truyền

Thuật toán di truyền là thuật toán tối ưu hoá. Chúng tìm trong một lượng lớn các giải pháp khả dĩ để đưa ra giải pháp tốt nhất, trong đó 'tốt nhất' được xác định thông qua hàm chi phí hay hàm phù hợp. Cũng như mạng neuron, những mô hình nảy lấy cảm hứng từ các ý tưởng sinh học, nhưng hoàn toàn không có ý nghĩa sinh học bên trong. Trong thuật toán di truyền, một số lượng các giải pháp ứng cử được phát sinh ngẫu nhiên. Những giải pháp ứng cử này được xem như các nhiễm sắc thể. Những phần trên mỗi nhiễm sắc thể được trao đổi tương tự như tái tổ hợp ở nhiễm sắc thể thật. Chiến lược tái tổ hợp cuối cùng được đánh giá bằng hàm phù hợp, và những nhiễm sắc thể có điểm cao nhất sẽ được nhân lên qua thế hệ kế tiếp. Sự tái tổ hợp và nhân lên như vậy được lặp lại liên tục cho đến khi một giải pháp khá tốt được tìm thấy. Thuật toán di truyền thường được sử dụng trong mô phỏng phân tử, chẳng hạn như docking va gấp cuộn protein.

14.7.2.4 Support vector machine

Cuối 1998, một công cụ máy học gọi là SVM bắt đầu thu hút khá nhiều sự chú ý từ phía tin - sinh học. SVM được phát triển bởi Vladimir Vapnik, thuộc phòng thí nghiệm Bell Lab, và đã được ứng dụng trong nhiều vấn đề, từ nhận diện các ký tự quang cho đến phân tích tài chính và nhận diện spam. SVM được ứng dụng vào các vấn đề sinh học lần đầu tiên bởi Tommi Jaakola (hiện thuộc MIT), David Haussler và đồng sự tại UC Santa Cruz, trong việc phân loại trình tự protein. Từ đó chúng được ứng dụng trong nhiều vấn đề khác của tin - sinh học (dự đoán chức năng, dự đoán cấu trúc, tìm kiếm gene), nhưng được chú ý nhiều nhất là trong lĩnh vực phân tích microarray.
SVM là các hàm phân loại có-hướng-dẫn, nhằm mục tiêu tìm một phân cách tuyến tính giữa các nhóm điểm trong không gian đa chiều. Trong không gian 2 chiều, phân cách này là 1 đường thẳng; trong không gian 3 chiều là mặt phẳng. Tổng quát, mặt phân cách này được gọi là một siêu phẳng. SVM có hai đặc điểm: (1) Không chỉ tìm ra siêu phẳng phân cách, chúng còn đảm bảo tìm ra siêu phẳng tối ưu, tức là siêu phẳng mà vị trí của nó tạo ra sự phân cách lớn nhất giữa hai nhóm. Các điểm dữ liệu nằm gần biên giới nhất gọi là các support vector; (2) dù SVM là hàm phân loại tuyến tính, chúng có thể phân loại các điểm dữ liệu không tuyến tính bằng cách chuyển các điểm dữ liệu vào không gian nhiều chiều hơn.

Wednesday, July 23, 2008

Linux loadable kernel modules (LKM)

vietnamized ^_^ and note-taking version of Linux Loadable Kernel Module HOWTO

1. Lời nói đầu

2. Giới thiệu Linux loadable kernel modules

Khi muốn bổ sung code vào một linux kernel, phương thức cơ bản nhất là đưa các file source vào source tree của kernel và biên tập lại (recompile) kernel. Và thực chất, quá trình cấu hình kernel chủ yếu là việc lựa chọn những file source để biên tập.

Có một cách khác để bổ sung code vào linux kernel trong quá trình vận hành. Một bộ code được bổ sung theo cách này được gọi là loadable kernel module. Các module này có thể có nhiều chức năng, thông thường rơi vào 1 trong 3 dạng: (1) driver thiết bị, (2) driver filesystem, (3) lệnh hệ thống (system calls). Một số chức năng nhất định (bao gồm các chức năng trên) được kernel tách biệt nhằm tránh sự đan cài phức tạp của chúng đối với những phần khác trong kernel.

2.1 Thuật ngữ

Loadable kernel module thường được gọi tắt là kernel module, hay module. Tuy nhiên, những cách gọi này rất dễ gây nhầm lẫn vì có rất rất nhiều dạng gói phần mềm cũng được gọi là module.

Một nhầm lẫn phổ biến về LKM là cho rằng đó là một phần riêng biệt nằm bên ngoài kernel và giao tiếp với kernel khi cần thiết. Tuy nhiên, LKM, khi được load lên, thực sự là một phần của kernel. Cách gọi chính xác cho phần kernel gắn kết với image khi boot (tức là toàn bộ kernel, trừ các LKM) là kernel cơ sở (base kernel), và LKM giao tiếp với kernel cơ sở.

Trong một số HĐH khác, khái niệm tương đương với LKM của linux là phần mở rộng kernel.

Vậy thì 'linux' là gì? Linux là tên gọi cho 2 khu vực rất khác nhau:
1. kernel và các yếu tố liên quan được phân phối dưới dạng một gói phần mềm, bởi Linux Torvald.
2. hệ thống các hệ điều hành dựa trên linux kernel

Trong phạm vi đang được nói đến, linux cần được hiểu theo nghĩa thứ 1. Mặc dù LKM luôn là một phần của kernel, LKM không nhất thiết là linux. Chẳng hạn, nếu kernel của bạn được bổ sung bằng một LKM driver đi kèm thiết bị, đó là một kernel linux được điều chỉnh chút đỉnh.

2.2. Lịch sử của LKM

LKM chỉ xuất hiện từ Linux 1.2 (1995). Những LKM ngày nay ban đầu cũng là một phần của kernel cơ sở.

Các driver thiết bị (hay đại loại vậy) luôn là các phần rời rạc. Khi khái niệm LKM được phát minh, người ta chỉ cần điều chỉnh chút ít để biến các thành phần rời rạc này thành những LKM thực sự. Tuy nhiên, công việc này cũng mất khá nhiều thời gian vì cần phải thực hiện trên từng thành phần một. Từ khoảng năm 2000 trở đi, hầu như mọi thứ có thể chuyển thành LKM đều có thêm lựa chọn LKM cho người dùng.

2.3. Khi nào cần LKM?

Người dùng thường có nhiều lựa chọn giữa việc gắn kết một thành phần rời vào kernel cơ sở hoặc dưới dạng LKM. LKM có rất nhiều ưu điểm so với việc gắn chết một thành phần vào kernel cơ sở, và thường luôn được lựa chọn bất cứ khi nào có thể.

Với LKM, bạn không cần xây dựng lại kernel quá thường xuyên, tiết kiệm thời gian và hạn chế khá nhiều sai sót trong giai đoạn tái xây dựng và cài đặt lại kernel cơ sở. Một khi đã có một kernel cơ sở tốt, bạn nên để nó yên càng lâu càng tốt.

Một lợi điểm khác của LKM là chúng giúp bạn chẩn đoán các trục trặc của hệ thống. Khi có lỗi (chẳng hạn do một driver thiết bị) trong kernel cơ sở, toàn bộ hệ thống sẽ ngưng hoạt động, không thể boot được, và bạn cũng không thể biết thành phần nào trong kernel cơ sở gây ra vấn đề. Tuy nhiên, nếu driver đó nằm trong một LKM, kernel cơ sở vẫn có thể chạy và chỉ gặp vấn đề khi load lên LKM bị lỗi.

LKM cũng giúp tiết kiệm tài nguyên nhớ, vì chúng chỉ được gọi khi thực sự cần thiết. Tất cả các thành phần của kernel cơ sở phải sẵn sàng trong mọi lúc, và phải nằm trong vùng nhớ thực, không phải vùng nhớ ảo.

LKM giúp cho việc bảo trì và sửa sai được nhanh chóng. Để có hiệu lực, các thay đổi trên một filesystem driver nằm trong kernel cơ sở yêu cầu toàn bộ hệ thống phải khởi động lại. Với LKM của filesystem driver đó, chỉ cần vài dòng lệnh để thay đổi, và không cần khởi động lại toàn hệ thống để xem hiệu quả những thay đổi đó.

LKM không chậm hơn các module trong kernel cơ sở. Việc gọi lên một LKM chỉ đơn giản là trỏ đến vị trí của LKM đó trên bộ nhớ.

Dĩ nhiên bạn buộc phải đưa một số module vào kernel cơ sở. Đó là những thành phần giúp cho hệ thống hoạt động được cho đến lúc có thể gọi ra LKM, ví dụ như driver của ổ đĩa chứa roort filesystem.

2.4. LKM không thể làm gì?

Có một xu hướng cho rằng LKM cũng giống như các chương trình người dùng. Thật sự chúng có nhiều điểm chung, nhưng LKM hoàn toàn không phải là chương trình người dùng, mà là một phần của kernel, có thể hoạt động khá tự do trong hệ thống, và do đó, cũng rất dễ làm sụp đổ hệ thống.

2.5. LKM được sử dụng trong trường hợp nào?

Có 6 lĩnh vực chính sử dụng LKM:
* Driver thiết bị. MỘt driver thiết bị được thiết kế cho một thành phần phần cứng cụ thể. Kernel sử dụng chúng đề giao tiếp với thành phần phần cứng đó mà không cần biết rõ cách thức phần cứng hoạt động. Ví dụ: driver cho ổ đĩa ATA, driver cho card mạng Ethernet tương thích với NE2000... Để sử dụng một thiết bị bất kì, kernel phải chứa driver của thiết bị đó.

* Filesystem driver. Một filesystem driver phiên dịch nội dung của filesystem (điển hình là nội dung của một ổ đĩa) thành file, thư mục hay các đơn vị quản lý đại loại như vậy. Có rất nhiều cách lưu trữ file và thư mục trên ổ đĩa, trên server, ... Với mỗi cách lưu trữ, cần có một filesystem driver.

* Lệnh hệ thống. Các chương trình trong khu vực người dùng sử dụng các lệnh hệ thống để gọi lên các dịch vụ cần thiết từ kernel. Hầu hết các lệnh hệ thống được tích hợp trong hệ thống và khá chuẩn mực, nên luôn được gắn vào kernel cơ sở. Nhưng nếu bạn tự tạo ra những lệnh hệ thống mới, hoặc muốn thay đổi một số cách thức hoạt động của linux và muốn đè lên các lệnh hệ thống sẵn có, bạn có thể cài đặt chúng vào kernel dưới dạng LKM.

* TTY line disciplines. Về cơ bản, đây là các hình thức nâng cao chất lượng (???) của driver cho các thiết bị đầu cuối (terminal device)

* Các trình phiên dịch có thể thi hành. Một trình phiên dịch có thể thi hành gọi lên và thi hành lệnh. Linux được thiết kế để có thể thi hành các lệnh dưới nhiều dạng khác nhau, và mỗi dạng cần có trình phiên dịch tương ứng.

Thursday, July 10, 2008

Developing bioinformatics computer skills - 10.6

Dịch từ 'Developing bioinformatics computer skills'

10.6 Dự đoán cấu trúc 3D

Như đã đề cập, dự đoán cấu trúc protein từ trình tự là một vấn đề phức tạp, và chưa có một phương pháp nào thoả mãn tất cả các thông số. Tuy nhiên, có một số công cụ có thể dùng dự đoán cấu trúc không gian. Những công cụ này được chia làm 2 loại: mô hình tương đồng (homology modeling) và dự đoán ab-initio.

10.6.1 Mô hình tương đồng

Khi có một trình tự protein (trình tự mục tiêu dùng để xác định cấu trúc), thực hiện sắp gióng cột trình tự này với một trình tự khác đã biết cấu trúc. Nếu có độ tương tự cao giữa 2 trình tự, ta có thể dùng cấu trúc đã biết trên như một khuôn mẫu cho trình tự mục tiêu, với độ tin cậy nhất định.
Có một quá trình chuẩn được sử dụng chung trong các chương trình dự đoán bằng mô hình tương đồng, gồm các bước:
  1. Sử dụng trình tự mục tiêu làm trình tự truy vấn để tìm các cấu trúc protein đã biết
  2. Sắp gióng cột toàn trình tự (và tối ưu) trình tự mục tiêu với (một hay nhiều) trình tự dùng làm khuôn mẫu
  3. Xây dựng khung sườn protein, sử dụng khung sườn của protein khuôn mẫu làm mô hình.
  4. Trong các vùng có gap (trên trình tự mục tiêu hay trình tự khuôn mẫu), sử dụng các thủ tục loop-modeling để thay thế các đoạn vói chiều dài thích hợp.
  5. Thêm chuỗi bên vào khung sườn
  6. Tối ưu hoá vị trí của các chuỗi bên
  7. Tối ưu hoá cấu trúc, sử dụng phương pháp cực tiểu năng lượng và các phương pháp tối ưu hoá bằng lý thuyết

Chìa khoá thành công trong một dự đoán với phương pháp này thường không nằm ở phần mềm hay server sử dụng, mà chủ yếu là ở kỹ năng của người dùng trong việc thiết kế một sắp gióng cột tốt, trong đó có thể kết hợp các phương pháp sắp gióng cột chuẩn, phương pháp profile, và các kỹ thuật so sánh cấu trúc (ví dụ ở cuối chương). Một khi đã có được sắp gióng cột tốt, ta có thể sử dụng nhiều chương trình để khai thác thông tin đó và xây dựng mô hình cấu trúc.

10.6.1.1 Modeller

Modeller (http://salilab.org/modeller/download_installation.html) là một chương trình sử dụng mô hình tương đồng không có giao diện đồ họa. Với mỗi hệ điều hành đều có nhiều file khác nhau đáp ứng các yêu cầu mô hình protein khác nhau (đọc README để biết giới hạn của từng file về tống số nguyên tử, tổng số amino acid và tổng số trình tự cho đầu vào sắp gióng cột)

Đầu vào cho Modeller gồm 2 file: 1 file sắp gióng cột và 1 Modeller script. Định dạng của file sắp gióng cột được nêu tả chi tiết trong trang hướng dẫn của Modeller. Modeller script cho một sắp gióng cột đơn giản chỉ gồm vài dòng viết bằng ngôn ngữ TOP (Modeller's internal language).

Modeller có thể tính toán ra nhiều mô hình cho một đầu vào bất kỳ. Nếu giá trị của ENDING_MODEL (xem script ví dụ) lớn hơn 1, sẽ có nhiều mô hình được phát sinh. Việc phát sinh nhiều mô hình thường được ưa chuộng hơn. Với các mô hình được phát sinh, người ta có thể đánh giá chúng một cách độc lập và chọn ra kết quả tối ưu.


Ví dụ dưới đây được cung cấp trong tài liệu hướng dẫn kèm theo của chương trình, cho thấy cách thiết lập cho một kết quả sắp gióng cột (đã xuất thành file) giữa trình tự mục tiêu với một trình tự đã biết.


INCLUDE # sử dụng các hàm TOP đã định nghĩa
SET ALNFILE = 'alignment.ali' # tên file chứa kết quả sắp gióng cột
SET KNOWNS = '5fd1' # mã của các trình tự khuôn mẫu
SET SEQUENCE = '1fdx' # mã của trình tự mục tiêu
SET ATOMS_FILES_DIRECTORY = './:../atom_files' # thư mục chứa file atom đầu vào
SET STARTING_MODEL = 1 # index của mô hình đầu tiên
SET ENDING_MODEL = 1 # index của mô hình cuối cùng ( => quyết định số lượng mô hình sẽ tính toán)
CALL_ROUTINE = 'model' # thực hiện tính toán với mô hình tương đồng

Modeller được thực thi bằng lệnh mod tên_script

Modeller có nhiều chức năng và có sẵn các lệnh hỗ trợ việc tạo file đầu vào.

SEQUENCE_SEARCH tìm các trình tự tương tự trong cơ sở dữ liệu các cấu trúc đại diện fold

MALIGN3D sắp gióng 2 hay nhiều cấu trúcALIGN sắp gióng 2 khối trình tự

CHECK_ALIGNMENT đánh giá một kết quả sắp gióng cột dùng cho việc xây dựng mô hình

COMPARE_SEQUENCES chấm điểm các trình tự trong sắp gióng cột dựa trên mức độ giống nhau từng đôi một

SUPERPOSE xếp chồng một mô hình lên một cấu trúc khuôn mẫu

ENERGY tính toán và báo cáo cá vi phạm về mặt năng lượng trong mô hình đã xây dựng

Các lệnh cần được thực thi thông qua một file script. (tham khảo thêm trong tài liệu hướng dẫn của Modeller)

Một điều cần lưu ý trong việc tính toán bằng mô hình tương đồng là vị trí các phân tử của chuỗi bên có thể không được chính xác, vì phương pháp này chủ yếu đưa ra dự đoán khung sườn protein với độ tin cậy chấp nhận được, mà không cung cấp thông tin về định hướng của chuỗi bên. Do đó, nhiệm vụ chính của các chương trình xây dựng mô hình là tránh các xung đột về mặt lập thể và các cấu trạng bất thường (thay vì tối ưu hoá định hướng của chuỗi bên). Định hướng chuỗi bên sai có thể dẫn đến sai lầm trong nghiên cứu cơ chế chức năng của protein.

10.6.1.2 Cách cây dựng mô hình của Modeller

Mặc dù Modeller chứa các công cụ cần thiết cho việc sắp goíng cột trình tự và tìm kiếm trên cơ sở dữ liệu, điểm bắt đầu thực sự của chương trình là một kết quả sắp gióng cột đa trình tự giữa trình tự mục tiêu và (các) trình tự khuôn mẫu.

Modeller sử dụng các cấu trúc khuôn mẫu để phát sinh một loạt các giới hạn về không gian để áp lên trình tự mục tiêu. Giới hạn cũng có thể áp dụng với góc liên kết và các cặp góc nhị diện. Bằng cách áp đặt những giới hạn này, Modeller có thể giảm số lượng các cấu trạng cho phép của mô hình.

Các giới hạn thực chất là dựa trên các phân tích thống kê về sự khác biệt giữa từng cặp trong các cấu trúc tương đồng, mô tả một cách định lượng mức độ khác biệt giữa các cấu trúc tương đồng về tính đa dạng. Ví dụ, lượng sai khác cho phép giữa khoảng cách tương đương Calpha-Calpha được biểu thị bằng PDF (probaility density function, hàm mật độ xác suất).

Việc sử dụng các giá trị tới hạn dựa trên PDF cho phép chúng ta xây dựng một cấu trúc không hoàn toàn giống như cấu trúc khuôn mẫu, mà là một cấu trúc có sự sai biệt với cấu trúc khuôn mẫu trong giới hạn cho phép, và phải nằm trong giới hạn khác biệt giữa những protein tương đồng đã biết cấu trúc. Ví dụ, nếu một góc nhị diện trong khuôn mẫu có giá trị là 60o +- 5o, thì giá trị tới hạn dựa trên PDF phải cho phép các giá trị trong khoảng 55 - 65. Giá trị tới hạn này được xác định thông qua phân tích trên các cặp cấu trúc tương đồng đã biết. (chỗ này cần coi thêm và giải thích lại)

Giới hạn không gian dựa trên mô hình tương đồng không phải là giới hạn duy nhất được áp đặt lên mô hình, mà còn có trường lực nhằm đảm bảo các điều kiện hợp lý trong hoá học lập thể (để các mô hình được xây dựng không vi phạm các định luật hoá học). Tất cả cac1 giới hạn hoá học và giới hạn không gian được phối hợp trong một hàm (gọi là hàm objective). Hàm này được tối ưu hoá trong quá trình cây dựng mô hình.

10.6.1.3 ModBase - cơ sở dữ liệu các mô hình phát sinh tự động

Các tác giả phát triển Modeller đã đưa lên một CSDL trực tuyến chứa các mô hình tương đồng được chú thích. Các mô hình này được chuẩn bị bằng cách sử dụng pipeline dư đoán tự 9dộng hoá. Bước đầu tiên của pipeline là so sánh từng trình tự protein chưa biết với một CSDL các cấu trúc đã có. Protein có sự tương đồng trình tự đáng kể so với các cấu trúc (hay domain) đã biết sẽ được mô hình hoá với khuôn mẫu là các cấu trúc đó. Trình tự chưa biết được sắp gióng với trình tự đã biết bằng ALIGN2D (một lệnh của Modeller), và cấu trúc 3D được xây dựng bằng chương trình Modeller. Bước cuối cùng trong pipeline là đánh giá mô hình. Kết quả đánh giá sẽ được trình bày cho người dùng đồng thời với kết quả truy vấn. Vì đây là thủ tục chuẩn để xây dựng mô hình bằng phương pháp này, bạn nên kiểm tra Modbase trước khi bắt tay xây dựng một mô hình theo yêu cầu của riêng mình.Thủ tục chung trong xây dựng mô hình với Modeller là xác định sự tương đồng giữa trình tự mục tiêu và các protein đã biết, thực hiện sắp gióng cột đa trình tự các cấu trúc đã biết để tạo cấu trúc khuôn, áp dụng các thuật giải Modeller lên trình tự mục tiêu.Mô hình có thể được đánh giá bằng các phương pháp đánh giá cấu trúc chuẩn.

10.6.1.4 Server SWISS-MODEL

SWISS-MODEL là một web server cung cấp dịch vụ xây dựng mô hình tương đồng tự động đặt tại Viện Tin - Sinh học Thụy Sĩ. SWISS-MODEL nhận một trình tự đưa lên và tự động trả về một cấu trúc. Các thủ tục tự động trong SWISS-MODEL cũng tương tự như các bước chuẩn trong một project homology modeling:

Sử dụng BLAST để tìm các trình tự đã biết cấu trúc trong CSDL cấu trúc

Chọn khuôn mẫu, tìm các domain có thể được

Developing bioinformatics computer skills - 10.5.5

Dịch từ 'Developing bioinformatics computer skills', một số chỗ không giữ nguyên bản


10.5.5 Dự đoán các cấu trúc xoắn xuyên màng

Dự đóan xoắn xuyên màng liên quan đến dự đóan cấu trúc bậc 2, ở chỗ nhận diện các vùng trên trình tự protein cho phép chèn xuyên qua màng tế bào. Các phương pháp dự đoán xoắn xuyên màng từ trình tự protein tập trung vào việc xác định các trình tự (1) có thể gấp cuộn thành cấu trúc xoắn alpha và (2) có thể tồn tại trong môi trường kị nước. Dự đóan xoắn xuyên màng xuất phát từ nghiên cứu tính kị nước vào đầu những năm 1980, tiên phong bởi Russell Doolittle (UCSD). Một số server cho phép dự đoán xoắn xuyên màng hiện sẵn có trên web (TMHMM server 2.0 http://www.cbs.dtu.dk/services/TMHMM/, MEMSAT http://saier-144-37.ucsd.edu/memsat.html), đồng thời cũng có các chương trình chạy độc lập trên client tương ứng.

TopPred (http://www.sbc.su.se/~erikw/toppred2/) được giới thiệu trong nguyên bản hiện không còn hoạt động, mà đã được thay bằng phiên bản mới http://mobyle.pasteur.fr/cgi-bin/MobylePortal/portal.py?form=toppred

Việc xác định cấu trúc đối vối các protein tan đã khó, xác định cấu trúc của các protein liên kết màng còn khó khăn hơn. Rất nhiều quá trình sinh học thú vị liên quan đến protein xuyên màng, chẳng hạn như quang hợp, thị giác, hưng phấn thần kinh, hô hấp, đáp ứng miễn dịch, sự truyền tín hiệu từ tế bào sang tế bào. Tuy nhiên, chỉ có một số ít protein xuyên màng đã được tinh thể hóa. Vì những protein này không tồn tại hòan tòan trong dung dịch lỏng, tính chất lý hóa của chúng rất khác so với các protein tan, do đó chúng đòi hỏi những điều kiện tinh thể hoá đặc biệt (trong trường hợp thật sự CÓ THỂ tinh thể hóa).

Với những khó khăn đó, rất nhìều chương trình máy tính đã xuất hiện nhằm mục đích dò tìm trên trình tự protein để phát hiện các đọan xuyên màng. Nhờ các đặc tính khá nổi bật của chúng, chương trình có thể dò thấy với độ chính xác chấp nhận được. (1) Để có thể chèn xuyên qua màng, xoắn alpha phải có chiều dài khỏang 17-25 amino acid. (2) Vì phần bên trong của màng đựơc cấu tạo từ những chuỗi hydrocarbon dài của acid béo, xoắn alpha nằm trong vùng này phải có bề mặt tương đối không phân cực để đáp ứng các yêu cầu về năng lượng.

Vào thời kì đầu, các chương trình tìm đoạn xuyên màng khai thác những vấn đề này một cách trực tiếp bằng cách phân tích từng khung (window) gồm 17-25 amino acid và chấm điểm kị nước (hydrophobicity score) cho mỗi khung; các phân đọan có điểm cao được dự đoán là những xoắn xuyên màng. Các cải tiến gần đây đối với những phương pháp sơ khai này đã nâng độ chính xác của phương pháp lên đến 90 - 95 %.

Một vấn đề nữa là việc dự đoán hình học topo của protein bên trong màng. Định hướng của xoắn đầu tiên trong màng sẽ quyết định sự định hướng của toàn bộ các xoắn còn lại. Đoạn nối giữa các xoắn alpha có thể được phân làm 2 loại: phía màng trong và phía màng ngoài. Việc dự đoán các đoạn nối này nằm ở phía nào khá phức tạp về sinh lý.

10.5.6 Threading

Nguyên lý cơ bản của phân tích cấu trúc bằng threading là: một trình tự aminoacid bất kì được áp vào một loạt các cấu trúc 3D khác nhau để đánh giá độ vừa vặn của trình tự này trong các cấu trúc đó. Tất cà các phương pháp threading đều hoạt động trên cơ sở này và có thể khác nhau ở vài chi tiết.

Threading không xây dựng một mô hình protein được tinh chỉnh với tất cả các nguyên tử. Thay vào đó, threading thay thế các vị trí amino acid trên một cấu trúc đã biết bằng các amino acid từ một trình tự (chưa rõ cấu trúc). Mỗi một vị trí (chuỗi bên) trong protein đã gấp cuộn được mô tả thông qua môi trường mà chúng tiếp xúc: chuỗi bên đó tiếp xúc với dung môi ở mức độ nào, hoặc nếu không tiếp xúc với dung môi thì chuỗi bên đó tiếp xúc với những amino acid nào khác? Mô hình được chấm điểm cao nếu các thành phần kị nước được đặt vào vị trí không tiếp xúc với dung môi và các thành phần ưa nước được tìm thấy trên bề mặt protein. Đồng thời, mô hình chỉ có thể đạt điểm cao nếu các điện tích nằm sâu bên trong phân tử và các thành phần phân cực có các điện tích đối lập hay các liên kết hydro tương ứng.


Threading được sử dụng có lợi nhất trong việc nhận diện fold (thay vì xây dựng mô hình). Với mục đích này, UCLA-DOE Structure Prediction Server (http://www.doe-mbi.ucla.edu/people/frsur/frsur.html) hiện là công cụ dễ dử dụng nhất.

* Bỏ qua phần giới thiệu các công cụ này, có thể tìm hiểu trực tiếp trên website

Hầu hết các phương pháp threading đều được xem là phương pháp thực nghiệm, và những phương pháp mới không ngừng được phát triển. Có thể sử dụng đồng thời nhiều phương pháp để nhận diện một trình tự chưa biết, với kết quả cuối cùng là sự thống nhất (lấy consensus) của nhiều kết quả thu được. Điều chủ yếu cần nhớ khi xây dựng bất kì một mô hình cấu trúc nào bằng threading là mô hình sẽ có thể thiếu các chi tiết về nguyên tử, và kết quả sắp gióng cột mà chúng dựa vào ít nhiều thiếu chính xác. Phương pháp threading được thiết kế để đánh giá liệu một trình tự có thể khớp với một fold nào đó hay không, chứ không phải để xây dựng mô hình. Kết quả sắp gióng cột cấu trúc phát sinh bởi các server threading có thể dùng làm cơ sở cho phương pháp mô hình tương đồng (homology modelling), nhưng cần được kiểm tra kĩ và chỉnh sửa trước khi xây dựng một mô hình hoàn chỉnh với toàn bộ nguyên tử (all-atom model).