Khóa luận Khai thác dữ liệu est (Expressed sequence tags ) nhằm phát hiện microsattellte phục vụ cho công tac phân tích và so sánh đặc điểm di truyền của ong mật

TÓM TẮT Thời gian nghiên cứu: từ tháng 2 đến tháng 7 năm 2006 Địa điểm nghiên cứu: Trung tâm Phân tích Thí Nghiệm - trường Đại học Nông Lâm TP. Hồ Chí Minh Ở Việt Nam, nghề nuôi ong mật đã hình thành rất lâu và hiện nay các sản phẩm của ong mật hầu hết là được xuất khẩu. Hiệu quả kinh tế mang về từ nghề nuôi là khá cao. Tuy nhiên, việc nuôi ong chỉ tập trung chủ yếu ở một số vùng nhất định như Tây Nguyên (Đak Lak), miền Đông Nam Bộ, chưa tận dụng được hết nguồn tài nguyên có sẵn. Sự hạn chế này là do chưa xác định được loài ong cho mật nào phù hợp với từng vùng địa lý cụ thể tại Việt Nam. Chính vì thế chúng tôi tiến hành nghiên cứu về việc thiết lập nên primer chạy phản ứng PCR dựa vào chỉ thị microsatellite của các loài ong cho mật để làm cơ sở cho những bước nghiên cứu định danh và xác định đặc điểm di truyền của ong mật phục vụ cho việc mở rộng nghề nuôi ong mật ở các vùng ở Việt Nam. Những kết quả đã đạt được: ۰Chúng tôi đã chọn được một nguồn dữ liệu (EST) tốt cho nghiên cứu ۰Thiết lập được phương pháp để tìm kiếm microsatellite từ nguồn EST ۰ Thiết kế được những cặp primer dựa vào vùng bảo tồn hai bên những loại microsatellite tìm được Kết luận: Sự thành công của việc thiết kế primer đã làm cơ sở cho những bước nghiên cứu xa hơn về đặc điểm di truyền của các loài ong cho mật. Thành công này mở ra một triển vọng cho việc ứng dụng lĩnh vực Bioinformatic hỗ trợ cho nghiên cứu thực nghiệm, làm giảm đáng kể chi phí và đẩy nhanh tốc độ nghiên cứu thực nghiệm tại Trung Tâm. MỤC LỤC CHưƠNG TRANG Trang tựa Lời cảm tạ iii Tóm tắt iv Mục lục .v Danh sách các chữ viết tắt viii Danh sách các bảng .ix Danh sách các hình .x 1. MỞ ĐẦU 1 1.1. Đặt vấn đề .1 1.2. Mục đích và yêu cầu nghiên cứu 2 1.2.1. Mục đích nghiên cứu .2 1.2.2. Yêu cầu nghiên cứu .2 1.3. Giới hạn .2 2. TỔNG QUAN TÀI LIỆU .3 2.1. Giới thiệu chung về ong mật .3 2.1.1. Cấu tạo cơ thể của ong mật 3 2.1.1.1. Hình thái cơ thể 3 2.1.1.2. Các cơ quan bên trong 6 2.1.2. Tổ chức của đàn ong 6 2.1.3. Yêu cầu dinh dưỡng của ong .7 2.1.4. Các sản phẩm của ong .7 2.1.4.1. Mật ong .7 2.1.4.2. Phấn hoa .7 2.1.4.3. Sữa ong chúa 7 2.1.4.4. Sáp ong 8 2.2. Nguồn gốc EST (Expressed Sequence Tags) 8 2.2.1. EST là gì? 8 2.2.2. Phương pháp tạo EST 8 2.3. Microsatellite là gì? .10 2.3.1. Các dạng microsatellite .10 2.3.2. Cơ chế hình thành microsatellite .11 2.3.3. Ứng dụng của microsatellite 12 2.3.4. Marker phân tử (molecular markers) .13 2.3.5. Vì sao chọn marker microsatellite? .14 2.4. Ngôn ngữ lập trình Perl (Practical Extraction and Reporting Language) .15 2.4.1. Nguồn gốc của Perl 15 2.4.2. Cấu trúc của Perl 16 2.4.2.1. Dữ liệu vô hướng (scala data) 16 2.4.2.2. Cấu trúc điều khiển .16 2.4.2.3. Các List, Array và Hash .19 2.4.2.4. Dòng chương trình và các thường trình con .19 2.4.2.5. Package và Module 20 2.5. Giới thiệu về mồi (primer) 21 2.5.1. Khái quát về mồi 21 2.5.2. Đặc điểm của mồi .21 2.5.2.1. Tính chuyên biệt .21 2.5.2.2. Tính ổn định .22 2.5.2.3. Tính tương thích .23 2.6. Tin sinh học .24 2.6.1. Khái niệm tin sinh học 24 2.6.2. Các lĩnh vực nghiên cứu chính của tin sinh học .24 2.6.2.1. Genomics - Hệ gen học 24 2.6.2.2. Sinh học tiến hóa 26 2.6.2.3. Phân tích chức năng gen .26 3. PHưƠNG TIỆN VÀ PHưƠNG PHÁP NGHIÊN CỨU .29 3.1. Thời gian và địa điểm tiến hành nghiên cứu .29 3.1.1. Thời gian nghiên cứu .29 3.1.2. Địa điểm nghiên cứu .29 3.2. Vật liệu và công cụ nghiên cứu .29 3.2.1. Vật liệu nghiên cứu .29 3.2.2. Công cụ nghiên cứu .29 3.3. Phương pháp tiến hành nghiên cứu .30 3.3.1. Quy trình nghiên cứu tổng quát .30 3.3.2. Phương pháp nghiên cứu .31 3.3.2.1. Sơ đồ các bước tiến hành nghiên cứu .31 3.3.2.2. Các bước tiến hành nghiên cứu chi tiết 32 4. KẾT QUẢ VÀ THẢO LUẬN 42 4.1. Kết quả tìm kiếm và tải trình tự EST về máy tính cá nhân .42 4.1.1. Kết quả tìm kiếm EST .42 4.1.2. Kết quả tải trình tự EST về máy tính cá nhân .43 4.2. Kết quả tìm và phân loại microsatellite .44 4.2.1. Kết quả tìm microsatellite qua xử lý của EST_TRIMMER 44 4.2.2 Kết quả xử lý qua MISA 45 4.3. Kết quả thiết kế primer 49 4.3.1. Kết quả thiết kế primer qua 6 Script Perl 49 4.3.2. Kết quả so sánh và chọn lọc primer được thiết kế .56 5. KẾT LUẬN VÀ ĐỀ NGHỊ 59 5.1. Kết luận .59 5.1.1. Sơ đồ phương pháp thực hiện 59 5.1.2. Kết quả đạt được .60 5.2. Đề nghị 60 6. TÀI LIỆU THAM KHẢO 61 7. PHỤ LỤC .64 . Khai thác dữ liệu est (Expressed sequence tags ) nhằm phát hiện microsattellte phục vụ cho công tac phân tích và so sánh đặc điểm di truyền của ong mật

