Senin, 14 Maret 2016

Sebuah Tulisan Bioinformatika – Genomika (Part 2)

Setelah kita mempelajari sekilas tentang teknologi pengurutan DNA pada Part 1, saya berharap teman-teman mendapatkan gambaran tentang bagaimana proses pengurutan DNA pada skala genom dilakukan. Hmm…tapi tidak ada salahnya jika saia review sedikit agar para teman-teman pembaca mendapatkan dasar-dasar yang diperlukan untuk memahami Part 2 ini. Teknologi pengurutan DNA, kendati sudah mengalami banyak kemajuan pesat, masih belum dapat mengurutkan DNA secara ideal. Ya, secara ideal yang saia maksud adalah mengurutkan untai DNA dari satu ujung ke ujung yang lain. Prosedur umum dari pengurutan DNA genom saat ini adalah memotong-motong DNA genom menjadi jutaan potongan kecil dan kemudian mengurutkan semuanya secara paralel sebanyak beberapa kali. Perlu diperhatikan disini bahwa prosesnya tidak hanya melibatkan satu genom saja, melainkan banyak genom karena ekstraksi DNA dilakukan terhadap banyak sel dari sebuah spesies. Dengan demikian, mesin pengurut DNA yang saia ceritakan pada Part 1 akan mengurutkan DNA genom sebanyak beberapa kali namun menyajikan hasil urutannya dalam bentuk jutaan potongan kecil yang perlu dirangkai satu sama lain sebelum menjadi sebuah genom utuh. Perangkaian bacaan (reads) hasil pengurutan genom dapat dianalogikan seperti pada merangkai potongan puzzle, namun sedikit lebih sulit. Bayangkan kita memiliki 10 kotak jigsaw puzzle untuk gambar yang sama, tumpahkan dan campur semua isinya, lalu coba rangkai satu demi satu hingga menjadi sebuah gambar utuh.
Dapat bayangannya? Oke sekarang kita menuju ke kasus nyata. Bayangkan kita memiliki genom TAATGCCATGGGATGTT yang dipecah dan diurutkan menjadi potongan bacaan berjumlah tiga nukleotida (trimer) berikut: TAA, AAT, ATG, TGC, GCC, CCA, CAT, ATG, TGG, GGG, GGA, GAT, ATG, TGT, dan GTT. Perhatikan pola setiap trimer tersebut baik-baik dan kita akan mengetahui bahwa trimer kedua bertumpang-tindih dengan trimer pertama sebanyak dua nukleotida. So, merangkai trimer-trimer tersebut menjadi sebuah genom utuh? Ya mudah saja. Jajarkan saja trimer satu yang bertumpang tindih dengan lainnya dan kita akan segera mendapatkan urutan genomnya. Kelihatannya mudah memang, tapi kita lupa bahwa kita dapat melakukannya semudah itu karena adanya dua asumsi. Pertama, kita telah mengetahui terlebih dulu urutan genomnya. Kedua, trimer-trimer tersebut telah diurutkan sedemikian rupa sehingga trimer pertama pasti bertumpang-tindih dengan trimer kedua dan seterusnya. Pada kasus perangkaian genom yang sebenarnya, kedua asumsi di atas tidak ada (Gambar 1). Jadi, apakah kita masih bisa merangkai genom tersebut?
Gambar 1. Kita dapat dengan mudah merangkai genom jika kita memiliki panduan berupa urutan genom itu sendiri dan bacaan urutan yang saling tumpang tindih satu sama lainnya secara berurutan (kiri). Perangkaian genom akan lebih sulit tanpa adanya urutan genom dan bacaan urutan yang teracak satu sama lain (kanan).

 Sebelum beranjak ke teknik perangkaian genom, perkenankan saia untuk mengenalkan beberapa istilah teknisnya. Setiap bacaan urutan dengan panjang k nukleotida akan kemudian disebut sebagai kmer. Contoh di atas menggunakan bacaan berjumlah tiga nukleotida yang disebut trimer atau 3-mer. Selanjutnya, kita akan mendefinisikan awalan dan akhiran dari sebuah kmer. Awalan kmer didefinisikan sebagai kmer–1 yang diambil dari awal; sedangkan akhiran kmer didefinisikan sebagai kmer–1 yang diambil dari akhir. Sebagai contoh, sebuah 3-mer TAA memiliki awalan TA dan akhiran AT. Teknik perangkaian genom yang akan diceritakan pada paragraf selanjutnya menggunakan apa yang disebut sebagai teori grafik (graph theory). Grafik yang dimaksud ini bukanlah grafik Cartesian dengan sumbu x dan y, melainkan sebuah peta hubungan antara nodus (nodes) dengan garis (edges).
