Friday, 29 October 2021

Transitions and Transversions (Rosalind)

      

   rosalind


Halo teman-teman, apa kabar? Kali ini saya ingin membahas sedikit tentang salah satu problem bioinformatika yang ada di web rosalind.info. Judulnya ialah "Transitions and Transversions". Sebagai acuan, teman-teman bisa cek dahulu problem yang akan kita bahas (disini). 

Overview 

Di problem ini kita akan disajikan 2 string dalam format FASTA yang mewakili "string sebelum perubahan" dan "string setelah perubahan", sebut saja s1 dan s2. Tugas kita ialah mencari rasio transition dan transversion diantara kedua string tersebut. 

Transition sendiri ialah pergantian dari suatu molekul purine ke molekul purine yang lain (A -> G, G -> A), atau suatu molekul pyrimidine ke molekul pyrimidine yang lain (C -> T, T -> C). Sedangkan tranversion ialah perubahan dari molekul purine ke pyrimidine atau sebaliknya (contoh, A -> C). 

Idenya ialah, pertama, kita mencari perbedaan dari kedua string tersebut. Kemudian, dari perbedaan-perbedaan tersebut kita tentukan mana yang merupakan transition dan mana yang transversion


Transition dan transversion.


Kode Pengerjaan

Berikut kode pengerjaannya dalam bahasa java :
  1. static void solve() {
  2. Scanner sc = new Scanner(System.in);
  3. String s1 = "";
  4. String s2 = "";
  5. boolean ganti = false;
  6. sc.next();
  7. while (sc.hasNext()) {
  8. String masuk = sc.next();
  9. if (masuk.charAt(0) == '>') {
  10. ganti = true; continue;
  11. }
  12. if (ganti) {
  13. s2 += masuk;
  14. }
  15. else {
  16. s1 += masuk;
  17. }
  18. }
  19. int ts = 0;
  20. int tv = 0;
  21. HashMap<Character, Character> pair = new HashMap<>();
  22. pair.put('A', 'G');
  23. pair.put('G', 'A');
  24. pair.put('C', 'T');
  25. pair.put('T', 'C');
  26. for (int i = 0; i < s1.length(); i++) {
  27. if (s1.charAt(i) == s2.charAt(i)) {
  28. continue;
  29. }
  30. if (pair.get(s1.charAt(i)) == s2.charAt(i)) {
  31. ts++;
  32. }
  33. else {
  34. tv++;
  35. }
  36. }
  37. out.printf("%.11f", 1.0 * ts / tv);
  38.     
Penjelasan Kode

Pertama, kita buat dahulu map yang berisi pasangan-pasangan molekul berdasarkan aturan purine-pyrimidine (A dengan G, C dengan T) seperti di baris 21 sampai 25. 

Langkah berikutnya ialah menghitung jumlah transition dan transversion-nya (baris 26-36). Jawaban dari problem ini ialah hasil dari transition / transversion dalam desimal (baris 37). 

Input dan Output

Seperti yang teman-teman lihat, disini saya memakai fungsi next() (baris 8) untuk meng-input data string. Saya juga menggunakan hasNext() (baris 7) dikarenakan fungsi tersebut mampu meng-input data yang tidak diketahui jumlahnya. Fungsi tersebut sangat cocok jika dipakai untuk menangani input dengan format FASTA

Sedangkan untuk output-nya saya memakai fungsi out.printf() (baris 37)Fungsi tersebut adalah modifikasi dari fungsi System.out.printf() yang merupakan fungsi default di java. Untuk lebih jelasnya, teman-teman bisa melihat kode tambahan untuk memodifikasi fungsi tersebut (input maupun outputdi versi lengkap kode saya di github

Sekian dari saya. Jika teman-teman ingin menanyakan sesuatu, teman-teman bisa menulisnya di kolom komentar. Semoga bermanfaat dan sampai jumpa di artikel berikutnya!


Referensi :
Sumber gambar 1: https://www.facebook.com/ProjectRosalind/
Sumber gambar 2: https://en.wikipedia.org/wiki/Transversion

No comments:

Post a Comment