pdf94 trang | Chia sẻ: maiphuongtl | Lượt xem: 1782 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Khóa luận Khai thác dữ liệu est (Expressed sequence tags ) nhằm phát hiện microsattellte phục vụ cho công tac phân tích và so sánh đặc điểm di truyền của ong mật, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
t.results) chứa trình tự đƣợc chọn. File chứa kết quả đƣợc định dạng lại để tiến hành nghiên cứu xa hơn. Hình 4.4: File chứa kết quả trình tự EST đƣợc chọn 4.2.2. Kết quả xử lý qua MISA Hình 4.5: File định dạng FASTA 46 Một điều bất tiện ở EST_TRIMMER là kết quả không cho biết số lƣợng EST đƣợc chọn và bị loại bỏ là bao nhiêu. Nhƣng điều này đã có MISA giải quyết, tốt hơn thế nữa MISA còn cho ta thay đổi thêm vài thông số cần thiết mà với EST_TRIMMER chƣa thực hiện đuợc. Những tác vụ thực thi của MISA: Chọn lọc lại kích thƣớc chiều dài của EST Điều chỉnh mức độ đa hình của microsatellite. Điều chỉnh mức độ độ dài gián đoạn tối đa giữa hai microsatllite trong 1 EST Cho biết số lƣợng EST đã xử lý Cho biết số lƣợng base đã xem xét Cho biết số lƣợng microsatellite đã tìm đƣợc Cho biết số lƣợng trình tự chứa hơn 1 microsatellite Hình 4.6. Thể hiện kết quả thực thi của MISA Bảng 4.1: Kết quả xử lý của MISA KẾT QUẢ XỬ LÝ QUA MISA Tổng EST kiểm tra Tổng số base đã kiểm tra Số SSR tìm đƣợc Số EST chứa SSR Số EST chứa hơn 1 SSR Số EST chứa SSR cách nhau 100 base (interruptions) 24289 11170594 4737 3345 964 970 47 Qua bảng kết quả trên cho thấy, số lƣợng microsatellite tìm thấy là rất nhiều và cũng rất đa dạng. Không thể sử dụng hết số lƣợng microsatellite này làm móc (anchor) để thiết kế primer đƣợc. Vì nhƣ vậy sẽ không khả thi trong quá trình chọn lựa primer và mục đích nghiên cứu sẽ bị phân tán về hiệu quả. Do vậy, cần phải thực hiện thanh lọc lại trƣớc khi tiến hành thiết kế primer. Công việc thanh lọc ở đây cần làm là: ► Tính tỉ lệ phần trăm từng dạng microsatellite ► Tính tỉ lệ phân trăm 5‟EST và 3‟EST ► Chọn ra EST chứa microsatellite có tính đại diện cao Bảng 4.2 sau đây bƣớc đầu sẽ trình bày kết quả liệt kê tất cả thành phần của các dạng microstellite. Bảng 4.2: Thành phần các dạng microsatellite Các dạng microsatellite tìm đƣợc Di - Nucleotide Tri - nucleotide Tetra - nucleotide Penta - nucleotide Hexa - nucleotide AT; TA; GA; AG; CA; TC; TG; AC TAT; TTG; TCG; GAG; GAA; ATT; TCT; CTT; ATA; ATG; GGA; AGA; TTC; CTA; TGA; TGT; CTA; AGC; ACA; TCC; CAA; AAT; AGG; TTA; TAC; GAC; ACG; GAT; CGC; GCA; AAC; ACT; TAA; GGT; AAG; TAA; GCG; TCA ATAA; CCTT; GAAG; GTTC; CGAT; AAAG; TTCT; CTTT; GTAT; AAGA; TAAA; TCGT; AAAT; TGTA; AATA; ACAT; TTAA; TTTC; TACA; AGAT; GGGA; TCTTT; ATCG; TCGA; TTTA; AGCG; ATCC; CTCA; AAGG; AATA; TATT AGAAA; GAAGA; TTTTC; TCAAA; AAATA; AAATA; CTCTT; ATAAT; AAGAA; ATGAA; TATAT; TTTCT; TCGTGA; AGAGAC 48 Kiểm tra file kết quả cho thấy các dạng microsatellite chiếm tỷ lệ lớn là: dinucleotide SSR, trinucleotide SSR và tetranucleotide. Hại dạng còn lại chiếm tỉ lệ rất thấp. Cụ thể bảng kết quả 4.3 sẽ cho ta thấy rõ. Bảng 4.3. Phần trăm các dạng microsatellite Tỷ lệ phần trăm các dạng microsatellite Dinucleotide Trinucleotide Tetranucleotide Penta/hexanucleotide 36% (1705 SSR) 48% (2274 SSR) 15.6% (739 SSR) 0.4% (19 SSR) Qua bảng kết quả này nói lên một điều là sự đa hình của microsatellite hầu hết là thuộc vào ba loại di/tri/tetra-nucleotide SSR. Vì vậy vấn đề bây giờ là xác định tỷ lệ của từng loại microsatellite trong từng dạng microsatellite này. Bảng 4.4. Phần trăm các loại microsatellite chiếm tỉ lệ cao Tỷ lệ % các loại microsatellite trong 3 dạng di/tri/tetra-nucleotide SSR Dạng dinucleotide SSR Dạng trinucleotide Dạng tetranucleotide AG AT TG TA GA ATA ATT TTC AAAG TTTC 15% (256 SSR) 29% (495 SSR) 8% (136 SSR) 25% (426 SSR) 17% (290 SSR) 26% (591 SSR) 37% (841 SSR) 30% (682 SSR) 48% (355 SSR) 45% (333 SSR) Bảng thống kế cho thấy tỷ lệ phần trăm các loại microsatellite tập trung chủ yếu vào một số loại nhất định. Các loại microsatellite chiếm tỷ lệ rất nhỏ trong các dạng trên không cần thiết phải liệt kê ra và cũng dễ dàng tính đƣợc là bao nhiêu theo quy tắc tam suất. Tuy nhiên việc tính những tỷ lệ này có lẽ sẽ không ảnh hƣởng gì đến kết quả của việc thiết kế primer. Khả năng chỉ thị của chúng là không khả thi vì không mang tính đặc trƣng (số lƣợng quá ít). Các loại microsatellite đƣợc liệt kê ở bảng trên sẽ đƣợc chuyển vào từng file riêng biệt chuẩn bị cho việc thiết kế primer. Về kết quả tính tỉ lệ phần trăm 5‟EST và 3‟EST, tỉ lệ tính ra là rất chênh lệch, hầu hết là 5‟EST (97% hay 3245 5‟EST). Chính vì sự chênh lệch quá lớn giữa hai 49 dạng EST hay đúng hơn là số lƣợng 3‟EST quá ít, mà việc thực hiện công việc này không đóng góp gì vào những bƣớc tiếp theo. 4.3. Kết quả thiết kế primer 4.3.1. Kết quả thiết kế primer qua 6 Script Perl Những script này đƣợc thiết kế làm việc liên tục từ script thứ 1 đến script thứ 6. Mỗi script thực hiện một chức năng riêng biêt, script thực hiện tác vụ phía trƣớc là tiền đề cho script kế tiếp thực thi tác vụ của mình. Hay output của script thứ 1 là input cho script thứ 2 và tƣơng tự nhƣ vậy đến sript thứ 6. Dữ liệu đƣợc xử lý lôgic qua từng script, các script này đƣợc thiết kế nhƣ một phần mềm tìm kiếm microsatellite, thiết kế primer, sàng lọc primer, cho ra kết quả primer cuối cùng. Việc thiết kế primer của chƣơng trình này nhờ vào Primer3, Blastall và Formatdb. Sau đây là kết quả thực thi tác vụ của từng script. ● 1_ssr_repeat_finder Script thứ nhất thực thi cho ra 3 file kết quả ► new_ids170404: liệt kê id của các trình tự có microsatellite ► ssrout170404: thể hiện mã số truy cập, trình tự EST và trình tự microsatellite ► labdbout170404: liệt kê tất cả microsatellite trong một EST, vị trí khởi đầu của microsatellite, số base của từng microsatellite và trình tự EST. Hình 4.7. Kết quả của file new_ids170404 50 Hình 4.8: Kết quả của ssrout170404 Hình 4.9. Kết quả trình diễn của labdbout170404 Trong đó ssrout170404 là input của 2_ssr_primer_designer. Ssrout170404 là một file chứa dữ liệu ở dạng text. Trong file này có 4393 EST chứa microsatellite. Số EST này là nguồn input cho script thứ hai thực thi tác vụ thiết kế primer. ● 2_ssr_primer_designer Script thứ hai thực thi tác vụ của nó cho ra 2 file kết quả. ► raw_primer3170404: in ra kết quả các thông số mặc định đƣợc thiết lập từ Primer3 và từ script thiết lập. 51 Hình 4.10. Xuất kết quả các thông số thiết lập từ script ► primer_results170404 Hình 4.11: Trình bày primer đƣợc thiết kế Số lƣợng primer đƣợc thiết kế còn khá nhiều (3417 cặp primer). Chắc chắn là không thể nào sử dụng tất cả số primer để chạy phản ứng PCR đƣợc. Tuy nhiên, vấn đề này sẽ đƣợc giải quyết qua bƣớc sàng lọc và chọn lại những cặp primer có chất lƣợng hơn qua 3_ssr_primer_rep_check. ● 3_ssr_primer_rep_check Script này lấy primer_results170404 làm input và cho ra output là rescreened170404. Script thứ 3 thực thi tác vụ chọn lọc lại primer đã đƣợc thiết kế từ 52 script thứ 2. Việc chọn lọc này sẽ cho ra những cặp mồi có chất lƣợng cao hơn (đảm bảo các thông số kỹ thuật đã thiết lập). Kết quả thực thi của 3_ssr_primer_rep_check chọn lọc ra đƣợc 175 cặp primer. Số primer này tiếp tục đƣợc xử lý qua script thứ 4 và thứ 5 để chọn ra những cặp primer cuối cùng. Hình 4.12: Trình diễn của rescreened170404 ● 4_ssr_primer_blast Script thứ tƣ này sẽ đƣợc nhúng vào Blastall nhờ chƣơng trình này gióng hàng các trình tự EST có microsatellite đƣợc chọn thiết kế primer ở script thứ 3 để tiếp tục chọn lại những trình tự có primer tốt nhất. Script này sẽ sử dụng rescreened170404 làm input và cho ra output là blastout170404. Hình 4.13: Kết quả màn hình xử lý qua 4_ssr_blast 53 ● 5_ssr_order_filter Đây là script cuối cùng thực thi tác vụ tinh lọc primer và các EST đƣợc thiết kế primer. Thành công của bƣớc này là cơ bản công đoạn thiết kế primer đã hoàn thành. Từ intput blastout170404, 5_ssr_order_filter thực thi tác vụ của mình cho ra output filter170404. Filter170404 sẽ chứa trình tự EST và primer đƣợc thiết kế từ nó. Đây là kết quả primer cuối cùng đã đƣợc chọn. Hình 4.14. Thể hiện EST và primer sau cùng ● 6_ssr_order_formatter Kết quả thể hiện những primer cuối cùng đƣợc thiết kế nhƣ đƣợc thấy phần nào ở Hình 4.14 thì chƣa thật rõ ràng. Vì vậy, script cuối cùng script thứ 6 làm nhiệm vụ định dạng lại và tách riêng một file chỉ chứa những cặp primer đƣợc chọn cùng với mã số truy cập của từng EST tƣơng ứng với primer đƣợc thiết kế, nhiệt độ Tm và kích thƣớc sản phẩm. Hình 4.15. Trình bày primer đạt đƣợc sau cùng 54 Bảng 4.5: Kết quả primer của dạng dinucleotide SSR Kết quả primer của dạng dinucleotide SSR AG MX AATATTTAAGACGACCTGGCACGA CATACGTGAGGCACTTTCTCTTTC AAATTTGATGAACGGGAGAATGAA MN CGTGTCTCATCTCCTCCATTCTTT ACGAATTAATTTTTAACCATAGCGATT ATTACCAATATCGGTGCATTTGCT GA MX ACGTTGAAAATCGTAGCTCGAAAG GTTTTTGTCCTCCAGTTTCGGAT CACCTTATAATTCCACCTTCCTCG MN AAGTTTCCGTTCTCCTCGAGTTCT ACAAAACTTGTTGACTCACCCGAT TTACTCTCTCGTTCCTCTTCTCGC TC MX GAGGAAACGAGGTGTATCGGTTTA GCAACGATCTTGTCAATATACGCA TTAAACGAAGGATGATCCAAAACG AAAATCACATCAATTCCGTTATCTTTTT TCGATGCCAGTTTCGTTATTTCTT MN GGAGAGAATGAAAGAAAGTGCGAA ATAGAGGGAGAGCGTGAGGAAGAG GAGGACCTCAAGTGAACTGGGATA GGGATTACCGGTTAGCTCGATTAC TATGCGTATATCTCAGCGTACGGA AT MX CGGCTTTCGAGAACAAAATAAAAA TTTCTGAAAGAAGAAATCGGTTTGAG GGAACCAATCGTTGTTTCTCGTAT GGAACCAATCGTTGTTTCTCGTAT CGACAGCTAGGTGATTTCTATCCG ACCTTTCCTCTCGCTATCCAATTC MN GCTCGACCCATTACTTTCTTCCTT CATCAAAGAGGGCAAGAAATGGTA ACAAGATCAATGCCACGTCTTTTT ACAAGATCAATGCCACGTCTTTTT CTAAGTAATAAATCGTCGAGCCGC GCTCAGGCGATTGAGATTTAAGTG TA MX AGCTTAGCCAGCGAATTAATTTAAGA TGAACGAACAAATATGAGAAAGCG MN TAACGAACGTCGACGGTTAAAAA GGGTGGTCACTCCGATGTAGTAAT 55 Bảng 4.6: Kết quả primer của dạng trinuclotide SSR Kết quả primer của dạng trinucleotide SSR ATA MX TTCTCTTCGTTTCTTTCTTGCGTT TTCTTAGACGAATACAAAGAGGACAAAA TCGTTGATTCAAGAGAAAGAGAGGA ACCGTGAACATATCAAGGCGTATT MN CTTCAAGTGGGATAAGGTACGTCG CTTGAACTCTGAAATAACGCCGA GGCCTTCCAATCAACTCGAATAA AATCTTTTACTCGTCGTTGCTTCG TTC MX AGGTTCGATGAATTTTTCCAAAGG TTTTACGTCATCCGGTACATCAAG GTGTCGCAAGACCGTTCTTTTT ACGTGGCGAATAATTGCCTTACT AATTGGTCAATTGGTGTGTTGAAA MN TTCGAATCGAGGAATCAATAAAACA TTCTCGTTTGTTTCATTGTTTTCG CCAGAAGCACGTGTAAAACATCAA GATAAATTGCCATTGCCACGAT CCCCCTTCCCCTAATTGTAATTTT ATT MX TTCTCTTCGTTTCTTTCTTGCGTT TTCTTAGACGAATACAAAGAGGACAAAA TCGTTGATTCAAGAGAAAGAGAGGA ACCGTGAACATATCAAGGCGTATT MN CTTCAAGTGGGATAAGGTACGTCG CTTGAACTCTGAAATAACGCCGA GGCCTTCCAATCAACTCGAATAA AATCTTTTACTCGTCGTTGCTTCG 56 Bảng 4.7: Primer của dạng tetranucleotide SSR Trong đó MX:mồi xuôi, MN: mồi ngƣợc; chiều primer 5‟-3‟ 4.3.2. Kết quả so sánh và chọn lọc primer đƣợc thiết kế Kết quả cuối cùng đƣợc chọn này đƣợc chọn lọc lại sau khi tiến hành đƣa những trình tự EST của primer đã đƣợc thiết kế ở phần 4.3.1vào thiết kế lại ở các phần mềm thiết kế primer Primer3, PrimerQuest, PDA, DNAClub và dựa trên kích thƣớc sản phẩm, nhiệt độ chênh lệch giữa mồi xuôi và mồi ngƣợc. Bảng 4.8 và bảng 4.9 là kết quả các cặp primer (9 cặp) của dạng dinucleotide và tri/tetra-nucleotide đƣợc chọn sau cùng khi sử dụng các phần mềm thiết kế primer đã đƣợc giới thiệu ở trên, cùng với đó là việc phân tích căn cứ trên các thông số nhƣ chiều dài sản phẩm, tỷ lệ GC%, nhiệt độ Tm của primer… Kết quả thiết kế primer của các phần mềm là khác nhau, chỉ có Primer3 là có tỉ lệ giống nhau cao nhất. Điều này cũng dễ hiểu, bởi vì mỗi chƣơng trình có các thông số kỹ thuật đƣợc thiết lập dựa trên các tiêu chuẩn khác nhau, đối tƣợng khác nhau. Vì vậy khi đƣa các trình tự EST chứa các SSR đã đƣợc thiết kế primer bằng bằng 6 Script Perl vào thiết kế primer trên các phần mềm thiết kế này thì cho ra các kết quả khác nhau. Kết quả primer của dạng tetranucleotide SSR AAAG MX TTCTCTTCGTTTCTTTCTTGCGTT TTCTTAGACGAATACAAAGAGGACAAAA TCGTTGATTCAAGAGAAAGAGAGGA MN CTTCAAGTGGGATAAGGTACGTCG CTTGAACTCTGAAATAACGCCGA GGCCTTCCAATCAACTCGAATAA TTTC MX ACTCGCCTTGTAAATTGGACGATA TGGCAAATGGAAAGAGAAGAAAGA CGTTCCTTCTTTCCTTCCTTTTTC TGGAGAGAAGAAAAGATCCCAATG MN GCGAAACGAAAAGTAGGAAACAAA GAAAAAGGAAGGAAAGAAGGAACG TGCTTCACGACACGCAATACTAAT CGGTAAAAATTGTGCGTCGTTAAT 57 Bảng 4.8: Kết quả primer sau cùng của dạng dinucleotide SSR Kết quả primer chọn lọc từ dạng dinucleotide SSR AG MX CATACGTGAGGCACTTTCTCTTTC MN ACGAATTAATTTTTAACCATAGCGATT GA MX ACGTTGAAAATCGTAGCTCGAAAG AAGTTTCCGTTCTCCTCGAGTTCT TC MN GCAACGATCTTGTCAATATACGCA ATAGAGGGAGAGCGTGAGGAAGAG AT MX ACCTTTCCTCTCGCTATCCAATTC GCTCAGGCGATTGAGATTTAAGTG TA MN TGAACGAACAAATATGAGAAAGCG GGGTGGTCACTCCGATGTAGTAAT Bảng 4.9: Kết quả primer đƣợc chọn của dang tri/tetra-nucleotide SSR Kết quả primer chọn lọc của dạng trinucletotide SSR ATA MX GATTCATGTGTTGGTCGCTGAATA MN CCCTCTCCCTGTTCCTCTCTTTTA TTC MX AGGTTCGATGAATTTTTCCAAAGG MN TTCGAATCGAGGAATCAATAAAACA Kết quả primer chọn lọc của dạng tetranucleotide SSR AAAG MX ACCGTGAACATATCAAGGCGTATT MN AATCTTTTACTCGTCGTTGCTTCG TTTC MX ACTCGCCTTGTAAATTGGACGATA MN GCGAAACGAAAAGTAGGAAACAAA Do đó, việc chọn lọc lại primer đƣợc căn cứ chủ yếu dựa vào Primer3 và kết quả cuối cùng của 6 Script Perl. Kết quả này cho thấy tính độc lập và ý đồ riêng trong nghiên cứu với từng đối tƣợng cụ thể. Và việc chọn lựa kết quả sau cùng tùy vào chủ ý của ngƣời nghiên cứu. 58 Bảng 4.10: Trình bày loại và mã số truy cập EST Loại microsatellite và mã số truy cập EST của các primer đã chọn Loại microsatellite Mã số truy cập AG CK631623 GA BP874879 TC BI502843 AT BP538128 TA BI517251 ATA BP874541 TTC BP875475 AAAG BI510009 TTTC BI514563 Để dễ dàng trong việc tìm và kiểm tra lại tính chính xác những cặp primer đã đƣợc thiết kế, tôi thiết lập nên bảng 4.10. Bảng 4.10 cho thấy những loại microsatellite và mã số truy cập của các EST tƣơng ứng chứa các loại microsatellite này. 59 Phần 5 KẾT LUẬN VÀ ĐỀ NGHỊ 5.1. Kết luận 5.1.1. Sơ đồ phƣơng pháp thực hiện Từ quá trình thực hiện tôi xin đề xuất sơ đồ phƣơng pháp thực hiện cụ thể cho việc khai thác dữ liệu, xử lý và thiết kế primer đối với các SSR tìm đƣợc nhƣ sau EST từ NCBI Script Perl (Bƣớc 1 mục 3.2) Download sử dụng công cụ hỗ trợ từ NCBI Sử dụng phần mềm Phân loại EST lần 1 EST_TRIMMER EST đã đƣợc phân loại lần I Sử dụng phần mềm Phân loại EST lần 2 MISA Sử dụng 6 script Perl Chọn lọc primer lần 1 Primer chƣa chọn lọc Sử dụng DNA Club, Primer3, PrimerQuest Chọn lọc primer lần 2 Hình 5.1. Qui trình nghiên cứu thiết kế primer Trình tự EST EST chứa microsatellite Primer tốt nhất 60 5.1.2. Kết quả đạt đƣợc Đã tải đƣợc 24648 trình tự EST (mất khoảng 30 phút) Qua quá trình tìm và phân loại bƣớc đầu microsatellite, kết quả đã xác định ۰ 4737 microsatllite ۰ 3345 EST chứa microsatellite ۰ 964 EST chứa hơn 1 microsatellite ۰ 100 dạng interruptions Xác định đƣợc tỉ lệ các dạng microsatellite chiếm tỷ lệ cao ۰Dạng dinucleotide SSR: 36% (1705 SSR) ۰Dạng trinucleotide SSR: 48% (2274 SSR) ۰Dạng tetranucleotide SSR: 15,6% (739 SSR) Từ các dạng microsatellite chiếm tỷ lệ cao đã xác định đƣợc các loại microsatellite tin cậy cho việc thiết kế primer: ۰Dạng dinucleotide có các loại: AG, GA, TC, AT, TA ۰Dạng trinucleotide có các loại: ATA, ATT, TTC ۰Dạng tetranucleotide có các loại: AAAG, TTTC Kết quả thiết kế và chọn lọc primer đã chọn ra đƣợc 9 cặp primer đảm bảo các yêu cầu về các thông số cho primer khi thực hiện phản ứng PCR. 5.2. Đề nghị Cần tiến hành kiểm tra các cặp mồi này bằng thực nghiệm để kiểm tra hiệu quả cao nhất của đề tài Kết quả thành công nên mở rộng đối tƣợng nghiên cứu Nên tăng cƣờng đầu tƣ và xây dựng một chuyên ngành về lĩnh vực Bioinformatic tại Trung Tâm, việc này sẽ đóng góp rất lớn đến hiệu quả nghiên cứu của Trung Tâm. 61 Phần 6 TÀI LIỆU THAM KHẢO TIẾNG VIỆT 1.Bùi Chí Bửu - Nguyễn Thị Lang-1999. Di truyền phân tử - Những nguyên tắc căn dbản trong chọn giống cây trồng – Nhà xuất bản Nông Nghiệp thành phố Hồ Chí Minh, 278 trang 2. CN. Lƣu Phúc Lợi, 2006. Bài giảng tin - sinh học ứng dụng, 37 trang 3. Nguyễn Thị Phƣơng Dung, 2005. Xây dựng phƣơng pháp nhận diện và phân tích tính đa dạng di truyền của 21 dòng cacao ( themobroma cacaoL.) bằng kỹ thuật microsatellite. Khóa luận tốt nghiệp kỹ sƣ công nghệ sinh học, trƣờng Đại học Nông Lâm Thành Phố Hồ Chí Minh, 83 trang 4. Trần Hiếu Thuận,2003. Tài liệu lập trình Perl- Bộ môn Sinh Tin trƣờng Đại Học Khoa Học Tự Nhiên thành phố Hồ Chí Minh,34 trang 5. Lê Minh Trung - Quốc Bình, 2002. Ngôn ngữ lập trình Perl cho ngƣời mới học. NXB Thống kê 2002, 426 trang TIẾNG NƢỚC NGOÀI 5. R. B. Hodgetts . M. A. Aleksiuk . A. Brown . C. Clarke. E.Macdonald S.Nadeem . D. Khasa, 2000. Development of Microsatellite Markers for White Spruce ( Picea glauca) anh related species – © Springer-Verlag 2001 6. T. A. Holton, 1999. Plant Genotyping by Analysis of Microsatellites – Centre for Plant Conservation Genetics. Southern Cross University, Lisomore, Australia 7. Michel Solignac, Dominique Vautrin, Emmanuelle Baudry, Florence Mougel, Anne Loiseau and Jean-Marie Cornuet. A Microsatellite-Based Linkage Map of the Honeybee, Apis mellifera L.- Laboratoire Populations, Génétique et Evolution, Center National de la Recherche Scientifique, F91198 Gif-sur-Yvette Cedex, France and Center de Biologie et de Gestion des Populations, F34988 Saint-Gely-Du-Fesc Cedex, France 8. Pilar De La Rúaa*, Jusé Galiána, José Serranoa, Robin F.A. Moritzb. Genetic Structure of Balearic Honeybee Polymorphism. Depatarmento de Biología Animal, 62 Facultad de Veterinaria, Apdo.4021, Universidad de Murcia, 30071 Murcia, Spain b Institute of Zoology, Martin-Luther-University Halle-Wittenberg, Kroll Witzer Str. 44, 06099 Hawall/Sale, Germany 9. James P. Connell, Sujata Pammi 1 , Muhammad J. Iqbal, Tim Huizinga and Avutu S. Reddy*. A High Through-put Procedure for Capturing Microsatelles from Complex Plant Genomes. Crop Biotechnology Center and Dept. of Soil and Crop Sciences, 1 Crop Biotechnology and Dept. of Biochemistry and Biophysics, Texas A&M University, College Station, Texas 77843- 2123, USA 10. Jean Michel Claverie, Cedric Notredame, 2003. Bioinformatics for Dummies Wiley Publishing, Inc. 11. Ouellette, 2005. Bioinformatics a practical guide to the analysis of genes and proteins.3 rd edition, A John Wily And Sons, Inc. Pulication 13. David C, Gilley, David R. Tarpy, Benamin B. Land. Effect of queen quality on interactions between workers and dueling queens in honeybee ( Apismellifera L.) colonies. Publlised ooline 30 Otober 2003 © Spriger Verlag 2003 14. Francis L.W. Ratnieks, Laurent Keller. Queen control of egg fertilization the honey bee. © Springer-Verlag 1998 15. John G.K. Williams, Anne R.Kubelik, Kenneth J.Lavak, J.Atoni Rafal Ski and Scott V. Tingey. DNA polymorphisms amplified by arbitrary primers are useful as genetic markers. Central Research and Development Department 1 Agricultural Products Department, E.L.du Pont de Nemours & Co., Inc., Experimental Station, Wilmington, de 198800, USA 16. Windels, Pieter., Taverniers, Isabel., Van Bockstaele, Erik Ann Depicker., De Loose, Marc., 2001. Characterisation of the Roundup Ready soybean insert. Eur Food Res Technol 213:107–112, p:109. 17. Zhen Tao, Xing-Feng Cai, Sheng-Li Yang and Yi Gong. Detection of Exogenous Genes in Genetically Modified Plants With Multiplex Polymerase Chain Reaction. Plant Molecular Biology Reporter 19: p. 293. TRANG WEB 18. 19. 63 20. www.cirrisingmage.com/bee_honey.html 21. 22. 23. 24. 25. 26. www.ch.embnet.org/CourEMBnet/CHIP02/ppt/embnet_hofmann2.ppt 27. 28. 29. 30. 31. 32. l 33. ftp://ftp.ncbi.nih.gov/blast/executables/ 64 PHỤ LỤC Mà (Code) CỦA MỘT SỐ ĐOẠN CHƢƠNG TRÌNH Đà ĐƢỢC VIẾT` TRONG QUÁ TRÌNH XỬ LÝ DỮ LIỆU 1. Script của EST_TRIMMER: thực thi tác vụ phân loại một số dạng mocrosatellite #!/usr/bin/perl -w ###Program name: est_trimmer.pl ###Author: Thomas Thiel ###Release date: 25/01/01 ###Version: 04/09/02 # Check for arguments. If none display syntax # if (@ARGV == 0) { open (IN,"<$0"); while () {if (/^\#\# (.*)/) {$message .= "$1\n"}}; close (IN); die $message; }; # Check if help is required # if ($ARGV[0] =~ /-help/i) { open (IN,"<$0"); while () {if (/^\#\#\#(.*)/) {$message .= "$1\n"}}; close (IN); die $message; }; # Open FASTA file # open (IN,"<$ARGV[0]") || die ("\nError: File doesn't exist !\n\n"); # Checking arguments # $arg = @ARGV; $arg > 1 || die ("\nError: No arguments determined !\n\n"); for ($i = 1; $i < $arg; $i++) { if (($amb_n,$amb_win) = ($ARGV[$i] =~ /-amb=(\d+),(\d+)/i)) { $message .= "$i. Check for ambiguous bases (search for $amb_n ambiguous bases in a $amb_win bp window).\n"; } elsif (($tr3_b,$tr3_n,$tr3_win) = ($ARGV[$i] =~ /- tr3=([ACGT]),(\d+),(\d+)/i)) { $message .= "$i. Trim 3' end: Remove \"$tr3_b\" tails."; if ($tr3_win > 0) {$message .= " Check for $tr3_n x $tr3_b in a $tr3_win bp window.\n"} else {$message .= "\n"}; } elsif (($tr5_b,$tr5_n,$tr5_win) = ($ARGV[$i] =~ /- tr5=([ACGT]),(\d+),(\d+)/i)) { 65 $message .= "$i. Trim 5' end: Remove \"$tr5_b\" tails."; if ($tr5_win > 0) {$message .= " Check for $tr5_n x $tr5_b in a $tr5_win bp window.\n"} else {$message .= "\n"}; } elsif (($cut_min,$cut_max) = ($ARGV[$i] =~ /-cut=(\d+),(\d+)/i){ $message .= "$i. Size restrictions: Size cutoff is $cut_min bp. Restrict sequence size to $cut_max bp.\n"; } elsif (($file) = ($ARGV[$i] =~ /-id=(.*)/i)) { } else {die ("\nError: Argument nr. ",++$i," is invalid !\n\n")} }; # Open results & log file# if ($file) {open (OUT,">$file.results") || die ("\nError: Output file name not valid !\n\n");open (LOG,">$file.log")} else {open (OUT,">$ARGV[0].results");open (LOG,">$ARGV[0].log")}; print "\nEST TRIMMER\n===========\n\nPerforming following steps:\n\n"; print LOG "\nLOG FILE OF ALL PERFORMED MODIFICATIONS\n"; print LOG "=======================================\n\n"; print LOG "\nPerforming following steps:\n-----------------------\n\n"; print $message; print LOG $message; print LOG "\n\nProcessing steps for each sequence:\n--------------\n"; # core # $/ = ">"; while () { next unless (($seqname,$seq) = /(.*?)\n(.*)/s); $seq =~ s/[\d\s>]//g; $seq =~ s/[^ACGTN]/N/gi; # only "acgtn" characters allowed $message = ''; $discard = 'nö'; for ($i = 1; $i < $arg; $i++){ if (($amb_n,$amb_win) = ($ARGV[$i] =~ /-amb=(\d+),(\d+)/i)){ &Trim_5_n; &Trim_3_n; } elsif (($tr3_b,$tr3_n,$tr3_win) = ($ARGV[$i] =~ /- tr3=([ACGT]),(\d+),(\d+)/i)){&Trim_3_oligoN } elsif (($tr5_b,$tr5_n,$tr5_win) = ($ARGV[$i] =~ /- tr5=([ACGT]),(\d+),(\d+)/i)) {&Trim_5_oligoN } elsif (($cut_min,$cut_max)=($ARGV[$i]=~/-cut=(\d+),(\d+)/i)){ if ($cut_max < length $seq) { $seq = substr $seq,0,$cut_max; $message .= "Restrict sequence size to $cut_max bp.\n" }; if ($cut_min and (length $seq < $cut_min)) { $message .= "Discard sequence (below $cut_min bp cutoff).\n"; $discard = "yo"; } } }; 66 if ($discard eq 'nö') { $seq = join ("\n",grep($_,split(/(.{70})/,$seq))); print OUT ">$seqname\n$seq\n" }; if ($message ne '') {print LOG "\n>$seqname\n$message"};}; print "\nDONE\n"; close (IN); close (OUT); close (LOG); # subroutines # sub Trim_5_n # trim 5' end until specified window contains less than n ambiguous bases {$check = '0'; while ((length $seq > $amb_win) and !($check eq '1')) { $window = substr $seq,0,$amb_win; if ($window =~ /^(([^N]*N){$amb_n})/i) { $seq =~ s/^($1N*)//i; $message .= "Ambiguous sequence at 5' side: $1.\n" } else {$check = '1'}; };}; sub Trim_3_n # trim 3' end until specified window contains less than n ambiguous bases { $check = '0'; while ((length $seq > $amb_win) and !($check eq '1')) { $window = substr $seq,-$amb_win; if ($window =~ /.*((N[^N]*){$amb_n})/i) { $seq =~ s/(N*$1)$//i; $message .= "Ambiguous sequence at 3' side: $1.\n" } else {$check = '1'};};}; sub Trim_5_oligoN # remove oligoN stretches from 5' side { $check = '0'; if ($seq =~ s/^($tr5_b+)//i) {$message .= "Remove \"$tr5_b\" tail at 5' side: $1.\n"}; while (!($check eq '1')) { if (length $seq > $tr5_win) {$window = substr $seq,0,$tr5_win} else {$window = $seq}; if ($window =~ /^(.*?($tr5_b){$tr5_n})/i) { $seq =~ s/^($1$tr5_b*)//i; $message .= "Remove \"$tr5_b\" stretch at 5' side: $1.\n" } else {$check = '1'}; }; }; sub Trim_3_oligoN # remove oligoN stretches from 3'side { 67 $check = '0'; if ($seq =~ s/($tr3_b+)$//i) {$message .= "Remove \"$tr3_b\" tail at 3' side: $1.\n"}; while (!($check eq '1')) { if (length $seq > $tr3_win) {$window = substr $seq,-$tr3_win} else {$window = $seq}; if ($window =~ /.*(($tr3_b){$tr3_n}.*)/i) { $seq =~ s/($tr3_b*$1)$//i; $message .= "Remove \"$tr3_b\" stretch at 3' side: $1.\n" } else {$check = '1'}; } }; 2. Script của MISA: thực thi các tác vụ phân loại chọn lọc nguồn EST chứa SSR có chất lƣợng cho việc thiết kế primer. Script có cú pháp nhƣ sau: !/usr/bin/perl -w # Author: Thomas Thiel # Program name: misa.pl ###Author: Thomas Thiel ###Release date: 14/12/01 (version 1.0) #§§§§§ DECLARATION §§§§§# # Check for arguments. If none display syntax # if (@ARGV == 0) { open (IN,"<$0"); while () {if (/^\#\# (.*)/) {$message .= "$1\n"}}; close (IN); die $message; }; # Check if help is required # if ($ARGV[0] =~ /-help/i) { open (IN,"<$0"); while () {if (/^\#\#\#(.*)/) {$message .= "$1\n"}}; close (IN); die $message; }; # Open FASTA file # open (IN,"<$ARGV[0]") || die ("\nError: FASTA file doesn't exist !\n\n"); open (OUT,">$ARGV[0].misa"); print OUT "ID\tSSR nr.\tSSR type\tSSR\tsize\tstart\tend\n"; # Reading arguments # open (SPECS,"misa.ini") || die ("\nError: Specifications file doesn't exist !\n\n"); my %typrep; my $amb = 0; while (){ %typrep = $1 =~ /(\d+)/gi if (/^def\S*\s+(.*)/i); 68 if (/^int\S*\s+(\d+)/i) {$amb = $1}}; my @typ = sort { $a $b } keys %typrep; #§§§§§ CORE §§§§§# $/ = ">"; my $max_repeats = 1; #count repeats my $min_repeats = 1000; #count repeats my (%count_motif,%count_class); #count my ($number_sequences,$size_sequences,%ssr_containing_seqs); #stores number and size of all sequences examined my $ssr_in_compound = 0; my ($id,$seq); while () { next unless (($id,$seq) = /(.*?)\n(.*)/s); my ($nr,%start,@order,%end,%motif,%repeats); # store info of all SSRs from each sequence $seq =~ s/[\d\s>]//g; #remove digits, spaces, line breaks,... $id =~ s/^\s*//g; $id =~ s/\s*$//g;$id =~ s/\s/_/g; #replace whitespace with "_" $number_sequences++; $size_sequences += length $seq; for ($i=0; $i < scalar(@typ); $i++) #check each motif class { my $motiflen = $typ[$i]; my $minreps = $typrep{$typ[$i]} - 1; if ($min_repeats > $typrep{$typ[$i]}) {$min_repeats = $typrep{$typ[$i]}}; #count repeats my $search = "(([acgt]{$motiflen})\\2{$minreps,})"; while ( $seq =~ /$search/ig ) #scan whole sequence for that class { my $motif = uc $2; my $redundant; #reject false type motifs [e.g. (TT)6 or (ACAC)5] for ($j = $motiflen - 1; $j > 0; $j--) { my $redmotif = "([ACGT]{$j})\\1{".($motiflen/$j-1)."}"; $redundant = 1 if ( $motif =~ /$redmotif/ ) }; next if $redundant; $motif{++$nr} = $motif; my $ssr = uc $1; $repeats{$nr} = length($ssr) / $motiflen; $end{$nr} = pos($seq); $start{$nr} = $end{$nr} - length($ssr) + 1; # count repeats $count_motifs{$motif{$nr}}++; #counts occurrence of individual motifs $motif{$nr}->{$repeats{$nr}}++; #counts occurrence of specific SSR in its appearing repeat 69 $count_class{$typ[$i]}++; #counts occurrence in each motif class if($max_repeats<$repeats{$nr}){$max_repeats=$repeats{$nr}};};}; next if (!$nr); #no SSRs $ssr_containing_seqs{$nr}++; @order = sort { $start{$a} $start{$b} } keys %start; #put SSRs in right order $i = 0; my $count_seq; #counts my ($start,$end,$ssrseq,$ssrtype,$size); while ($i < $nr) { my $space = $amb + 1; if (!$order[$i+1]) #last or only SSR{ $count_seq++; my $motiflen = length ($motif{$order[$i]}); $ssrtype = "p".$motiflen; $ssrseq = "($motif{$order[$i]})$repeats{$order[$i]}"; $start = $start{$order[$i]}; $end = $end{$order[$i++]}; next }; if (($start{$order[$i+1]} - $end{$order[$i]}) > $space) { $count_seq++; my $motiflen = length ($motif{$order[$i]}); $ssrtype = "p".$motiflen; $ssrseq = "($motif{$order[$i]})$repeats{$order[$i]}"; $start = $start{$order[$i]}; $end = $end{$order[$i++]}; next}; my ($interssr); if (($start{$order[$i+1]} - $end{$order[$i]}) < 1) { $count_seq++; $ssr_in_compound++; $ssrtype = 'c*'; $ssrseq = "($motif{$order[$i]})$repeats{$order[$i]}($motif{$order[$i+1]})$repeats{$or der[$i+1]}*"; $start = $start{$order[$i]}; $end = $end{$order[$i+1]} } else { $count_seq++; $ssr_in_compound++; $interssr = lc substr($seq,$end{$order[$i]},($start{$order[$i+1]} - $end{$order[$i]}) - 1); $ssrtype = 'c'; $ssrseq = "($motif{$order[$i]})$repeats{$order[$i]}$interssr($motif{$order[$i+1]})$re peats{$order[$i+1]}"; $start = $start{$order[$i]}; $end = $end{$order[$i+1]}; 70 #$space -= length $interssr }; while ($order[++$i + 1] and (($start{$order[$i+1]} - $end{$order[$i]}) <= $space)) { if (($start{$order[$i+1]} - $end{$order[$i]}) < 1){ $ssr_in_compound++; $ssrseq .= "($motif{$order[$i+1]})$repeats{$order[$i+1]}*"; $ssrtype = 'c*'; $end = $end{$order[$i+1]} } else{ $ssr_in_compound++; $interssr = lc substr($seq,$end{$order[$i]},($start{$order[$i+1]} - $end{$order[$i]}) - 1); $ssrseq .= "$interssr($motif{$order[$i+1]})$repeats{$order[$i+1]}"; $end = $end{$order[$i+1]}; #$space -= length $interssr } }; $i++; } continue { print OUT "$id\t$count_seq\t$ssrtype\t$ssrseq\t",($end - $start + 1),"\t$start\t$end\n" }; }; close (OUT); open (OUT,">$ARGV[0].statistics"); #§§§§§ INFO §§§§§# #§§§ Specifications §§§# print OUT "Specifications\n==============\n\nSequence source file: \"$ARGV[0]\"\n\nDefinement of microsatellites (unit size / minimum number of repeats):\n"; for ($i = 0; $i < scalar (@typ); $i++) {print OUT "($typ[$i]/$typrep{$typ[$i]}) "};print OUT "\n"; if ($amb > 0) {print OUT "\nMaximal number of bases interrupting 2 SSRs in a compound microsatellite: $amb\n"}; print OUT "\n\n\n"; #§§§ OCCURRENCE OF SSRs §§§# #small calculations my @ssr_containing_seqs = values %ssr_containing_seqs; my $ssr_containing_seqs = 0; for ($i = 0; $i < scalar (@ssr_containing_seqs); $i++) {$ssr_containing_seqs += $ssr_containing_seqs[$i]}; my @count_motifs = sort {length ($a) length ($b) || $a cmp $b } keys %count_motifs; my @count_class = sort { $a $b } keys %count_class; for ($i = 0; $i < scalar (@count_class); $i++) {$total += $count_class{$count_class[$i]}}; 71 #§§§ Overview §§§# print OUT "RESULTS OF MICROSATELLITE SEARCH\n================================\n\n"; print OUT "Total number of sequences examined: $number_sequences\n"; print OUT "Total size of examined sequences (bp): $size_sequences\n"; print OUT "Total number of identified SSRs: $total\n"; print OUT "Number of SSR containing sequences: $ssr_containing_seqs\n"; print OUT "Number of sequences containing more than 1 SSR: ",$ssr_containing_seqs - ($ssr_containing_seqs{1} || 0),"\n"; print OUT "Number of SSRs present in compound formation: $ssr_in_compound\n\n\n"; #§§§ Frequency of SSR classes §§§# print OUT "Distribution to different repeat type classes\n----------------- ----------------------------\n\n"; print OUT "Unit size\tNumber of SSRs\n"; my $total = undef; for ($i = 0; $i < scalar (@count_class); $i++) {print OUT "$count_class[$i]\t$count_class{$count_class[$i]}\n"}; print OUT "\n"; #§§§ Frequency of SSRs: per motif and number of repeats §§§# print OUT "Frequency of identified SSR motifs\n---------------------------- ------\n\nRepeats"; for ($i = $min_repeats;$i <= $max_repeats; $i++) {print OUT "\t$i"}; print OUT "\ttotal\n"; for ($i = 0; $i < scalar (@count_motifs); $i++) { my $typ = length ($count_motifs[$i]); print OUT $count_motifs[$i]; for ($j = $min_repeats; $j <= $max_repeats; $j++) { if ($j < $typrep{$typ}) {print OUT "\t-";next}; if ($count_motifs[$i]->{$j}) {print OUT "\t$count_motifs[$i]->{$j}"} else {print OUT "\t"}; }; print OUT "\t$count_motifs{$count_motifs[$i]}\n"; }; print OUT "\n"; #§§§ Frequency of SSRs: summarizing redundant and reverse motifs §§§# # Eliminates %count_motifs ! print OUT "Frequency of classified repeat types (considering sequence complementary)\n----------------------------------------------------------- --------------\n\nRepeats"; my (%red_rev,@red_rev); # groups 72 for ($i = 0; $i < scalar (@count_motifs); $i++) { next if ($count_motifs{$count_motifs[$i]} eq 'X'); my (%group,@group,$red_rev); # store redundant/reverse motifs my $reverse_motif = $actual_motif = $actual_motif_a = $count_motifs[$i]; $reverse_motif =~ tr/ACGT/TGCA/; my $reverse_motif_a = $reverse_motif; for ($j = 0; $j < length ($count_motifs[$i]); $j++){ if ($count_motifs{$actual_motif}) {$group{$actual_motif} = "1"; $count_motifs{$actual_motif}='X'}; if ($count_motifs{$reverse_motif}) {$group{$reverse_motif} = "1"; $count_motifs{$reverse_motif}='X'}; $actual_motif =~ s/(.)(.*)/$2$1/; $reverse_motif =~ s/(.)(.*)/$2$1/; $actual_motif_a = $actual_motif if ($actual_motif lt $actual_motif_a); $reverse_motif_a = $reverse_motif if ($reverse_motif lt $reverse_motif_a) }; if ($actual_motif_a lt $reverse_motif_a) {$red_rev = "$actual_motif_a/$reverse_motif_a"} else {$red_rev = "$reverse_motif_a/$actual_motif_a"}; # group name $red_rev{$red_rev}++; @group = keys %group; for ($j = 0; $j < scalar (@group); $j++) { for ($k = $min_repeats; $k <= $max_repeats; $k++) { if ($group[$j]->{$k}) {$red_rev->{"total"} += $group[$j]- >{$k};$red_rev->{$k} += $group[$j]->{$k}} } }}; for ($i = $min_repeats; $i <= $max_repeats; $i++) {print OUT "\t$i"}; print OUT "\ttotal\n"; @red_rev = sort {length ($a) length ($b) || $a cmp $b } keys %red_rev; for ($i = 0; $i < scalar (@red_rev); $i++) { my $typ = (length ($red_rev[$i])-1)/2; print OUT $red_rev[$i]; for ($j = $min_repeats; $j <= $max_repeats; $j++) { if ($j < $typrep{$typ}) {print OUT "\t-";next}; if ($red_rev[$i]->{$j}) {print OUT "\t",$red_rev[$i]->{$j}} else {print OUT "\t"} }; print OUT "\t",$red_rev[$i]->{"total"},"\n";}; 3 Các script trong việc thực thi tác vụ thiết kế primer ● 1_ssr_repeat_finder: #!/usr/bin/perl -w 73 # tim kiem SSR trong EST, tach trinh tu SSR ra va trinh tu bao ton de phan tich xa hon # Input: sequence.txt # CheckedIDs.txt # Output: new_ids.txt # ssrout.txt # labdbout.txt ############################################### # thay doi nhung thong so nay khi thuc thi!!!!!!!! ############################################### $datename = '170404'; # ten thu muc phai o dang ngay va cho tat ca cac file du lieu khac $runtype = 1; # 1 = genbank fasta, 0 = local (fasta header differences) ############################################## # khong thay doi bat ky dieu gi o phan nay ############################################## $seqcount = 0; $ssr_count = 0; @ssr_label = qw(a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az); # thiet lap vung bao ton o day $flank_length = 150; # i.e. 150 bp # thiet lap chieu dai toi thieu của SSR $min_pattern_length = 12; # 12 bp # mo file chua trinh tu input – dinh dang fasta ma so truy cap open (SEQFILE, "../$datename/sequence$datename.txt") || die "file not found: $!"; # mo file out put cho trinh tu ids open (IDFILE, ">>../$datename/new_ids$datename.txt") || die "couldn't create file"; # mo file output ket qua SSR open (SSROUTFILE, ">>../$datename/ssrout$datename.txt") || die "couldn't create file"; #mo file output cho toan bo output dua vao labdb open (LABDBTXT, ">>../$datename/labdbout$datename.txt") || die "couldn't create file"; # doc file da chua Ids truoc $CheckedIDs = `cat ../$datename/CheckedIDs.txt`; # phan tich file trinh tu va tien trinh if ($runtype == 1) { while (defined ($line = )) { chomp $line; 74 if ($line =~ /^>/) { if (defined ($Seq)) { #kiem tra genbank neu id co truoc if ($CheckedIDs !~ /$SeqHead[3]/) { &SSRSearch; print "new seq\n"; } else { print "old seq\n";} } $seqcount++; print $seqcount; $HeadLine = $line; undef $Seq; @SeqHead = split(/\|/,$HeadLine); print IDFILE "$SeqHead[3]\t$SeqHead[4]\n"; } else { $Seq = "$Seq" . "$line"; } } if (defined ($Seq)) { # kiem tra genbank neu id co da co if ($CheckedIDs !~ /$SeqHead[3]/) { &SSRSearch; print "new seq\n"; } else { print "old seq\n";} }} elsif ($runtype == 2) { while (defined ($line = )) { chomp ($line); @LineIn = split(/\t/, $line); $SeqHead[3] = $LineIn[0]; print $SeqHead[3]; $Seq = $LineIn[1]; if (defined ($Seq)) { &SSRSearch; } $seqcount++; print $seqcount; if ( ($seqcount%5) == 0 ) { print "\n"; } else { print "\t"; } undef $Seq; @SeqHead = split(/\|/,$HeadLine) }} elsif ($runtype == 3) { while (defined ($line = )) { chomp ($line); if ($line =~ /^>/) { if (defined ($Seq)) { 75 &SSRSearch; } $seqcount++; print $seqcount; if ( ($seqcount%5) == 0 ) { print "\n"; } else { print "\t";} undef $Seq; $HeadLine = $line; @templine1 = split(/>/,$HeadLine); @templine2 = split(/\./, $templine1[1]); $SeqHead[3] = $templine2[0]."_".$templine2[3]; print IDFILE "$SeqHead[3]\n"; } else { $Seq = "$Seq" . "$line";} } if (defined ($Seq)) { &SSRSearch; }} close (SEQFILE); close (IDFILE); close (SSROUTFILE); close (LABDBTXT); print "Number of sequences in input file = $seqcount \n"; print "Number of Repeats found = $ssr_count \n"; exit 0; ############################################# # thuongtrinhcon sub SSRSearch() {print "*"; $suffix = -1; while ( $Seq =~ /(([ATGC]{2,})\2{3,})/gi ) { print "+"; $fullmatch = $1; $minmatch = $2; # kiem tra tuong hop toi thieu cua SSR: di-nt 6 repeats, tri-nt 4 repeats, tetra-nt 4 # kiem tra chieu dai SSR lon hon tong chieu dai toi thieu dang tuong hop # loai bo duoi poly - AAAAAAA, TTTTTTTT, ... if ( (( $length_sub = length($fullmatch)) >= $min_pattern_length ) && !( $fullmatch =~ /([ATGC])\1{8,}/ ) ) { print "-"; $ssr_count++; $suffix++; $Accession = "$SeqHead[3]" . "$ssr_label[$suffix]"; 76 print SSROUTFILE "$Accession\t$fullmatch\t$minmatch\t"; print LABDBTXT "$SeqHead[3]\t$Accession\t$fullmatch\t$minmatch\t"; $pos2 = index($Seq,$fullmatch); $pos3 = $pos2 + $length_sub; if ($pos2 < $flank_length) { $pos1 = 0; } else { $pos1 = $pos2 - $flank_length; } if ( ( ( $max = length($Seq)) - $pos3 ) < $flank_length ) { $pos4 = $max; } else { $pos4 = $pos3 + $flank_length;} $seqleft = substr($Seq,$pos1,$pos2-$pos1); $seqcenter = substr($Seq,$pos2,$pos3-$pos2); $seqright = substr($Seq,$pos3,$pos4-$pos3); print SSROUTFILE $seqleft, "[", $seqcenter,"]",$seqright,"\n"; print LABDBTXT $pos2,",",$length_sub,"\t",$seqleft, "[", $seqcenter,"]",$seqright,"\n"; } } print "\n";} ● 2_ssr_primer_designer #!/usr/bin/perl -w # thiet ke primer khuech dai doan dich SSR # Input: ssrout.txt # Output: raw_primer3.out # primer_results.txt ############################################ # thay doi nhung thong so nay khi chay!!!!!!!! ############################################ $datename = '170404'; ten thu muc la dang so va nhu the voi cac file khac $primer3app = 'D:\\170404\\primer3'; # duong dan den cau lenh primer3 ############################################# #khong thay doi nhung nhung gi duoi day ############################################# # mo file output ssr results open (SSRINFILE, "../$datename/ssrout$datename.txt") || die "couldn't open file"; open (RAWPRIMER, ">../$datename/raw_primer3$datename.out") || die "couldn't open file: $!"; open (PRIMEROUT, ">../$datename/primer_results$datename.txt") || die "couldn't open file: $!"; $counter = 0; 77 while (defined($line = )) { chomp ($line); @columns = split(/\t/,$line); @seq = split(/\[|\]/,$columns[3]); $length_left = length($seq[0]); $length_mask = length($seq[1]); $length_right = length($seq[2]); $t1 = $length_left+1; $t2 = $length_mask; open (PRIMERIN, ">../$datename/primerin.txt") || die "couldn't open file: $!"; print PRIMERIN "PRIMER_SEQUENCE_ID=",$columns[1],"\n"; print PRIMERIN "SEQUENCE=",$seq[0],$seq[1],$seq[2],"\n"; print PRIMERIN "TARGET=", $t1, ",", $t2, "\n"; print PRIMERIN "PRIMER_PRODUCT_SIZE_RANGE=80-160 80-240 80-300\n"; print PRIMERIN "PRIMER_OPT_SIZE=24\n"; print PRIMERIN "PRIMER_MIN_SIZE=20\n"; print PRIMERIN "PRIMER_MAX_SIZE=28\n"; print PRIMERIN "PRIMER_OPT_TM=63\n"; print PRIMERIN "PRIMER_MIN_TM=60\n"; print PRIMERIN "PRIMER_MAX_TM=65\n"; print PRIMERIN "PRIMER_MAX_DIFF_TM=1\n"; print PRIMERIN "=\n"; close (PRIMERIN); # $primer3 = `../devel/primer/primer3_0_9_test/src/primer3_core < ../$datename/primerin.txt`; $primer3 = `$primer3app < ../$datename/primerin.txt`; print RAWPRIMER "######## $columns[1] #########\n"; print RAWPRIMER $primer3, "\n"; @prime_out = split(/\n/, $primer3); foreach $i (0..$#prime_out) { ($varname,$varvalue) = split(/=/, $prime_out[$i]); $primehash{$varname} = $varvalue; } if ($primehash{'PRIMER_LEFT_SEQUENCE'}) { $counter++; print PRIMEROUT "$columns[0]\t$columns[1]\t$columns[2]"; print PRIMEROUT "\t$seq[0]$seq[1]$seq[2]"; print PRIMEROUT "\t", $primehash{'PRIMER_LEFT_SEQUENCE'}; print PRIMEROUT "\t", $primehash{'PRIMER_LEFT_TM'}; print PRIMEROUT "\t", $primehash{'PRIMER_RIGHT_SEQUENCE'}; print PRIMEROUT "\t", $primehash{'PRIMER_RIGHT_TM'}; print PRIMEROUT "\t", $primehash{'PRIMER_PRODUCT_SIZE'}; 78 print PRIMEROUT "\n"; } undef %primehash;} close (PRIMEROUT); close (SSRINFILE); close (RAWPRIMER); print "repeats primed: ", $counter, "\n"; exit 0; ● 3_ssr_primer_rep_check #!/usr/bin/perl -w # chon loc va loai bo nhung primer co do phuc tap thap # Input: primer_results.txt # Output: rescreened.txt ############################################ # thay doi cac tho so nay khi chay!!!!!!!! ############################################ $datename = '170404'; # thu muc chinh phai o dang so va cac file khac ############################################ #khong thay doi nhung gi duoi day ############################################ open (OUTFILE, ">rescreened$datename.txt"); $good = 0; $bad = 0; $temp = `bin primer_results$datename.txt`; @temp1 = split(/\n/, $temp); foreach $i (0..$#temp1) { @temp2 = split(/\t/, $temp1[$i]); print $temp2[0],"\t",$temp2[1],"\t",$temp2[2],"\t",$temp2[3]; print "\t",$temp2[4],"\t",$temp2[5],"\t",$temp2[6],"\t",$temp2[7],"\t",$temp2[8], "\t"; if (( $temp2[4] =~ /(([ATGC]{2,3})\2{3,})/gi ) || ( $temp2[6] =~ /(([ATGC]{2,3})\2{3,})/gi )) { print "bad\n"; $bad++; } else { print "good\n"; $good++; print OUTFILE $temp2[0],"\t",$temp2[1],"\t",$temp2[2],"\t",$temp2[3],"\t"; 79 print OUTFILE $temp2[4],"\t",$temp2[5],"\t",$temp2[6],"\t",$temp2[7],"\t",$temp2[8],"\n"; }} print "good: $good\nbad: $bad\n"; close (OUTFILE); exit(0); ● 4_ssr_primer_blast #!/usr/bin/perl -w # so sanh nhung trinh tu SSR da thiet ke primer # Input: rescreened.txt # Output: blastout.txt # fullblastoutput.txt ############################################# #thay doi nhung thong so khi thuc thi!!!!!!!! ############################################# $datename = '170404'; # ten thu muc va phan sau cung cua cac file $blastapp = 'D:\\170404\\blastall'; # duong dan den nhung cau lenh blastall $blastdbdir = 'D:\\170404\\db'; #duong dan den thu muc chua du lieu blast $blastdbname = 'AllPrimers.nt'; # ten nhung du lieu blast su dung $formatdbapp = 'D:\\170404\\formatdb'; #duong dan den cau lenh formatdb ############################################ # khong thay doi nhung gi ben duoi ########################################### open (PRIMERSIN, "../$datename/rescreened$datename.txt") || die; open (BLASTOUTFILE, ">../$datename/blastout$datename.txt") || die; open (FULLBLASTOUT, ">../$datename/fullblastoutput$datename.txt") || die; $counter = 0; $b0hit = 0; while (defined($line=)) { chomp ($line); @columns = split(/\t/,$line); $Accession = $columns[0]; $sequence = $columns[3]; $forward = $columns[4]; $reverse = $columns[6]; $counter++; print $counter, "\n"; print BLASTOUTFILE $Accession, "\t", $columns[1], "\t", $columns[2]; print BLASTOUTFILE "\t", $sequence, "\t", $forward, "\t", $columns[5], "\t"; print BLASTOUTFILE $reverse, "\t", $columns[7], "\t", $columns[8], "\t"; &BlastIt;} 80 print "Blasted Sequences= ",$counter,"\n"; print "Blast NON-Hits= ",$b0hit,"\n"; close (PRIMERSIN); close (BLASTOUTFILE); close (FULLBLASTOUT); exit 0; sub BlastIt() { open (TMPSEQFILE, ">../$datename/repeats/$Accession.fasta"); print TMPSEQFILE "> ",$Accession,"\n",$sequence,"\n"; close (TMPSEQFILE); # $blastout = `blastall -p blastn -d db/AllPrimers.nt -e 0.01 - i ../$datename/repeats/$Accession.fasta`; $blastout = `$blastapp -p blastn -d $blastdbdir/$blastdbname -e 0.01 -i ../$datename/repeats/$Accession.fasta`; print FULLBLASTOUT "XXXXX\t",$Accession,"\tXXXXXXXXXXXXXXXXXXXXXXXXX\n\n"; print FULLBLASTOUT $blastout; &ParseBlast;} sub DBup() { # open (BLASTDBFASTA, ">>../blast/db/AllPrimers.nt"); open (BLASTDBFASTA, ">>$blastdbdir/$blastdbname"); print BLASTDBFASTA "> ",$Accession,"_f\n",$forward,"\n"; print BLASTDBFASTA "> ",$Accession,"_r\n",$reverse,"\n"; close (BLASTDBFASTA); # $formatdbstatus = system("formatdb -i db/AllPrimers.nt -p F -o T"); $formatdbstatus = system("$formatdbapp -i $blastdbdir/$blastdbname -p F -o T");} sub ParseBlast() { # tach nhung output blast output vao mot danh sach @blastrecs = split(/\n\n/, $blastout); if ($blastrecs[5] =~ /Sequence/) { @blastmatch = split(/\n/, $blastrecs[6]); print BLASTOUTFILE $#blastmatch-1, "\t"; for $entry (0 .. $#blastmatch) { ($name,$score, $E) = split(/[ ]+ /, $blastmatch[$entry]); print $name,"\t",$score,"\t",$E,"\n"; print BLASTOUTFILE "\t",$name,"\t",$score,"\t",$E; } } else { print BLASTOUTFILE "0\t"; $b0hit++; print "No Hits found\n"; print BLASTOUTFILE "\tnone\tnull\tnull"; 81 &DBup; } print BLASTOUTFILE "\n";} ● 5_ssr_order_filter #!/usr/bin/perl -w # tao file chua chi nhung SSR co primer duy nhat # Input: blastout.txt # Output: filter.txt ################################################ #thay doi cac thong so duoi day khi chay!!!!!!!! ################################################ $datename='170404';# ten thu mục chinh dang so va phan cuoi cua cac file ################################################ # khong thay doi nhung gi ben duoi ################################################ open (OUTFILE, ">filter$datename.txt"); $infile = `ten blastout$datename.txt`; $count = 0; @temp1 = split(/\n/, $infile); foreach $f (0..$#temp1) { @temp2 = split(/\t/, $temp1[$f]); if ($temp2[11] eq 'none') { print OUTFILE $temp2[0],"\t",$temp2[1],"\t"; print OUTFILE $temp2[2],"\t",$temp2[3],"\t"; print OUTFILE $temp2[4],"\t",$temp2[5],"\t"; print OUTFILE $temp2[6],"\t",$temp2[7],"\t"; print OUTFILE $temp2[8],"\n"; print $temp2[0],"\t",$temp2[10],"\t",$temp2[11],"\n"; $count++;}} print "non-hits: ",$count,"\n"; close (OUTFILE); exit (0); ● 6_ssr_order_formatter #!/usr/bin/perl -w # tao mot file chi chua nhung SSR co primer duy nhat-co thong tin can thiet cho phan cap primer # Input: blastout.txt # Output: order.txt ################################################### # thay doi cac thong so ben duoi khi chay!!!!!!!! 82 ################################################### $datename = '170404'; # ten thu muc chin va phan cuoi cac file ################################################### # khong thay doi nhung gi duoi day ################################################### open (OUTFILE, ">order$datename.txt"); $infile = `nin blastout$datename.txt`; $count = 0; @temp1 = split(/\n/, $infile); foreach $f (0..$#temp1) { @temp2 = split(/\t/, $temp1[$f]); if ($temp2[11] eq 'none') { print OUTFILE $temp2[0],"\t"; print OUTFILE $temp2[4],"\t",$temp2[5],"\t"; print OUTFILE $temp2[6],"\t",$temp2[7],"\t"; print OUTFILE $temp2[8],"\n"; print $temp2[0],"\t",$temp2[10],"\t",$temp2[11],"\n"; $count++;}} print "non-hits: ",$count,"\n"; close (OUTFILE); exit (0); 83

Các file đính kèm theo tài liệu này:

  • pdfTRAN NGOC VIET - 02126159.pdf