Oke, sekarang kita mulai teknik perangkaiannya. Perangkaian genom dari bacaan urutan (reads) dilakukan dalam dua tahap, yakni: (i) konstruksi grafik de Bruijn dan (ii) penelusuran grafik de Bruijn untuk menghasilkan jalur Eulerian. Kita mulai dari yang pertama dulu, yaitu konstruksi grafik de Bruijn. Saia sendiri kesulitan menuliskan definisi formalnya, tapi intinya grafik de Bruijn merupakan grafik yang merepresentasikan keseluruhan kmer dalam bentuk nodus dan garis dengan jumlah minimum. Dalam kasus ini, kita ingin setiap bacaan urutan direpresentasikan oleh sebuah garis, sehingga kedua nodus yang dihubungkan oleh garis tersebut adalah awalan dan akhiran dari sebuah kmer (Gambar 2). Selanjutnya, kita dapat melihat bahwa terdapat nodus akhiran dari sebuah 3-mer yang identik dengan nodus awalan 3-mer yang lain. Jika kita menemukan ini, kita dapat menyatukannya sehingga pada akhirnya akan terbentuk sebuah jalinan antar 3-mer yang direpresentasikan oleh nodus awalan dan akhiran. Pada Gambar 2, hanya 3-mer ujung awal yang nodus awalannya tidak identik dengan nodus akhir 3-mer manapun dan begitu juga sebaliknya untuk 3-mer ujung akhir.
Gambar 2. Membuat nodus awalan dan akhiran dari seluruh 3-mer dan kemudian menyambungkannya satu sama lain jika nodus akhiran dari 3-mer yang satu identik dengan nodus awalan dari 3-mer lainnya.

Nah setelah seluruh 3-mer terjalin, bukankah masalahnya sudah selesai? Kita hanya perlu ‘membaca’ seluruh 3-mer tersebut dari ujung awal hingga ujung akhir untuk mendapatkan urutan genomnya bukan? Well, jika genom organisme hanya terdiri dari 17 nukleotida dan dapat terwakilkan oleh hanya 15 3-mer seperti pada Gambar 2, maka masalah memang selesai. Namun pada kenyataannya, genom bakteri yang berukuran kecil pun dapat menghasilkan jutaan kmer. Jadi dalam kasus ini peran grafik de Bruijn adalah mempersingkat jalinan antar kmer pada Gambar 2 namun tetap mempertahankan informasinya sehingga algoritma yang dirancang untuk perangkaian bacaan menjadi genom dapat berjalan dengan cepat. Sekarang coba perhatikan bahwa meskipun seluruh nodus telah terjalin satu sama lain, masih terdapat nodus-nodus yang identik satu dengan lainnya. Kita dapat menyatukan nodus-nodus tersebut untuk mengkonstruksi grafik de Bruijn (Gambar 3).  Nah sampai disini, tahap 1 telah selesai. Berikutnya adalah tahap 2, yakni mencari jalur di dalam grafik de Bruijn tersebut yang bersifat Eulerian. Sebuah jalur (path) bersifat Eulerian jika dan hanya jika jalur tersebut menelusuri seluruh garis di dalam grafik sebanyak persis satu kali. Jika kita mencobanya pada grafik de Bruijn yang baru saja kita konstruksi, kita akan mendapatkan contoh jalur Eulerian seperti pada Gambar 4.

Gambar 3. Konstruksi grafik de Bruijn dengan menyatukan lebih banyak nodus-nodus yang identik.



Gambar 4. Ikuti jalur Eulerian dan rangkai genomnya!

Hingga pada tahap ini kita telah selesai mengkonstruksi genom contoh kita. Tentunya konstruksi ini merupakan contoh yang sangat sederhana dan saia berani jamin tidak akan ada kasus perangkaian genom di dunia nyata yang sesederhana ini. Pada kenyataannya, beberapa kendala yang kerap muncul selama perangkaian genom adalah kendala ketidaklengkapan bacaan urutan yang diberikan oleh mesin pengurut DNA. Kesalahan pengurutan, sesuatu yang cukup sering dilakukan oleh mesin pengurut DNA, juga turut mempersulit perangkaian karena berpotensi mengarahkan pada rangkaian genom yang salah. Panjang kmer juga turut berperan dalam menentukan apakah kompleksitas grafik de Bruijn. Perhatikan baik-baik Gambar 4 dan kita akan menyadari bahwa ada jalur alternatif yang juga bersifat Eulerian namun memberikan hasil akhir urutan genom yang salah. Well, keseluruhan kendala ini akan saia bahas pada cerita berikutnya yak. Kepanjangan kalau dibahas sekalian disini…hehehe. So stay tuned!!



Victor Aprilyanto



Bacaan Lanjutan
Compeau, P. E. C. & P. A. Pevzner. 2015. Bioinformatics Algorithms: An Active Learning Approach 2nd Edition, Vol. 1. Active Learning Pub.: USA.
Compeau, P. E. C., P. A. Pevzner, & G. Tesler. 2011. How to apply de Bruijn graphs to genome assembly. Nature Biotechnology 29: 987-991.
Jones, N. C. & P. A. Pevzner. 2004. An introduction to Bioinformatics Algorithms. MIT Press Pub.: USA.

Tidak ada komentar: