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

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

14 okt. 2003, Arne Maus Inst. for informatikk, UiO
C++ for Java-programmerere
Datafiler og serialisering Tekstfiler Scanner-klassen Binær overføring av data Direkte tilgang til filinnholdet Serialisering LC191D Videregående programmering.
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Kontrollstrukturer (Kapittel 3)
Uke 8 - Mer om: Objekter, klasser og pekere
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
1 Litt om OO og programmering Arne Maus. 2 OO og Java (og C++, C#)  Arven fra Simula  Programstruktur i Java  Generering av objekter  Beskyttelse.
Java 12 Mer filbehandling - skrive til fil HashMap Et større eksempel Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
IS-102 Klassedefinisjoner
Oblig4 - forklaringer Arne og Ole Christian.
Eiendomregister mars 2002 Arne Maus. import java.util.*; import inf101.*; /* Klasse med main() som starter hele programmet */ class EiendomsregisterMain.
Eiendomsregister - eksempel
Tema: Introduksjon Hvorfor Velocity? Installasjon Velocity VS. JSF / JSP Eksempler Oppsumering.
C# for javaprogrammerere
1 Øvingsforelesning Andreas Knudsen Nils Grimsmo
En gang til!? .
Filer Finne minste Finne Største Beregne gjennomsnitt Variabler Tabeller – Arrays Lage frekvenstabell.
Datavedlikehold: innlegging, endring, sletting Gjennomgang av eksempel.
INF150 Programmering mandag 11.9
Web-applikasjoner Prosjekt3 Logging Gruppe 9 Malik Muhammad Naeem Kevan Qureshi.
Introduksjon til Java 5.0. Hva er nytt i 5.0? Generiske typer For-løkke med iterator (for-hver løkke) Automatisk innpakking av primitive typer Metadata.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Objektorientert programmering
Repetisjon av JSP Variabler, tabeller, if-setninger, for/while-løkker
1 Arrayer og form(ularer) (Kapittel 4). 2 Mål  Forstå assosiative og superglobale arrays  Kunne behandle webformularer (forms)  Kjenne forskjellen.
  Den perfekte julegaven til Javakoden din Johannes Brodwall Steria.
Dynamiske nettsider PHP Del 2 – Kontrollstrukturer.
Uke 7 - del I: Repetisjon del II: Objekter, klasser og pekere 30 sept. 2003, Arne Maus Inst. for informatikk, UiO.
Java 3 Mer om uttrykk Terminal I/O Forgreninger
Java 11 Programmering med og uten objekter: hva er forskjellen?
OOT Seminar H-97 CORBA Praktisk del. Valg av ORB implementasjon n Har valgt å bruke Visigenic sin ORB implementsjon n ORB’en er 100% Java kodet n Bygger.
INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger
1 Kap 06 Ordnede / Sorterte lister Oppgave nr 06_02 Polynomer Klassehierarki Javadokumentasjon.
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
02 - Java datatyper Grundlæggende om datatyper og variable.
1 Pointere, referencer, struct’s mv.. 2 Erklæringer Eksempel på erklæringer int i, *ip, f ( ), *fip( ), (*pfi) ( ); Erklærer en integer, en pointer til.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
Java 5 Litt mer om løkker Arrayer Metoder Ole Christian Lingjærde
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Föreläsning 13 Programmeringsteknik och Matlab 2D1312/2D1305 Inläsning från fil Skriva till fil StringTokenizer Sortering.
INF1000 (Uke 14) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B.
INF1000 (Uke 13) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild.
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
INF Objektorientert programmering
Programmering i Java versjon september 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 25.9 MER OM: Sub-prosedyrer og sub-funksjoner Kap 4.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
1 Inf1000 (Uke 10) Oppgaveløsning. Hashmap Programmering med og uten objekter: hva er forskjellen? Noen generelle råd vedrørende oppgaveløsing HashMap.
Inf1000 (Uke 10) HashMap og ArrayList
INF1000 (Uke 4) Mer om forgreninger, While-løkker
XML og JDOM Helge Furuseth XML  XML = Extensible Markup Language Basert på SGML – Standard Generalized Markup Language  HTML =
Inf1000 (Uke 5) Arrayer, filer og tekst
INF1000 (Uke 11) Programmering
Kapittel 5 Vilkårssetningar og løkker. 5.1 Boolske uttrykk George Boole ( ), britisk matematikar Utvikla teori om logikk ved bruk av symbol i.
Repetisjon INF 1000 – våren 2007 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Anne Landro, Are Magnus Bruaset og Arild Waaler.
Iterator i Java boolean hasNext() E next() void remove()
BilSalg klassedatastruktur Bil klassedatastruktur
BilSalg klassedatastruktur Bil klassedatastruktur
Utskrift av presentasjonen:

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

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

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:

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 ?

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

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 :

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

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)

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; }

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 }

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() {...} }

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(); }

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(); }

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; }

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 }

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); }

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); }

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(); }

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 }

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

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<n; i++) { c[i] = fil.inChar(); } sekv = String.valueOf(c); fil.close(); }

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...

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; }

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

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; }