Java 14
-
Upload
gaetane-graves -
Category
Documents
-
view
31 -
download
1
description
Transcript of Java 14
Java 14
Et eksempel fra bioinformatikk: analyse av biologiske sekvenser
Ole Christian LingjærdeGruppen for bioinformatikkInstitutt for informatikkUniversitetet i Oslo
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 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
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 3
Kodende og ikke-kodende sekvenser
....CTGCCCGTCTAACTGCACTGCGCGTATCGACGTCTACTGCATCCTCGACTACCTCAGACTGCGCGTATCGACGTCTACTGC....
ca 3% ergener 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 informatikk 18. november 2003 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.......
?
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 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 generFinne alle sekvenser som starter med ATG og slutter med TAA
3: Lage oversikt over organismerSkrive ut all info om lagrede organismer
4: Avslutte
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 6
enterohemorrhagic Escherichia coli O157:H7Bacteria; Proteobacteria; Gammaproteobacteria
Caenorhabditis elegansEukaryota; Metazoa; Nematoda
Plasmodium falciparumEukaryota; Alveolata; Apicomplex
Data om organismer
Filen organismer.txt :
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 7
enterohemorrhagic Escherichia coli O157:H7AE005174-1 (part 1 of 2)AE005174v2-1_fas.txt
Plasmodium falciparumFinished sequence from Sanger Institute (part 1)MAL1.txt
Data om sekvenser
Filen sekvenser.txt :
>AE005174-1 Genome sequence of enterohemorrhagic Escherichia coli O157:H7, segment 1 of 2.agcttttcattctgactgcaacgggcaatatgtctctgtgtggattaaaaaaagagtctctgacagcagcttctgaactggttacctgccgtgagtaaattaaaattttattgacttaggtcactaaatactttaaccaatataggcatagcgcacagacagataaaaattacagagtacacaacatccatgaaacgcattagcaccaccattaccaccaccatcaccaccaccatcaccattaccattaccacaggtaacggtgcgggctgacgcgtacaggaaacacagaaaaaagcccgcacctgacagtgcgggcttttttttcgaccaaaggtaacgaggtaacaaccatgcgagtgttgaagttcggcggtacatcagtggcaaatgcagaacgttttctgcgggttgccgatattctggaaagcaatgccaggcaggggcaggtggccaccgtcctctctgcccccgccaaaatcaccaaccacctggtggcgatgattgaaaaaaccattagcggccaggatgctttacccaatatcagcgatgccgaacgtatttttgccgaacttctgacgggactcgccgccgcccagccgggattcccgctggcgcaattgaaaactttcgtcgaccaggaatttgcccaaataaaacatgtcctgcatggcattagtttgttagggcagtgcccggatagcattaacgctgcgctga.............
Filen AE005174v2-1_fas.txt :
OrganismeSekvens-IDFilnavn
OrganismeSekvens-IDFilnavn
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 8
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 informatikk 18. november 2003 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;
}}
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 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
} }
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 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-navnHashMap sekvenser = new HashMap(); // Nøkkel: sek-idIn tastatur = new In();
void lesOrganismer(String filnavn) {...}
void lesSekvenser(String filnavn) {...}
void ordreløkke() {...}
}
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 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();
}
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 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();
}
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 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;
}}
}
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 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
}
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 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);
}}
}
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 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);
}}
}
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 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();
}}
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 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
}
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 20
lesFraFil : hovedide
>AE005174-1 Genome sequence of enterohemorrhagic Escherichia coli O157:H7, segment 1 of 2.agcttttcattctgactgcaacgggcaatatgtctctgtgtggattaaaaaaagagtctctgacagcagcttctgaactggttacctgccgtgagtaaattaaaattttattgacttaggtcactaaatactttaaccaatataggcatagcgcacagacagataaaaattacagagtacacaacatccatgaaacgcattagcaccaccattaccaccaccatcaccaccaccatcaccattaccattaccacaggtaacggtgcgggctgacgcgtacaggaaacacagaaaaaagcccgcacctgacagtgcgggcttttttttcgaccaaaggtaacgaggtaacaaccatgcgagtgttgaagttcggcggtacatcagtggcaaatgcagaacgttttctgcgggttgccgatattctggaaagcaatgccaggcaggggcaggtggccaccgtcctctctgcccccgccaaaatcaccaaccacctggtggcgatgattgaaaaaaccattagcggccaggatgctttacccaatatcagcgatgccgaacgtatttttgccgaacttctgacgggactcgccgccgcccagccgggattcccgctggcgcaattgaaaactttcgtcgaccaggaatttgcccaaataaaacatgtcctgcatggcattagtttgttagggcagtgcccggatagcattaacgctgcgctga.............
a g c t t t t c a t t c t g a c t g c a . . .
"agcttttcattctgactgca..."
Fil med sekvensdata
char-array
Tekststreng
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 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();
}
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 22
søkSekvens : hovedide
a g c t t t t c a g c t t g a c t g c tsekv:
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 == 17
... osv ...
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 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;}
Ole Chr. Lingjærde © Institutt for informatikk 18. november 2003 24
søkGener : hovedide
a a t g t t t c a t a a t g a c t g c tsekv:
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 informatikk 18. november 2003 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;}