Bioinformatika
merupakan ilmu terapan yang lahir dari perkembangan teknologi informasi
dibidang molekular. Pembahasan dibidang bioinformatik ini tidak
terlepas dari perkembangan biologi molekular modern, salah satunya
peningkatan pemahaman manusia dalam bidang genomic yang terdapat dalam
molekul DNA. Kemampuan untuk memahami dan memanipulasi
kode genetik DNA ini sangat didukung oleh teknologi informasi melalui
perkembangan hardware dan soffware. Baik pihak pabrikan sofware dan
harware maupun pihak ketiga dalam produksi perangkat lunak. Salah satu
contohnya dapat dilihat pada upaya Celera Genomics, perusahaan
bioteknologi Amerika Serikat yang melakukan pembacaan sekuen genom
manusia yang secara maksimal memanfaatkan teknologi informasi sehingga
bisa melakukan pekerjaannya dalam waktu yang singkat (hanya beberapa
tahun).
Perkembangan
teknologi DNA rekombinan memainkan peranan penting dalam lahirnya
bioinformatika. Teknologi DNA rekombinan memunculkan suatu pengetahuan
baru dalam rekayasa genetika organisme yang dikenala bioteknologi. Perkembangan
bioteknologi dari bioteknologi tradisional ke bioteknologi modren salah
satunya ditandainya dengan kemampuan manusia dalam melakukan analisis
DNA organisme, sekuensing DNA dan manipulasi DNA. Sekuensing
DNA satu organisme, misalnya suatu virus memiliki kurang lebih 5.000
nukleotida atau molekul DNA atau sekitar 11 gen, yang telah berhasil
dibaca secara menyeluruh pada tahun 1977. Kemudia Sekuen seluruh DNA
manusia terdiri dari 3 milyar nukleotida yang menyusun 100.000 gen dapat
dipetakan dalam waktu 3 tahun, walaupun semua ini belum terlalu
lengkap. Saat ini terdapat milyaran data nukleotida yang tersimpan dalam
database DNA, GenBank di AS yang didirikan tahun 1982. Bioinformatika ialah ilmu yang mempelajari penerapan teknik komputasi untuk mengelola dan menganalisis informasi hayati. Bidang ini mencakup penerapan metode-metode matematika, statistika, dan informatika untuk memecahkan masalah-masalah biologi, terutama yang terkait dengan penggunaan sekuens DNA dan asam amino. Contoh topik utama bidang ini meliputi pangkalan data untuk mengelola informasi hayati, penyejajaran sekuens (sequence alignment), prediksi struktur untuk meramalkan struktur protein atau pun struktur sekunder RNA, analisis filogenetik, dan analisis ekspresi gen.
Bioinformatika pertamakali dikemukakan pada pertengahan 1980an untuk mengacu kepada penerapan ilmu komputer
dalam bidang biologi. Meskipun demikian, penerapan bidang-bidang dalam
bioinformatika seperti pembuatan pangkalan data dan pengembangan algoritma untuk analisis sekuens biologi telah dilakukan sejak tahun 1960an.
Kemajuan teknik biologi molekuler dalam mengungkap sekuens biologi protein (sejak awal 1950an) dan asam nukleat (sejak 1960an) mengawali perkembangan pangkalan data dan teknik analisis sekuens biologi. Pangkalan data sekuens protein mulai dikembangkan pada tahun 1960an di Amerika Serikat, sementara pangkalan data sekuens DNA dikembangkan pada akhir 1970an di Amerika Serikat dan Jerman pada Laboratorium Biologi Molekuler Eropa (European Molecular Biology Laboratory).
Penemuan teknik sekuensing
DNA yang lebih cepat pada pertengahan 1970an menjadi landasan
terjadinya ledakan jumlah sekuens DNA yang dapat diungkapkan pada 1980an
dan 1990an. Hal ini menjadi salah satu pembuka jalan bagi proyek-proyek pengungkapan genom, yang meningkatkan kebutuhan akan pengelolaan dan analisis sekuens, dan pada akhirnya menyebabkan lahirnya bioinformatika.
Perkembangan jaringan internet
juga mendukung berkembangnya bioinformatika. Pangkalan data
bioinformatika yang terhubungkan melalui internet memudahkan ilmuwan
dalam mengumpulkan hasil sekuensing ke dalam pangkalan data tersebut
serta memperoleh sekuens biologi sebagai bahan analisis. Selain itu,
penyebaran program-program
aplikasi bioinformatika melalui internet memudahkan ilmuwan dalam
mengakses program-program tersebut dan kemudian memudahkan
pengembangannya.
Pangkalan Data sekuens biologi dapat berupa pangkalan data primer untuk menyimpan sekuens primer asam nukleat dan protein,
pangkalan data sekunder untuk menyimpan motif sekuens protein, dan
pangkalan data struktur untuk menyimpan data struktur protein dan asam
nukleat.
Pangkalan data utama untuk sekuens asam nukleat saat ini adalah GenBank (Amerika Serikat), EMBL (the European Molecular Biology Laboratory, Eropa), dan DDBJ (DNA Data Bank of Japan, Jepang). Ketiga
pangkalan data tersebut bekerja sama dan bertukar data secara harian
untuk menjaga keluasan cakupan masing-masing pangkalan data. Sumber
utama data sekuens asam nukleat adalah submisi (pengumpulan) langsung
dari peneliti individual, proyek sekuensing genom, dan pendaftaran paten.
Selain berisi sekuens asam nukleat, entri dalam pangkalan data sekuens
asam nukleat pada umumnya mengandung informasi tentang jenis asam
nukleat (DNA atau RNA), nama organisme sumber asam nukleat tersebut, dan segala sesuatu yang berkaitan dengan sekuens asam nukleat tersebut.
Selain asam nukleat, beberapa contoh pangkalan data penting yang menyimpan sekuens primer protein adalah PIR (Protein Information Resource, Amerika Serikat), Swiss-Prot (Eropa), dan TrEMBL (Eropa). Ketiga pangkalan data tersebut telah digabungkan dalam UniProt, yang didanai terutama oleh Amerika Serikat. Entri
dalam UniProt mengandung informasi tentang sekuens protein, nama
organisme sumber protein, pustaka yang berkaitan, dan komentar yang pada
umumnya berisi penjelasan mengenai fungsi protein tersebut. Perangkat bioinformatika yang berkaitan erat dengan penggunaan pangkalan data sekuens Biologi ialah BLAST (Basic Local Alignment Search Tool). Penelusuran BLAST (BLAST search)
pada pangkalan data sekuens memungkinkan ilmuwan untuk mencari sekuens
baik asam nukleat maupun protein yang mirip dengan sekuens tertentu yang
dimilikinya. Hal ini berguna misalnya untuk menemukan gen sejenis pada beberapa organisme atau untuk memeriksa keabsahan hasil sekuensing atau untuk memeriksa fungsi gen hasil sekuensing. Algoritma yang mendasari kerja BLAST adalah penyejajaran sekuens. PDB (Protein Data Bank, Bank Data Protein) ialah pangkalan data tunggal yang menyimpan model struktur tiga dimensi protein dan asam nukleat hasil penentuan eksperimental (dengan kristalografi sinar-X, spektroskopi NMR, dan mikroskopi elektron). PDB menyimpan data struktur sebagai koordinat tiga dimensi yang menggambarkan posisi atom-atom dalam protein atau pun asam nukleat.
Contoh Bioinformatik
Pemodelan Menggunakan MODELLER
Saat ini pemodelan molekuler terutama
pemodelan molekul protein berperan sangat penting dalam studi protein
secara komprehensif dan juga mendukung pencarian alternatif design
obat-obatan ataupun vaksin. Pemodelan molekuler dapat dilakukan dengan
berbagai metode, terdapat tiga metode yang saat ini sering digunakan,
diantaranya adalah metode de novo atau ab initio, metode threading, dan metode homology modeling atau dikenal juga sebagai pemodelan secara komparatif. MODELLER,
seperti posting saya sebelumnya, merupakan salah satu program
pemodelan molekuler yang menggunakan pendekatan pemodelan secara
komparatif dalam pembuatan model molekul.
Kali ini, saya akan sedikit membahas
bagaimana penggunaan MODELLER dalam pemodelan suatu struktur protein
dengan perbedaan yang kecil dengan cetakannya (mutasi tunggal). Berikut
ini merupakan contoh pemodelan struktur alpha globin yang mengalami
mutasi disalah satu asam aminonya (W15R). Struktur tersebut belum pernah
dikristalkan sebelumnya. ok, kita langsung menuju bagian intinya,
pemodelan dengan MODELLER (saya menjalankannya di lingkungan
unix/linux).
1. Langkah pertama, pastikan di komputer
anda telah terinstall program MODELLER, saya menggunakan versi 9v7. Jika
belum ada, silahkan download dari situs aslinya disini,
pilih paket program yang sesuai dengan OS anda dan untuk instalasinya,
di situs MODELLER telah dijelaskan dengan lengkap, silahkan merujuk
kesana. Paket lain yang akan dipakai adalah program PyMOL, dan juga
PyLab (matplotlib).
2. Setelah selesai download dan
instalasinya, pastikan kembali bahwa program MODELLER sudah dapat
digunakan dengan menggunakan shell atau command line. Buka shell/command
line, kemudian ketik mod9v7 , jika perintah bash tersebut telah dikenali maka anda siap untuk melakukan pemodelan.
3. Download file yang saya sediakan buat input disini, file-file tersebut berisi file PDB dan beberapa scirpt yang digunakan dalam pemodelan nantinya.
4. Siapkan beberapa script atau baris
perintah berikut ini atau bisa langsung menggunakan file yang telah di
download (MODELLER melakukan pemodelan dengan menggunakan script,
berbasis Python dan prosesnya berjalan di background).
- Script BuildProfile.py
#script untuk memodelkan protein globin alfa
#By: Andry Nur Hidayat
from modeller import *
log.verbose()
env = environ()
#-- Prepare the input files
#-- Read in the sequence database
sdb = sequence_db(env)
sdb.read(seq_database_file='globin.pir', seq_database_format='PIR',
chains_list='ALL', minmax_db_seq_len=(142, 4000), clean_sequences=True)
#-- Write the sequence database in binary form
sdb.write(seq_database_file='globin.bin', seq_database_format='BINARY',
chains_list='ALL')
#-- Now, read in the binary database
sdb.read(seq_database_file='globin.bin', seq_database_format='BINARY',
chains_list='ALL')
#-- Read in the target sequence/alignment
aln = alignment(env)
aln.append(file='1Cd59.ali', alignment_format='PIR', align_codes='ALL')
#-- Convert the input sequence/alignment into
# profile format
prf = aln.to_profile()
#-- Write out the profile in text format
prf.write(file='build_profile.prf', profile_format='TEXT')
#-- Convert the profile back to alignment format
aln = prf.to_alignment()
#-- Write out the alignment file
aln.write(file='build_profile.ali', alignment_format='PIR')
- Script align2d.py
from modeller import *
env = environ()
aln = alignment(env)
mdl = model(env, file='2dn2_N1', model_segment=('FIRST:A','LAST:A'))
aln.append_model(mdl, align_codes='2dn2_N1', atom_files='2dn2_N1.pdb')
aln.append(file='W15R.ali', align_codes='W15R')
aln.align2d()
aln.write(file='W15R-2dn2_N1.ali', alignment_format='PIR')
aln.write(file='W15R-2dn2_N1.pap', alignment_format='PAP')
- Script model-single.py
from modeller import *
from modeller.automodel import *
env = environ()
env.io.hetatm = True
a = automodel(env, alnfile='globin.pir',
knowns='2dn2_N1', sequence='W15R',
assess_methods=(assess.DOPE, assess.GA341))
a.starting_model = 1
a.ending_model = 5
a.make()
- Script evaluate_model.py
from modeller import *
from modeller.scripts import complete_pdb
log.verbose() # request verbose output
env = environ()
env.libs.topology.read(file='$(LIB)/top_heav.lib') # read topology
env.libs.parameters.read(file='$(LIB)/par.lib') # read parameters
# read model file
mdl = complete_pdb(env, 'W15R.B99990002.pdb')
# Assess with DOPE:
s = selection(mdl) # all atom selection
s.assess_dope(output='ENERGY_PROFILE NO_REPORT', file='W15R.profile',
normalize_profile=True, smoothing_window=15)
- Script evaluate_template.py
from modeller import *
from modeller.scripts import complete_pdb
log.verbose() # request verbose output
env = environ()
env.libs.topology.read(file='$(LIB)/top_heav.lib') # read topology
env.libs.parameters.read(file='$(LIB)/par.lib') # read parameters
# read model file
mdl = complete_pdb(env, '2dn2_N1.pdb')
# Assess with DOPE:
s = selection(mdl) # all atom selection
s.assess_dope(output='ENERGY_PROFILE NO_REPORT', file='2dn2_N1.profile',
normalize_profile=True, smoothing_window=15)
- Script plot_profiles.py
import pylab import modeller def get_profile(profile_file, seq): """Read `profile_file` into a Python array, and add gaps corresponding to the alignment sequence `seq`.""" # Read all non-comment and non-blank lines from the file: import pylab import modeller def get_profile(profile_file, seq): """Read `profile_file` into a Python array, and add gaps corresponding to the alignment sequence `seq`.""" # Read all non-comment and non-blank lines from the file: f = file(profile_file) vals = [] for line in f: if not line.startswith('#') and len(line) > 10: spl = line.split() vals.append(float(spl[-1])) # Insert gaps into the profile corresponding to those in seq: for n, res in enumerate(seq.residues): for gap in range(res.get_leading_gaps()): vals.insert(n, None) # Add a gap at position '0', so that we effectively count from 1: vals.insert(0, None) return vals e = modeller.environ() a = modeller.alignment(e, file='W15R-2dn2_N1.ali') template = get_profile('2dn2_N1.profile', a['2dn2_N1']) model = get_profile('W15R.profile', a['W15R']) # Plot the template and model profiles in the same plot for comparison: pylab.figure(1, figsize=(10,6)) pylab.xlabel('Alignment position') pylab.ylabel('DOPE per-residue score') pylab.plot(model, color='red', linewidth=2, label='W15R') pylab.plot(template, color='green', linewidth=2, label='2DN2_N1') pylab.legend() pylab.savefig('dope_profile.png', dpi=70) f = file(profile_file) vals = [] for line in f: if not line.startswith('#') and len(line) > 10: spl = line.split() import pylab import modeller def get_profile(profile_file, seq): """Read `profile_file` into a Python array, and add gaps corresponding to the alignment sequence `seq`.""" # Read all non-comment and non-blank lines from the file: import pylab import modeller def get_profile(profile_file, seq): """Read `profile_file` into a Python array, and add gaps corresponding to the alignment sequence `seq`.""" # Read all non-comment and non-blank lines from the file: f = file(profile_file) vals = [] for line in f: if not line.startswith('#') and len(line) > 10: spl = line.split() vals.append(float(spl[-1])) # Insert gaps into the profile corresponding to those in seq: for n, res in enumerate(seq.residues): for gap in range(res.get_leading_gaps()): vals.insert(n, None) # Add a gap at position '0', so that we effectively count from 1: vals.insert(0, None) return vals e = modeller.environ() a = modeller.alignment(e, file='W15R-2dn2_N1.ali') template = get_profile('2dn2_N1.profile', a['2dn2_N1']) model = get_profile('W15R.profile', a['W15R']) # Plot the template and model profiles in the same plot for comparison: pylab.figure(1, figsize=(10,6)) pylab.xlabel('Alignment position') pylab.ylabel('DOPE per-residue score') pylab.plot(model, color='red', linewidth=2, label='W15R') pylab.plot(template, color='green', linewidth=2, label='2DN2_N1') pylab.legend() pylab.savefig('dope_profile.png', dpi=70) f = file(profile_file) vals = [] for line in f: if not line.startswith('#') and len(line) > 10: spl = line.split() vals.append(float(spl[-1])) # Insert gaps into the profile corresponding to those in seq: for n, res in enumerate(seq.residues): for gap in range(res.get_leading_gaps()): vals.insert(n, None) # Add a gap at position '0', so that we effectively count from 1: vals.insert(0, None) return vals e = modeller.environ() a = modeller.alignment(e, file='W15R-2dn2_N1.ali') template = get_profile('2dn2_N1.profile', a['2dn2_N1']) model = get_profile('W15R.profile', a['W15R']) # Plot the template and model profiles in the same plot for comparison: pylab.figure(1, figsize=(10,6)) pylab.xlabel('Alignment position') pylab.ylabel('DOPE per-residue score') pylab.plot(model, color='red', linewidth=2, label='W15R') pylab.plot(template, color='green', linewidth=2, label='2DN2_N1') pylab.legend() pylab.savefig('dope_profile.png', dpi=70) vals.append(float(spl[-1])) # Insert gaps into the profile corresponding to those in seq: for n, res in enumerate(seq.residues): for gap in range(res.get_leading_gaps()): vals.insert(n, None) # Add a gap at position '0', so that we effectively count from 1: vals.insert(0, None) return vals e = modeller.environ() a = modeller.alignment(e, file='W15R-2dn2_N1.ali') template = get_profile('2dn2_N1.profile', a['2dn2_N1']) model = get_profile('W15R.profile', a['W15R']) # Plot the template and model profiles in the same plot for comparison: pylab.figure(1, figsize=(10,6)) pylab.xlabel('Alignment position') pylab.ylabel('DOPE per-residue score') pylab.plot(model, color='red', linewidth=2, label='W15R') pylab.plot(template, color='green', linewidth=2, label='2DN2_N1') pylab.legend() pylab.savefig('dope_profile.png', dpi=70)
5. Sebelum kita
mulai pemodelan ada baiknya, melihat file-file input yang sangat penting
buat proses pemodelan nantinya. File input yang dibutuhkan adalah
sturktur template, berupa file PDB (2dn2_N1.pdb), sekuen model
(W15R.ali), file hasil pensejajaran (globin.pir)...semua file tersebut
merupakan file text dan dapat dengan mudah diedit dengan text editor di
lingkungan Linux. File yang cukup penting diperhatikan disini adalah
file pesejajaran globin.pir, modeller dapat membuat/menggunakan file
hasil pensejajaran berformat *.pir ataupun *.ali, tetapi yang lebih
mudah digunakan adalah yang berformat *.pir. Mari kita lihat struktur
filenya.
C; Produced by MODELLER >P1;2dn2_N1 structureX:2dn2_N1: 1 :A: 142 :A:MOL_ID 1: : ; MOLECULE ALPHA GLOBIN HUMAN HEMOGLOBIN DEOXY 1.25A; CHAIN A, B; ENGINEE:MOL_ID 1; VLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHG KKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTP AVHASLDKFLASVSTVLTSKYR/.* >P1;W15R sequence:W15R: : : : ::: 0.00: 0.00 VLSPADKTNVKAARGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHG KKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTP AVHASLDKFLASVSTVLTSKYR/.*
bagian paling atas pada tanda '>'
merupakan bagian header berisi nama sekuensnya, selanjutnya pada baris
kedua berisi keterangan apakah sekuen yang ada merupakan template
(structureX) atau target (sequence) dan harus terdapat 10 tanda 'titik
dua' (:) yang bisa digunakan untuk memberi informasi tambahan untuk
sekuen. Selanjutnya urutan sekuen (perhatikan bagian mana yang berbeda
dari kedua sekuen yang ada?). Sekuen biasanya diakhiri dengan tanda
bintang '*', tanda '/' merupakan tanda untuk memerintahkan modeller
untuk memisahkan rantai untuk struktur yang berbeda, tanda titik '.'
merupakan tanda yang digunakan untuk memerintahkan modeller agar suatu
molekul selain protein/asam amino, biasanya ligan tidak mengalami
pemodelan sehingga bentuknya sama persis dengan template. Karena
struktur yang akan dimodel adalah struktur alpha globin dengan mutasi
W15R, dan juga harus memuat informasi HEM maka tanda tersebut harus ada.
ok, selanjutnya tinggal proses yang mudah....pemodelan...mengapa mudah?karena selebihnya modeller yang akan bekerja.
6. Berikut langkah penggunaan script-script tersebut (jalankan di command line anda).
- mod9v7 BuildProfile.py >>> untuk membuat profile, input yang diperlukan adalah file berekstensi *.pir dan file sekuen *.ali >>outputnya berupa globin.bin (suatu file binary)
- mod9v7 align2d.py >>> untuk membuat profile hasil pensejajaran, input yang diperlukan berupa struktur template (*.pdb) dan file sekuen target *.ali >>> output berupa profile hasil pensejajaran *.ali dan *.pap
- mod9v7 model-single.py >>> script utama untuk mengenerate model...proses komputasinya biasanya berjalan agak lama disini, karena prosesnya cukup kompleks. Input yang dibutuhkan adalah file *.pir dan disini model akan digenerate secara default, sesuai script sebanyak 5 buah (*.pdb) dan model yang paling baik adalah model yang memiliki nilai DOPE (Discrete Optimized Protein Enegry). Untuk melihat model mana yang baik anda dapat melihatnya pada bagian paling akhir pada file model-single.log. Pada gambar dibawah ini struktur yang paling baik menurut modeller adalah file W15R.B99990002.pdb.
Jika sudah mendapatkan file pdb dari model
yang cocok dan 'bagus' menurut modeller, maka kita bisa mengecek
sturkturnya menggunakan program visualisasi molekul. Saya menggunakan
program PyMOL untuk melihat strukturnya. Check this out...bagaimana?
Mutasi tunggal yang terjadi pada asam amino
ke 15, ternyata tidak mengubah konformasi tiga dimensi protein
tersebut. Model yang anda dapatkan sempurna, semua asam amino
termodelkan dengan baik, begitu juga dengan struktur Hem-nya.
- mod9v7 evaluate_model.py >>> script untuk membuat profil dari model yang dianggap cocok >>output berupa file *.profile
- mod9v7 evaluate_template.py >>> script untuk membuat profil dari template yang digunakan >> output berupa file *.profile. kedua proses diatas diperlukan untuk membuat grafik plot profile untuk menganalisa seberapa besar kemiripan dan kualitas dari model yang dibuat dengan templatenya.
- mod9v7 plot_profiles.py >>> bertujuan untuk membuat plot grafik DOPE antara model dan templatenya. Output berupa file *.png.
Secara umum nilai energi bebas yang
dibutuhkan oleh model hasil Modeller untuk membentuk konformasi tiga
dimensi seperti sturktur template jauh lebih besar, hasil ini dapat
dikarenakan oleh proses dari program modeller yang tetap mempertahankan
bentuk 3D dari template walaupun terdapat mutasi sehingga nilai
energinya menjadi besar.
Bagaimana?mudah bukan untuk memodelkan
struktur protein....selain menggunkan program stand alone seperti
Modeller, kita juga dapat menggunakan program dari webserver seperti
SwissModel dari http://expasy.ch untuk memodelkan suatu molekul.