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
94 trang |
Chia sẻ: maiphuongtl | Lượt xem: 1869 | Lượt tải: 0
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:
- TRAN NGOC VIET - 02126159.pdf