1 / 25

Java 14

Java 14. Et eksempel fra bioinformatikk: analyse av biologiske sekvenser Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo. Biologiske sekvenser. Arvestoffet er delt opp i kromosomer (23 hos mennesker)

Download Presentation

Java 14

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java 14 Et eksempel fra bioinformatikk: analyse av biologiske sekvenser Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo

  2. Biologiske sekvenser • Arvestoffet er delt opp i kromosomer (23 hos mennesker) • Hvert kromosom er en lang sekvens bygget opp av • fire elementer: A, T, G og C • Hvert kromosom koder digitalt for en rekke proteiner – • de kodende sekvensene kalles gener

  3. Kodende og ikke-kodende sekvenser Bare en del av genomet (= alt DNA) er gener: ....CTGCCCGTCTAACTGCACTGCGCGTATCGACGTCTACTGCATCCTCGACTACCTCAGACTGCGCGTATCGACGTCTACTGC.... ca 3% er gener hos mennesker de resterende 97% har ingen kjent funksjon De kodende sekvensene er spredt utover genomet:

  4. Hvor er genene? Sentralt problem i biologi: finne ut hvor genene ligger (og hva de gjør) Kjennetegn ved gener: • starter med sekvensen ATG • slutter med sekvensen TAG, TAA eller TGA (Hos høyere organismer er det mer komplisert å finne gener) GATCAGTTTCTTTAAGCCGATGGGTCCAGACTTTTCAGCCCTGCCAGAGAATTCCTAATTCCATCTCTCAGGTTTTCCAGTGGTAATGAAAAGCTAGCCAAGTTTGGCTATGCTAACCAAAGCGGGTTCAGTGTGTGTTGTCAGTAAATATTAGTCTATGTGATGTTAATAATCAAACTTATCTTGTGTGGGACCACTATGCTGAATGAACTTTGTACTGTTATCTCATTTAATTCTGAGGATAGCTCTTAAGGTAAGTATTATGATAGCCCTTGATTTACACTTGAGGAAACCAAGGCATAGAGAGATTAAGTAGTGTGTCTAAAGTCACACTACTAGAAAGTGCAAGAGCCTGAACTCAACCCAGGCAGTCTGACTCTGGAGCCCAGCTTGTGAGCTCCATGCTAGTCTGTCACCTTACCTTACCAGTCCTTGGACTACAAAGCTGCTAGTTCTGGTACTGTATCCTTGAGTGTCACGCGCGTCCGTGTGAAGAGACCACCAAACAGGCTTTGTGTGAGCAATAAA....... ?

  5. Et program for å analysere sekvenser Vi skal lage et program med følgende oppførsel: • Det leser først data om organismer og sekvenser fra fil • Deretter starter en ordreløkke. Lovlige kommandoer er: • 1: Søke etter sekvens F.eks. finne alle forekomster av CTGCCC • 2: Søke etter gener Finne alle sekvenser som starter med ATG og slutter med TAA • 3: Lage oversikt over organismer Skrive ut all info om lagrede organismer • 4: Avslutte

  6. Data om organismer Filen organismer.txt : enterohemorrhagic Escherichia coli O157:H7 Bacteria; Proteobacteria; Gammaproteobacteria Caenorhabditis elegans Eukaryota; Metazoa; Nematoda Plasmodium falciparum Eukaryota; Alveolata; Apicomplex

  7. Data om sekvenser Filen sekvenser.txt : enterohemorrhagic Escherichia coli O157:H7 AE005174-1 (part 1 of 2) AE005174v2-1_fas.txt Plasmodium falciparum Finished sequence from Sanger Institute (part 1) MAL1.txt Organisme Sekvens-ID Filnavn Organisme Sekvens-ID Filnavn Filen AE005174v2-1_fas.txt : >AE005174-1 Genome sequence of enterohemorrhagic Escherichia coli O157:H7, segment 1 of 2. agcttttcattctgactgcaacgggcaatatgtctctgtgtggattaaaaaaagagtctctgacagcagcttctgaactg gttacctgccgtgagtaaattaaaattttattgacttaggtcactaaatactttaaccaatataggcatagcgcacagac agataaaaattacagagtacacaacatccatgaaacgcattagcaccaccattaccaccaccatcaccaccaccatcacc attaccattaccacaggtaacggtgcgggctgacgcgtacaggaaacacagaaaaaagcccgcacctgacagtgcgggct tttttttcgaccaaaggtaacgaggtaacaaccatgcgagtgttgaagttcggcggtacatcagtggcaaatgcagaacg ttttctgcgggttgccgatattctggaaagcaatgccaggcaggggcaggtggccaccgtcctctctgcccccgccaaaa tcaccaaccacctggtggcgatgattgaaaaaaccattagcggccaggatgctttacccaatatcagcgatgccgaacgt atttttgccgaacttctgacgggactcgccgccgcccagccgggattcccgctggcgcaattgaaaactttcgtcgacca ggaatttgcccaaataaaacatgtcctgcatggcattagtttgttagggcagtgcccggatagcattaacgctgcgctga .............

  8. Hvilke data skal vi holde rede på? • Organismer: • Navn (String) • Type (String) • Sekvenser: • Organisme (peker) • Sekvens-ID (String) • Selve sekvensen (String)

  9. class Organisme class Organisme { private String navn; private String type; Organisme(String navn, String type) { this.navn = navn; this.type = type; } String fåNavn() { return navn; } String fåType() { return type; } }

  10. class Sekvens (foreløpig) class Sekvens { private Organisme org; private String id; private String sekv; Sekvens(Organisme org, String id, String fnavn) { this.org = org; this.id = id; this.sekv = ""; lesFraFil(fnavn); } Organisme fåOrg() { return org; } String fåId() { return id; } void lesFraFil(String filnavn) { // Les sekvens fra fil } }

  11. Programmets hovedstruktur import easyIO.*; import java.util.*; class SekvensanalyseMain { public static void main (String[] args) { Sekvensanalyse sa = new Sekvensanalyse(); sa.lesOrganismer(args[0]); sa.lesSekvenser(args[1]); sa.ordreløkke(); } } class Sekvensanalyse { HashMap organismer = new HashMap(); // Nøkkel: org-navn HashMap sekvenser = new HashMap(); // Nøkkel: sek-id In tastatur = new In(); void lesOrganismer(String filnavn) {...} void lesSekvenser(String filnavn) {...} void ordreløkke() {...} }

  12. lesOrganismer() void lesOrganismer(String filnavn) { In fil = new In(filnavn); while (!fil.endOfFile()) { String navn = fil.inWord("\n"); String type = fil.inWord("\n"); Organisme org = new Organisme(navn, type); organismer.put(navn, org); } fil.close(); }

  13. lesSekvenser() void lesSekvenser(String filnavn) { In fil = new In(filnavn); while (!fil.lastItem()) { String navn = fil.inWord("\n"); String id = fil.inWord("\n"); String fnavn = fil.inWord("\n"); if (organismer.containsKey(navn)) { Organisme org = (Organisme) organismer.get(navn); Sekvens sek = new Sekvens(org, id, fnavn); sekvenser.put(id, sek); } else { System.out.println("Kunne ikke lese: " + fnavn); } } fil.close(); }

  14. ordreløkke() int lesOrdre() { int ordre = 0; while (ordre < 1 || ordre > 4) { System.out.println("1 -> Søk etter sekvens"); System.out.println("2 -> Søk etter gener"); System.out.println("3 -> Oversikt over organismer"); System.out.println("4 -> Avslutt"); System.out.print("Ordre (1-4): "); ordre = tast.inInt(); } return ordre; } void ordreløkke() { boolean fortsett = true; while (fortsett) { int ordre = lesOrdre(); switch (ordre) { case 1: søkSekvens(); break; case 2: søkGener(); break; case 3: oversiktOrganismer(); break; case 4: fortsett = false; } } }

  15. Oppsummering: class Sekvensanalyse class Sekvensanalyse { HashMap organismer = new HashMap(); HashMap sekvenser = new HashMap(); In tastatur = new In(); void lesOrganismer(String filnavn) {...} // FERDIG void lesSekvenser(String filnavn) {...} // FERDIG void ordreløkke() {...} // FERDIG void søkSekvens() {...} // MÅ SKRIVES void søkGener() {...} // MÅ SKRIVES void oversiktOrganismer() {...} // MÅ SKRIVES }

  16. Sekvensanalyse: søkSekvens void søkSekvens() { System.out.print("Sekvens: "); String s = tast.inWord("\n"); System.out.println(); Iterator it = sekvenser.values().iterator(); while (it.hasNext()) { Sekvens sek = (Sekvens) it.next(); String resultat = sek.søkSekvens(s); if (!resultat.equals("")) { System.out.println("Organisme: "+sek.fåOrg().fåNavn()); System.out.println("Sekvens: " + sek.fåId()); System.out.println(resultat); } } }

  17. Sekvensanalyse: søkGener void søkGener() { System.out.print("Minste lengde: "); int minLengde = tast.inInt(); Iterator it = sekvenser.values().iterator(); while (it.hasNext()) { Sekvens sek = (Sekvens) it.next(); String resultat = sek.søkGener(minLengde); if (!resultat.equals("")) { System.out.println("Organisme: "+sek.fåOrg().fåNavn()); System.out.println("Sekvens: " + sek.fåId()); System.out.println(resultat); } } }

  18. Sekvensanalyse: oversiktOrganismer void oversiktOrganismer() { Iterator it = organismer.values().iterator(); while (it.hasNext()) { Organisme org = (Organisme) it.next(); System.out.println("Organisme: " + org.fåNavn()); System.out.println("Type: " + org.fåType()); System.out.println(); } }

  19. Oppsummering: class Sekvens class Sekvens { private Organisme org; private String id; private String sekv; Sekvens(..) {...} // FERDIG Organisme fåOrg() {...} // FERDIG String fåId() {...} // FERDIG void lesFraFil(String filnavn) {...} // MÅ SKRIVES String søkSekvenser(String s) {...} // MÅ SKRIVES String søkGener(int minLengde) {...} // MÅ SKRIVES }

  20. lesFraFil : hovedide Fil med sekvensdata >AE005174-1 Genome sequence of enterohemorrhagic Escherichia coli O157:H7, segment 1 of 2. agcttttcattctgactgcaacgggcaatatgtctctgtgtggattaaaaaaagagtctctgacagcagcttctgaactg gttacctgccgtgagtaaattaaaattttattgacttaggtcactaaatactttaaccaatataggcatagcgcacagac agataaaaattacagagtacacaacatccatgaaacgcattagcaccaccattaccaccaccatcaccaccaccatcacc attaccattaccacaggtaacggtgcgggctgacgcgtacaggaaacacagaaaaaagcccgcacctgacagtgcgggct tttttttcgaccaaaggtaacgaggtaacaaccatgcgagtgttgaagttcggcggtacatcagtggcaaatgcagaacg ttttctgcgggttgccgatattctggaaagcaatgccaggcaggggcaggtggccaccgtcctctctgcccccgccaaaa tcaccaaccacctggtggcgatgattgaaaaaaccattagcggccaggatgctttacccaatatcagcgatgccgaacgt atttttgccgaacttctgacgggactcgccgccgcccagccgggattcccgctggcgcaattgaaaactttcgtcgacca ggaatttgcccaaataaaacatgtcctgcatggcattagtttgttagggcagtgcccggatagcattaacgctgcgctga ............. char-array Tekststreng "agcttttcattctgactgca..."

  21. Sekvens: lesFraFil void lesFraFil(String filnavn) { In fil = new In(filnavn); fil.inLine(); int n = tellTegn(filnavn); char [] c = new char[n]; for (int i=0; i<n; i++) { c[i] = fil.inChar(); } sekv = String.valueOf(c); fil.close(); }

  22. søkSekvens : hovedide sekvens: gct sekv: k: 17 k: 9 k: 1 start = 0; k = sekv.indexOf(sekvens, start); // Nå er k == 1 start = k + 1; k = sekv.indexOf(sekvens, start); // Nå er k == 9 start = k + 1; k = sekv.indexOf(sekvens, start); // Nå er k == 17 ... osv ...

  23. Sekvens: søkSekvens String søkSekvens(String sekvens) { String resultat = ""; int start = 0; boolean fortsett = true; while (fortsett) { int k = sekv.indexOf(sekvens, start); if (k >= 0) { resultat = resultat + k + "\n"; start = k+1; } else { fortsett = false; } } return resultat; }

  24. søkGener : hovedide Gen k2+3: 12 sekv: k2: 9 k1: 1 start = 0; k1 = sekv.indexOf("atg", start); k2 = sekv.indexOf("taa", k1 + minLengde); start = k2 + 3; k1 = sekv.indexOf("atg", start); k2 = sekv.indexOf("taa", k1 + minLengde); ... osv ...

  25. Sekvens: søkGener String søkGener(int minLengde) { String resultat = ""; int start = 0; boolean fortsett = true; while (fortsett) { int k1 = sekv.indexOf("atg", start); int k2 = sekv.indexOf("taa", k1 + minLengde); if (k1 >= 0 && k2 >= 0) { resultat = resultat + k1 + " - " + k2 + "\n"; start = k2 + 3; } else { fortsett = false; } } return resultat; }

More Related