Java 14
This presentation is the property of its rightful owner.
Sponsored Links
1 / 25

Java 14 PowerPoint PPT Presentation


  • 53 Views
  • Uploaded on
  • Presentation posted in: General

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


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

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


Kodende og ikke kodende sekvenser

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:


Hvor er genene

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

?


Et program for analysere sekvenser

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


Data om organismer

Data om organismer

Filen organismer.txt :

enterohemorrhagic Escherichia coli O157:H7

Bacteria; Proteobacteria; Gammaproteobacteria

Caenorhabditis elegans

Eukaryota; Metazoa; Nematoda

Plasmodium falciparum

Eukaryota; Alveolata; Apicomplex


Data om sekvenser

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

.............


Hvilke data skal vi holde rede p

Hvilke data skal vi holde rede på?

  • Organismer:

    • Navn (String)

    • Type (String)

  • Sekvenser:

    • Organisme (peker)

    • Sekvens-ID (String)

    • Selve sekvensen (String)


Class organisme

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;

}

}


Class sekvens forel pig

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

}

}


Programmets hovedstruktur

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

}


Lesorganismer

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

}


Lessekvenser

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

}


Ordrel kke

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;

}

}

}


Oppsummering class sekvensanalyse

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

}


Sekvensanalyse s ksekvens

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

}

}

}


Sekvensanalyse s kgener

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

}

}

}


Sekvensanalyse oversiktorganismer

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

}

}


Oppsummering class sekvens

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

}


Lesfrafil hovedide

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


Sekvens lesfrafil

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

}


S ksekvens hovedide

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


Sekvens s ksekvens

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;

}


S kgener hovedide

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


Sekvens s kgener

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;

}


  • Login