Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

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

Liknende presentasjoner


Presentasjon om: "Java 14 Et eksempel fra bioinformatikk: analyse av biologiske sekvenser Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet."— Utskrift av presentasjonen:

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 Ole Chr. Lingjærde © Institutt for informatikk18. november 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 Ole Chr. Lingjærde © Institutt for informatikk18. november Kodende og ikke-kodende sekvenser....CTGCCCGTCTAACTGCACTGCGCGTATCGACGTCTACTGCATCCTCGACTACCTCAGACTGCGCGTATCGACGTCTACTGC.... ca 3% er gener hos mennesker de resterende 97% har ingen kjent funksjon De kodende sekvensene er spredt utover genomet: Bare en del av genomet (= alt DNA) er gener:

4 Ole Chr. Lingjærde © Institutt for informatikk18. november 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) GATCAGTTTCTTTAAGCCGATGGGTCCAGACTTTTCAGCCCTGCCAGAGAATTCCTAATT CCATCTCTCAGGTTTTCCAGTGGTAATGAAAAGCTAGCCAAGTTTGGCTATGCTAACCAA AGCGGGTTCAGTGTGTGTTGTCAGTAAATATTAGTCTATGTGATGTTAATAATCAAACTTAT CTTGTGTGGGACCACTATGCTGAATGAACTTTGTACTGTTATCTCATTTAATTCTGAGGAT AGCTCTTAAGGTAAGTATTATGATAGCCCTTGATTTACACTTGAGGAAACCAAGGCATAGA GAGATTAAGTAGTGTGTCTAAAGTCACACTACTAGAAAGTGCAAGAGCCTGAACTCAAC CCAGGCAGTCTGACTCTGGAGCCCAGCTTGTGAGCTCCATGCTAGTCTGTCACCTTAC CTTACCAGTCCTTGGACTACAAAGCTGCTAGTTCTGGTACTGTATCCTTGAGTGTCACGC GCGTCCGTGTGAAGAGACCACCAAACAGGCTTTGTGTGAGCAATAAA ?

5 Ole Chr. Lingjærde © Institutt for informatikk18. november 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 Ole Chr. Lingjærde © Institutt for informatikk18. november enterohemorrhagic Escherichia coli O157:H7 Bacteria; Proteobacteria; Gammaproteobacteria Caenorhabditis elegans Eukaryota; Metazoa; Nematoda Plasmodium falciparum Eukaryota; Alveolata; Apicomplex Data om organismer Filen organismer.txt :

7 Ole Chr. Lingjærde © Institutt for informatikk18. november enterohemorrhagic Escherichia coli O157:H7 AE (part 1 of 2) AE005174v2-1_fas.txt Plasmodium falciparum Finished sequence from Sanger Institute (part 1) MAL1.txt Data om sekvenser Filen sekvenser.txt : >AE Genome sequence of enterohemorrhagic Escherichia coli O157:H7, segment 1 of 2. agcttttcattctgactgcaacgggcaatatgtctctgtgtggattaaaaaaagagtctctgacagcagcttctgaactg gttacctgccgtgagtaaattaaaattttattgacttaggtcactaaatactttaaccaatataggcatagcgcacagac agataaaaattacagagtacacaacatccatgaaacgcattagcaccaccattaccaccaccatcaccaccaccatcacc attaccattaccacaggtaacggtgcgggctgacgcgtacaggaaacacagaaaaaagcccgcacctgacagtgcgggct tttttttcgaccaaaggtaacgaggtaacaaccatgcgagtgttgaagttcggcggtacatcagtggcaaatgcagaacg ttttctgcgggttgccgatattctggaaagcaatgccaggcaggggcaggtggccaccgtcctctctgcccccgccaaaa tcaccaaccacctggtggcgatgattgaaaaaaccattagcggccaggatgctttacccaatatcagcgatgccgaacgt atttttgccgaacttctgacgggactcgccgccgcccagccgggattcccgctggcgcaattgaaaactttcgtcgacca ggaatttgcccaaataaaacatgtcctgcatggcattagtttgttagggcagtgcccggatagcattaacgctgcgctga Filen AE005174v2-1_fas.txt : Organisme Sekvens-ID Filnavn Organisme Sekvens-ID Filnavn

8 Ole Chr. Lingjærde © Institutt for informatikk18. november Hvilke data skal vi holde rede på?  Organismer:  Navn (String)  Type (String)  Sekvenser:  Organisme (peker)  Sekvens-ID (String)  Selve sekvensen (String)

9 Ole Chr. Lingjærde © Institutt for informatikk18. november 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 Ole Chr. Lingjærde © Institutt for informatikk18. november 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 Ole Chr. Lingjærde © Institutt for informatikk18. november 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 Ole Chr. Lingjærde © Institutt for informatikk18. november 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 Ole Chr. Lingjærde © Institutt for informatikk18. november 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 Ole Chr. Lingjærde © Institutt for informatikk18. november ordreløkke() int lesOrdre() { int ordre = 0; while (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 Ole Chr. Lingjærde © Institutt for informatikk18. november 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 Ole Chr. Lingjærde © Institutt for informatikk18. november 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 Ole Chr. Lingjærde © Institutt for informatikk18. november 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 Ole Chr. Lingjærde © Institutt for informatikk18. november 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 Ole Chr. Lingjærde © Institutt for informatikk18. november 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 Ole Chr. Lingjærde © Institutt for informatikk18. november lesFraFil : hovedide >AE Genome sequence of enterohemorrhagic Escherichia coli O157:H7, segment 1 of 2. agcttttcattctgactgcaacgggcaatatgtctctgtgtggattaaaaaaagagtctctgacagcagcttctgaactg gttacctgccgtgagtaaattaaaattttattgacttaggtcactaaatactttaaccaatataggcatagcgcacagac agataaaaattacagagtacacaacatccatgaaacgcattagcaccaccattaccaccaccatcaccaccaccatcacc attaccattaccacaggtaacggtgcgggctgacgcgtacaggaaacacagaaaaaagcccgcacctgacagtgcgggct tttttttcgaccaaaggtaacgaggtaacaaccatgcgagtgttgaagttcggcggtacatcagtggcaaatgcagaacg ttttctgcgggttgccgatattctggaaagcaatgccaggcaggggcaggtggccaccgtcctctctgcccccgccaaaa tcaccaaccacctggtggcgatgattgaaaaaaccattagcggccaggatgctttacccaatatcagcgatgccgaacgt atttttgccgaacttctgacgggactcgccgccgcccagccgggattcccgctggcgcaattgaaaactttcgtcgacca ggaatttgcccaaataaaacatgtcctgcatggcattagtttgttagggcagtgcccggatagcattaacgctgcgctga agcttttcattctgactgca... "agcttttcattctgactgca..." Fil med sekvensdata char-array Tekststreng

21 Ole Chr. Lingjærde © Institutt for informatikk18. november 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

22 Ole Chr. Lingjærde © Institutt for informatikk18. november søkSekvens : hovedide agcttttcagcttgactgct sekv: sekvens: gct k: 1 k: 9 k: 17 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 == osv...

23 Ole Chr. Lingjærde © Institutt for informatikk18. november 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 Ole Chr. Lingjærde © Institutt for informatikk18. november søkGener : hovedide aatgtttcataatgactgct sekv: k1: 1 k2: 9 Gen 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... k2+3: 12

25 Ole Chr. Lingjærde © Institutt for informatikk18. november 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; }


Laste ned ppt "Java 14 Et eksempel fra bioinformatikk: analyse av biologiske sekvenser Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet."

Liknende presentasjoner


Annonser fra Google