Keuzetaak A: Programmeren

Geschreven door: T. Graafsma (Saxion Deventer)

Achtergrond

Sequencen van organismen is routine geworden. Maar daarna begint het eigenlijke werk pas! De sequentie zelf is niet zo interessant; het gaat om de eiwitten waarvoor het DNA codeert. Je moet dus op zoek naar coderende stukken, en dat is niet makkelijk. E. coli heeft ongeveer 4100 genen bij een genoom van ongeveer 4.21 megabasen, H. sapiens heeft 45000 genen op 3000 megabasen: zoeken naar een naald in een hooiberg is makkelijker! Toch lukt het cellen om op het juiste moment het juiste gen af te lezen en op die manier een bepaald eiwit aan te maken. De cel ‘herkent’ ergens het begin van een coderend stuk DNA en begint daar met het de transcriptie. Het aflezen moet ook weer op tijd gestopt worden. Intussen is voor prokaryoten grotendeels bekend op welke manier de cel begin en eind van een gen herkent. Deze ‘regels’ kunnen gebruikt worden om in een nieuwe sequentie te zoeken naar stukken coderend DNA, de zogenaamde Open Reading Frames (ORF). Bij eukaryoten is dat veel ingewikkelder, onder meer door splicing en door de veel ingewikkelder regulatie. Voor deze opdracht beperken we ons daarom tot het zoeken naar ORFs bij prokaryoten.

Aardig is trouwens de analogie tussen een cel en een computer. De celkern lijkt op een processor, die de nucleotide sequentie in het DNA gebruikt als een programmacode.

Zie voor meer informatie eventueel hoofdstuk 6 uit Fundamental concepts of bioinformatics (Krane en Raymer): Genomics and Gene Recognition.

Zoekstrategie

Als je in een stuk tekst naar een woord zoekt begin je aan het begin en loop je door de tekst heen tot je de reeks letters tegenkomt die je zoekt. Hetzelfde geldt voor het zoeken naar coderend DNA, alleen ben je nu niet op zoek naar een specifieke reeks letters, maar gebruik je een aantal regels. Die regels zijn gebaseerd op eigenschappen van coderend DNA. Zo is van prokaryotisch DNA bekend dat de eiwitten (vrijwel) steeds beginnen met de aminozuren methionine (E. coli 83%, codon is AUG) of leucine of valine (overige 17%, UUG of GUG). Transcriptie stopt bij een stopcodon. Daar zijn er drie van, namelijk UAA, UAG en UGA. Je kunt dus op zoek naar ATG, TTG of GTG (het startcodon), waarna je doorloopt tot je een stopcodon tegenkomt. In principe is het tussenliggende stuk dan een stuk coderend DNA, mits het niet te kort is. Uit de statistische kans op het voorkomen van een stopcodon kun je afleiden dat een stuk coderend DNA minimaal 60 codons lang moet zijn. Een extra regel kan dus zijn dat de afstand tussen start- en stopcodon minstens 180 bp is. Een volgende regel heeft ermee te maken dat RNA-polymerase aan het DNA moet hechten om de transcriptie te starten (zie eventueel voor meer informatie http://www.ncbi.nlm.nih.gov/books/bv.fcgi?call=bv.View..ShowSection&rid=mga.section.265 en http://www.ncbi.nlm.nih.gov/books/bv.fcgi?call=bv.View..ShowSection&rid=mga.chapter.2118). Dat gebeurt op de promotorsite. Dit is een stukje (eigenlijk twee: -10 en -35) van de DNA-sequentie voorafgaand aan het coderend DNA. Per organisme kan het patroon iets verschillen, maar er zit wel heel veel overlap in. Zoiets wordt een consensus-sequentie genoemd. Met reguliere expressies kun je daar goed naar zoeken. N.B.: dit is geen uitputtende lijst. Er zijn meer regels te bedenken, zeker voor eukaryoten.

 

 

 

Figuur 1 : RNA polymerase en het promotorgebied (uit Modern Genetic Analysis, Griffiths ea.)

 

 

Figuur 2 : Promotorsequenties voor E. coli (uit Modern Genetic Analysis, Griffiths ea.)

 

De opdracht

Stel een algoritme op voor het zoeken naar Open Reading Frames in een prokaryotisch genoom. Het algoritme moet correct, helder en concreet zijn. Een algoritme kan bijvoorbeeld worden opgesteld in de vorm van pseudocode (lijkt op een experimentvoorschrift) of een flowchart. Op basis van dit algoritme ontwikkel je een Perl-programma dat de sequentie leest uit een bestand (in ieder geval E. coli is beschikbaar als FASTA-formaat), scant op ORFs, een lijst van de locaties van de ORFs (begin- en eindposities) opslaat in een bestand (met .orf als extensie; denk ook aan een header in dat bestand), en het aantal gevonden ORFs op het beeldscherm afdrukt. Let hierbij wel op de zes mogelijke reading frames. Gebruik voor het zoeken in ieder geval de regels van het startcodon en het stopcodon (hint: reguliere expressies). Zorg ervoor dat de gebruiker kan opgeven wat de minimale afstand tussen die twee moet zijn (standaard 180 bp, lager betekent gevoeliger maar ook meer kans op valse hits). Wanneer het programma werkt en je van een uitdaging houdt kun je het verfijnen. Zo kun je aanvullend gebruik maken van de consensussequenties om nog gerichter te zien of er sprake is van een ORF dat codeert voor een eiwit. Dat kan op twee manieren: apart, dus alleen zoeken naar promotors en die melden, of zoeken naar de combinatie van promotor en de eerder genoemde regels. Een onderzoeker wil misschien de keus hebben tussen deze twee mogelijkheden.

Inleveren

De ontwikkeldocumentatie, minimaal bestaande uit het algoritme en de brontekst (Perl-code) van het programma. Vermeld verder alles wat een collega nodig zou kunnen hebben om te snappen hoe het programma werkt, dus op zijn minst de gedachtengang achter het programma en eventuele technische toelichtingen. Je zult bijvoorbeeld een of meer reguliere expressies moeten toepassen. Leg in de ontwikkeldocumentatie duidelijk uit hoe die regexps in elkaar zitten, en waarom zo.