Thực chất, với cách tính như trên, ta vẫn có thể tìm ra RMSD nhỏhơn bằng cách thực hiện các bước tính toán khoảng cách giữa các nguyên tửα-carbon:
Bước 1: Giả sửDj thể hiện “chi phí” liên kết của Yj, 1 ≤ j ≤ N. Việc tính toán Dj là một quá trình bao gồm hai bước:
Tiến hành xếp chồng cấu trúc như phương pháp CHIMERA trình bày ở trên
Tiến hành so khớp nguyên tửYj với nguyên tửVj, (trong đó Vj được chọn từ tập (Xj-1, Xj, Xj+1) ). Khi đó, ta có được Dj có giá trị nhỏ nhất theo công thức (27)
, ) 1 ( ), , ( ), , 1 ( min j Y j X Dst j Y j X Dst j Y j X Dst j D (27)
Bước 2: Tính toán các khoảng cách giữa mỗi cặp nguyên tửYj và Vj theo công thức (28). Giả sử Vj có tọa độ (v1j,v2j,v3j) và Yj có tọa độ (y1j,y2j,y3j). Đối với giá trị T cố định (T là tham số nhiệt độ với giá trị T = 10 để các nguyên tử được ổn định), chúng ta tính toán tất cả các giá trịnhư sau:
d (1, j) v1j y1j ;v1'j ed(1,j) ed(1,i)T i1 N d (2, j) v2j y2j ;v2 'j ed(2,j) ed(2,i)T i1 N d (3, j) v3j y3j ;v3'j ed(3,j) ed(3,i)T i1 N (28)
Trong Hình 15: Sắp hàng protein sau khi tính giá trịHình 15 là cấu trúc sắp hàng mới, tốt hơn việc xếp chồng đơn thuần trong Hình 14
Hình 15: Sắp hàng protein sau khi tính giá trị
Bước 3: Tính khoảng cách giữa các nguyên tử carbon-α được sắp hàng.
Cho (Y1,V1'),(Y2,V2'),,(YN,VN') biểu thị các cặp của các nguyên tửđược so khớp.
Trong đó, Vjv1'j v2'j v3'j, 1£ j£N biểu thị khoảng cách tối thiểu tại bước lặp như mô tả ở trên. Khoảng cách dựa trên sắp hàng cấu trúc cuối cùng, RMSD được tính bởi công thức (29). ) ... ( 1 2 1 v vN v N RMSD (29) 4.4 Thực thi chương trình
Luận văn trình bày phần thực thi chương chình thành hai tầng (2 phần xử lý) gồm:
Tầng 1 là tầng giao tác giữa người dùng và chương trình. Tầng 1 cho phép người dùng chọn tập protein (cung cấp dữ liệu) để so sánh cấu trúc. Ngoài ra, tấng 1 cũng thể hiện kết quả sau khi dữ liệu được tầng 2 xử lý.
Tầng 2 là nhận và tiến hành xử lý dữ liệu do người dùng cung cấp từ tầng 1.
4.4.1. Tầng 1-Người dùng và hệ thống
Trong tầng một, người dùng đóng vai trò cung cấp các cấu trúc hoặc chọn file cấu trúc protein cần thực hiện so sánh cấu trúc.
Hệ thống nhận các file được cung cấp từ người dùng, tiến hành kiểm tra, sắp hàng cấu trúc và xây dựng cấu trúc cuối cùng và thể hiện kết quả cho người dùng (Hình 16)
Hình 16: Quy trình xử lý giữa người dùng và hệ thống 4.4.2. Tầng 2: So sánh cấu trúc
Mô hình cấu trúc thể hiện chi tiết các phương thức trong hoạt động so sánh cấu trúc ở tầng 1. Các phương thức chính trong việc thực hiện việc so sánh cấu trúc từ cấu trúc hoặc các file cấu trúc do người dùng cung cấp.
Đây được coi là tầng hoạt động chính, thể hiện phương pháp đã trình bày ở trên để tính toán và so sánh Quy trình hoạt động của tầng 2 thể hiện trong Hình 17 Chương trình Dữ liệu cần so sánh So sánh cấu trúc Kết quả Người dùng Kết quả Dữ liệu người dùng cung cấp Lấy tọa độ của các phần tử so sánh và tiến hành xếp chồng cấu trúc Tính khoảng cách giữa các phần tử Carbon-
Sắp hàng cấu trúc theo dạng tối ưu khoảng cách
Hình 17: Quy trình so sánh cấu trúc
a) Sắp hàng cấu trúc theo dạng tối ưu khoảng cách
Như đã trình bày ở trên, thuật toán tiến hành sắp xếp cấu trúc không theo dạng đối xứng mà tiến hành thực hiện liên kết với các phân tử lân cận (hình 3.4) để tính sự liên kết tối ưu hơn.
double sqrDistance (const Point &p2) {
return (double)((this->x-p2.x)*(this->x-p2.x)+(this->y- p2.y)*(this->y-p2.y)+(this->z-p2.z)*(this->z-p2.z));
}
Hàm sqrDistance xác định khoảng cách Euclidean giữa hai nguyên tử. Từđó chọn phần tử có khoảng cách liên kết tốt nhất (theo công thức 27)
Đểxác định các nguyên tử tiến hành so sánh (ởđây, chỉ xét đến các nguyên tửđóng vai trò chính (Carbon-), hàm is_neighbour kiểm tra các nguyên tự liên kết lân cận:
bool Is_neighbour(const Amino &b, float neigh_thresh) {
for(unsigned int i = 0; i < atoms.size(); i++)
for(unsigned int j = 0; j < b.atoms.size(); j++) if((atoms[i])-> sqrDistance_from(*(b.atoms[j])) < (neigh_thresh * neigh_thresh * 100 * 100)) return true; return false; }
Hàm Do_neighbours tiến hành kiểm tra và thiết lập danh sách các phần tử liên kết giữa 2 cấu trúc để so sánh.
void Do_neighbours(void) {
for(unsigned int i = 0; i < pseudochain.size() - 1; i++) for(unsigned int j = i + 1; j < pseudochain.size(); j++) if(pseudochain[i].Is_neighbour(pseudochain[j], opt.neighbour_threshold)) { neighbours[i].push_back(j); neighbours[j].push_back(i); } } Trong đó,
- Pseudochain.size() xác định kính thước của đoạn trình tự thực hiện kiểm tra sự liên kết.
- Hàm Is_neighbour thực hiện việc kiểm tra sự lân cận của các phần tử, nếu thỏa, thêm phần tử vào danh sách các phần tử liên kết.
b) Tính khoảng cách giữa các phần tử Carbon-
Sau khi xếp chồng theo phương pháp CHIMERA và tối ưu khoảng cách, việc cuối cùng là tính khoảng cách giữa các phần tử Carbon-. Sau đó so sánh với ngưỡng khoảng cách đã thiết lập (RMSD ban đầu) và thực hiện việc lưu trữ nếu có RMSD nhỏhơn. Cư như vậy ta sẽ tìm được những cấu trúc có các đoạn trùng khớp với độ RMSD nhỏ nhất có thể theo công thức 5
double Rmsd(Set &s2) {
double rmsd = 0.0;
assert(this->size() == s2.size());
for(unsigned int i = 0; i < this->size(); i++) rmsd += this->p[i].sqrDistance_from(s2.p[i]); return sqrt(rmsd / (double)(this->size()));
Chương 5: Kết quả
5.1 Dữ liệu mẫu
Dữ liệu mẫu dùng để kiểm tra và mô phỏng được lấy từ ngân hàng protein PDB [5]. Mỗi cấu trúc có một số nhận dạng gồm bốn ký tựđược gọi là PDB ID hoặc số nhận biết PDB, ví dụ: 2RZS, 1GWB, và được lưu trữ trong một tập tin định dạng *.pdb (Hình 18)
Hình 18: Nội dung file pdb
HEADER EXTRACELLULAR MATRIX 22-JAN-98 1A3I TITLE X-RAY CRYSTALLOGRAPHIC DETERMINATION OF A COLLAGEN-LIKE TITLE 2 PEPTIDE WITH THE REPEATING SEQUENCE (PRO-PRO-GLY)
...
EXPDTA X-RAY DIFFRACTION AUTHOR R.Z.KRAMER,L.VITAGLIANO,J.BELLA,R.BERISIO,L.MAZZARELLA, AUTHOR 2 B.BRODSKY,A.ZAGARI,H.M.BERMAN ...
REMARK 350 BIOMOLECULE: 1
REMARK 350 APPLY THE FOLLOWING TO CHAINS: A, B, C REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000
0.00000 REMARK 350 BIOMT2 1 0.000000 1.000000 0.000000
0.00000 ...
SEQRES 1 A 9 PRO PRO GLY PRO PRO GLY PRO PRO GLY SEQRES 1 B 6 PRO PRO GLY PRO PRO GLY SEQRES 1 C 6 PRO PRO GLY PRO PRO GLY ... ATOM 1 N PRO A 1 8.316 21.206 21.530 1.00 17.44 ATOM 2 CA PRO A 1 7.608 20.729 20.336 1.00 17.44 ATOM 3 C PRO A 1 8.487 20.707 19.092 1.00 17.44 ATOM 4 O PRO A 1 9.466 21.457 19.005 1.00 17.44 ATOM 5 CB PRO A 1 6.460 21.723 20.211 1.00 22.26 ... HETATM 130 C ACY 401 3.682 22.541 11.236 1.00 21.19
Trong đó, phần HEADER, TITLE và AUTHOR cung cấp thông tin vềngười tìm ra cấu trúc, ngày thàng tìm ra cấu trúc, và một sốthông tin khác được cung cấp như phương pháp sử dụng,…
Tập tin chứa thông tin về trình tự amino acid, tọa độ của phần tử trong không gian ba chiều v.v… Tọa độ của amino acid và nucleotide trong các protein và acid nucleic được liệt kê thành từng dòng (ATOM). Luận văn tập trung chủ yếu vào tọa độ không gian x, y, z đểxác định tọa độ nguyên tử trong không gian - cột (G), (H), (I) của Bảng 2.
Bảng 2: Ví dụ mẫu về mục trong PDB
S.No. (A) (B) (C) (D) (E) (F) (G) (H) (I) (J) (K)
(1) ATOM 1 N MET A 1 40.184 17.101 24.260 1.00 50.62
(2) ATOM 2 CA MET A 1 38.989 16.442 23.757 1.00 49.62
Trong luận văn này, chương trình thực hiện thử nghiệm cấu trúc và kết quả so sánh của hai protein 1c0i (Hình 19) và 1dak (Hình 20) có cấu trúc thể hiện như sau
Hình 19: Cấu trúc protein 1c0i
5.2 Kết quả
Phương pháp xây dựng trong chương trình được cải thiện và mở rộng từ phương pháp Chimera.
Ý tưởng và phương thức thực hiện đưa ra một cách so sánh khác đối với cách so sánh đơn thuần phổ biến. Tính toán sự trùng khớp từ việc xếp hàng cấu trúc, rút ngắn khoảng cách hai cấu trúc và tiến hành dịch chuyển, giúp cho việc thể hiện sựtương đồng của protein một cách tối ưuhơn.
Chương trình tiến hành so sánh các phần tử Carbon- của hai protein, tiến hành dịch chuyển protein và sau khi tìm được khoảng cách RMSD thích hợp và tốt nhất so với khoảng cách RMSD cho ban đầu, chương trình lưu thay đổi vị ví phần tửvà lưu cấu trúc so sánh ứng với các khoảng cách RMSD tìm được (Hình 22)
5.3 So sánh kết quả
Sử dụng hai protein đã đề cập trong mục 4.1, chương trình Chimera tiến hành so sánh cấu trúc và tìm được khoảng cách RMSD là 0.856như trong Hình 23
Hình 22: So sánh cấu trúc protein sử dụng chương trình Chimera
Cũng với hai protein trên, áp dụng phương pháp trình bày trong luận văn đã tìm các kết quả so sánh với các khoảng cách RMSD tốt hơn:
Trường hợp 1: hình 24 có RMSD là 0.680
Hình 23: Kết quả so sánh với RMSD là 0.680
Bảng 3 so sánh về khoảng cách RMSD tìm được giữa các cặp protein theo phương pháp CHIMERA và phương pháp cải tiến từ CHIMERA.
Bảng 3: So sánh RMSD giữa CHIMERA và phương pháp trình bày
5.4 Hạn chế
Hiện tại, chương trình vẫn còn một số hạn chế gặp phải và chưa giải quyết được như:
o So sánh nhiều cấu trúc protein tại một thời điểm
o Luận văn chỉ tập trung vào thuật toán tìm kiếm và so sánh. Không xây dựng chương trình thể hiện cấu trúc
5.5 Kết luận
Mặc dù việc nghiên cứu sinh tin học không còn quá mới mẻ, có nhiều ứng dụng và chương trình đã được thiết lập để thể hiện và dựđoán các cấu trúc bậc 2, 3 của protein. Nhưng hiện tại, việc xây dựng các thuật toán, chương trình để thể hiện
và có thể đưa ra các dự đoán gần chính xác cấu trúc của protein vẫn là một thử thách lớn trong lĩnh vực sinh tin học.
Luận văn này trình bày thêm một cách tính khoảng cách trong việc so sánh cấu trúc giữa hai protein để tìm ra khoảng cách RMSD nhỏhơn dựa trên cơ sở tiến hành so sánh tọa độ của "các nguyên tử carbon xương sống" của protein A với những protein B. Khoảng cách root-mean-squared (RMSD) bằng cách xem xét các phần tử lân cận.
5.6 Hướng phát triển
Mở rộng chương trình bằng cách áp dụng thuật toán để so sánh nhiều cấu trúc cùng lúc.
Xây dựng giao diện chương trình cho phép thể hiện kết quả sau khi so sánh cấu trúc, thông tin của protein, cũng như các chức năng protein
Nâng cao tốc độ xử lý bằng cách áp dụng các thuật toán tối ưu song song. Quá trình xử lý song song có thể chia nhỏ thực thi trong một số giai đoạn của chương trình như:
- Tìm ma trận - Sắp hàng cấu trúc - Xếp chồng cấu trúc
Tài liệu tham khảo
Tiếng Việt:
[1] Lê Phước Lộc và cộng sự, Một số phương pháp chuẩn đoán cấu trúc protein, Hội thảo Tính toán Sinh học, Đại học KHTN, Tp.HCM, 2004
[2] Trần Văn Lăng, Ứng dụng tin học trong việc giải một số bài toán của Sinh học phân tử, NXB Giáo dục, 2008 (a)
[3] Trần Văn Lăng, Nghiên cứu để xây dựng công cụ tin học xứ lý thông tin về
gen và protein. Đề tài cấp bộ, Viện Khoa học và Công nghệ Việt Nam quản lý, 2003-2004
[4] Văn Đình Vỹ Phương, Trần Văn Lăng, Trần Hành, Chuẩn đoán cấu trúc bậc 3 cảu protein. Hội thảo quốc gia Một số vấn đề chọn lọc của công nghệ thông tin và truyền thông, 2010
Tiếng anh:
[5] Berthold K. P. Horn. Closed-form solution of absolute orientation us-ing unit quaternions. In Journal of the Optical Society of America, volume 4, pages 629–642, 1986.
[6] Comparison and Alignment Using the Combinatorial Extension (CE)Method; http://cl.sdsc.edu/
[7] D. Frenkel, B. Smith, Understanding Molecular Simulation: from Algorithm to Application, Academic Press, 2002
[8] Eric W. Weisstein. Rotationmatrix. MathWorld–A Wol-fram Web Resource, 2007. [Online]. Available from:
http://mathworld.wolfram.com/RotationMatrix.html [cited 28. 11. 2007]
[9] Lonsdale K. (1960). “International tables for X-ray crystallography errata.” Acta Cryst, Vol.13, p. 49.
[10] Haile, J.M., Molecular Dynamics Simulation: Elementary Methods. John
Wiley and Sons, New York, 1992,
http://portal.acm.org/citation.cfm?id=531139
[11] Hashim M., Hashimi A.L., Gorin A., Majumdar A., Gosser Y., Patel D.J. (2002). “Towards structural genomics of RNA: Rapid NMR resonance assignment and simultaneous RNA tertiary structure determination using residual dipolar coupling.” J.Mol.Biol, Vol.318, pp. 637-649
[12] http://www.pdb.org/pdb/home/home.do, An Information Portal to
Biological Macromolecular Structures
[13] Pettersen E.F., Goddard T.D., Huang C.C., Couch G.S., Greenblatt D.M., Meng E.C., Ferrin T.E. (2004). “UCSF Chimera – A visualization system for exploratory research and analysis.” J.Comput.Chem, Vol 25, pp.1605- 161
[14] Protein Data Bank. http://www.pdb.org/pdb/home/home.do
[15] Protein Structure Database Searching by DaliLite
http://ekhidna.biocenter.helsinki.fi/dali_server
[16] Shashi bhushan pandit, Jeffrey Skolnick. “Fr-Tm-align: a new protein structural lalignment method based on fragment and the TM-score”, 2008
[18] Wikipedia – wikipedia, the free encyclopedia, 2010. [Online]. Available from: http://en.wikipedia.org/wiki/De_novo_protein_structure_prediction
Phụ lục A: Các đoạn code chính
A.1 Chương trình chính
int main(int argc, char *argv[]) {
//Kiểm tra dữ liệu người dùng truyền vào
Parse_command_line(argc, argv, &opt); if(param_file_name == "") { cout << "Error! "; exit(1); } if(input_file_name == "") { cout << "Error! "; exit(1); } Parse_parameters_file(param_file_name, &opt);
Parse_input_file(opt.input_file_name, &opt, &probes, &targets);
if(!(opt.output_file)) {
string temp = opt.input_file_name; opt.output_file = opt.trans_file = fopen(temp.c_str(), "w");
} }
A.2 Xếp chồng cấu trúc
void set_superpose(struct Set *target, struct Set *probe, vector<double> *r) { double qmatr[5][5]; double dd[5]; double vv[5][5]; unsigned int j; int i,indro;
double weight = 1.0/(double)target->size(); double xrj,yrj,zrj;
double xpj,ypj,zpj; double q1,q2,q3,q4;
assert(target->size() == probe->size());
for (i=1;i<=4;i++) for (j=1;j<=4;j++) qmatr[i][j]=0.0; for (j=0;j<target->size();j++)
{
xpj=target->p[j].x;ypj=target->p[j].y;zpj=target- >p[j].z;
xrj=probe->p[j].x; yrj=probe->p[j].y; zrj=probe- >p[j].z; qmatr[1][1]+=weight*(xpj*xpj+ypj*ypj+zpj*zpj+ xrj*xrj+yrj*yrj+zrj*zrj -2.0*xpj*xrj-2.0*ypj*yrj-2.0*zpj*zrj); qmatr[2][1]+=weight*2.0*(ypj*zrj-zpj*yrj); qmatr[3][1]+=weight*2.0*(-xpj*zrj+zpj*xrj); qmatr[4][1]+=weight*2.0*(xpj*yrj-ypj*xrj); qmatr[2][2]+=weight*(xpj*xpj + ypj*ypj + zpj*zpj + xrj*xrj + yrj*yrj + zrj*zrj -
2.0*xpj*xrj + 2.0*ypj*yrj + 2.0*zpj*zrj); qmatr[3][2]+=weight*(-2.0*(xpj*yrj+ypj*xrj)); qmatr[4][2]+=weight*(-2.0*(xpj*zrj+zpj*xrj)); qmatr[3][3]+=weight*(xpj*xpj + ypj*ypj + zpj*zpj + xrj*xrj + yrj*yrj + zrj*zrj + 2.0*xpj*xrj - 2.0*ypj*yrj + 2.0*zpj*zrj); qmatr[4][3]+=weight*(-2.0*(ypj*zrj+zpj*yrj)); qmatr[4][4]+=weight*(xpj*xpj + ypj*ypj + zpj*zpj + xrj*xrj + yrj*yrj + zrj*zrj + 2.0*xpj*xrj + 2.0*ypj*yrj - 2.0*zpj*zrj); } qmatr[1][2]=qmatr[2][1];qmatr[1][3]=qmatr[3][1];qmatr[1 ][4]=qmatr[4][1]; qmatr[2][3]=qmatr[3][2];qmatr[2][4]=qmatr[4][2];qmatr[3 ][4]=qmatr[4][3]; jacobi(qmatr,4,dd,vv);
if (dd[1]<dd[2]) indro=1 ; else indro=2; if( dd[3]<dd[indro]) indro=3;
if( dd[4]<dd[indro]) indro=4;
q1=vv[indro][1];q2=vv[indro][2];q3=vv[indro][3];q4=vv[i ndro][4]; r->resize(9); (*r)[0]= q1*q1 + q2*q2 - q3*q3 - q4*q4; (*r)[1]= 2.0*( - q1*q4 + q2*q3 ); (*r)[2]= 2.0*( q1*q3 + q2*q4 ); (*r)[3]= 2.0*( q1*q4 + q2*q3 ); (*r)[4]= q1*q1 - q2*q2 + q3*q3 - q4*q4;
(*r)[5]= 2.0*( - q1*q2 + q3*q4 ); (*r)[6]= 2.0*( - q1*q3 + q2*q4 ); (*r)[7]= 2.0*( q1*q2 + q3*q4 ); (*r)[8]= q1*q1 - q2*q2 - q3*q3 + q4*q4; } A.3 So sánh cấu trúc
void Comparison::Compare(short n1,short n2, int *max_longest_matches)
{
if(!(*max_longest_matches)) return;
unsigned short idx1 = (*C1)[n1].getIdx_in_matrix(); unsigned short idx2 = (*C2)[n2].getIdx_in_matrix(); pair<short, short> p = (*opt.sim_mat)[idx1][idx2]; if(p.first == -1)
return;
const vector<Atom> &atoms1 = (*C1)[n1][p.first]; const vector<Atom> &atoms2 = (*C2)[n2][p.second]; assert(atoms1.size() == atoms2.size());
Superposition c(atoms1, atoms2); super.Add(&c); float rmsd = 0.0; if (superposition_length > 0) { rmsd = super.Rms(); if(rmsd > rmsd_max * 100) { super.Sub(&c); return; }
}
amino1[superposition_length] = n1; amino2[superposition_length] = n2; C1->Residue_used(n1) = 1;
C2->Residue_used(n2) = 1;
int to_remove = tree.Add(n1,n2); superposition_length++;
if (!tree.Done()) {
if(superposition_length >= score_min) (this- >*Add_match_to_list)(rmsd);
if(superposition_length < score_max) for (unsigned int j = 0; j < superposition_length; j++)
{
const vector<unsigned short> &neigh1 = C1->Neighbours()[amino1[j]]; vector<unsigned short>::const_iterator v1; for (v1 = neigh1.begin(); v1 != neigh1.end(); v1++) if (!(C1->Residue_used(*v1))) {
const vector<unsigned short> &neigh2 = C2->Neighbours()[amino2[j]];
vector<unsigned short>::const_iterator v2;
for(v2 = neigh2.begin(); v2 != neigh2.end(); v2++) if (!(C2- >Residue_used(*v2))) Compare(*v1, *v2, max_longest_matches); } } else (*max_longest_matches)--; } superposition_length--; C1->Residue_used(n1) = 0; C2->Residue_used(n2) = 0; tree.Remove(to_remove); super.Sub(&c); }
Phụ lục B: Sử dụng chương trình
B.1 Giao diện chương trình
Hình 25: Giao diện chương trình
B.2 Sử dụng chương trình
B.3 Giao diện người dùng cho phép người sử dụng chọn lựa hoặc nhập cấu trúc dữ liệu cần so sánh. Trong đó
B.4 Mục 1: người dùng nhập cấu trúc của hai protein cần tiến hành so sánh
B.5 Mục 2: Nếu người dùng đã có sẵn file cấu trúc, chọn Chọn tệp tin (2a) để chọn file cấu trúc, sau đó chọn nút upload (2b) để
gửi file lên hệ thống 1 2a 2b 3 1 4 5
B.6 Mục 3: sau khi nhập cấu trúc hoặc file cần so sánh, người dùng chọn nút Ghi file tiến hành lưu trữ thông tin cần trúc hai protein so sánh
B.7 Mục 4: để tiến hành so sánh cấu trúc, chọn nút Xếp chồng. B.8 Mục 5: Chọn nút Chimera để mởchương trình xem cấu trúc