\chapter{Teoretická část}

\section{Prokaryotická buňka}

Prokaryotické buňky jsou evolučně starší, vznikly přibližně před 3-3,5 miliardami let a později se z nich vyvinuly buňky eukaryotické. Jejich velikost se pohybuje v desítkách mikrometrů a mají rozmanitý tvar. Není u nich přítomno jádro ani jadérko, genetická informace je nesena pouze jedním chromosomem, zvaným nukleoid, který obsahuje $10^{5}$-$10^{6}$ bp a od zbytku buňky ho neodděluje žádná membrána. Jelikož tedy neexistuje jaderný obal, nenalezneme u nich ani endomembránový systém. Organely v buňkách nacházíme ojediněle, v cytoplazmě můžeme nalézt ribozomy, které jsou menší než u eukaryot. Buňka je chráněná buněčnou stěnou, která je tvořena peptidoglykanem. Mezi prokaryotní organismy řadíme bakterie a Archea.~\cite{1}, ~\cite{2}

\begin{figure}[!h]
  \begin{center}
    \includegraphics[scale=0.15]{obrazky/prokaryotickabunka}
  \end{center}
  \caption{Prokaryotická buňka, z~\cite{3}.}
\end{figure}


\section{Prokaryotický genom}

Pojmem genom označujeme soubor všech molekul DNA v buňce. Genom u prokaryot je tvořen chromozomem, který se skládá z jednoho dvouřetězce DNA kruhovitého tvaru a v jednom místě je připojen na plazmatickou membránu buňky. Geny na chromozomu jsou uspořádány blízko vedle sebe s minimálním mezigenovým prostorem a nenalezneme zde introny. 

Prokaryota mohou kromě jaderného chromozomu obsahovat i plazmidy, což jsou malé kruhové nebo lineární molekuly DNA v cytoplazmě. Plazmidy sice nejsou esenciální pro život buňky, ale často obsahují geny, které jsou pro buňku velmi výhodné, například zprostředkovávají resistenci vůči antibiotikům či produkci toxinů.~\cite{4}, ~\cite{5}

\section{Exprese genetické informace}

Exprese genetické informace se skládá ze dvou částí: transkripce a translace. Nejprve dochází k přepisu nukleotidových sekvencí DNA podle templátového vlákna do~sekvencí RNA a poté k překladu do posloupnosti aminokyselin.

\subsection{Transkripce}

Syntézu RNA podle matrice DNA katalyzuje enzym RNA polymeráza, který u prokaryot katalyzuje syntézu všech druhů RNA.  Skládá se ze dvou $\alpha$ a dvou $\beta$ podjednotek a jedné podjednotky $\sigma$, kterou označujeme jako sigma faktor a zprostředkovává vazbu enzymu na promotorové sekvence DNA. Transkripce probíhá po transkripčních jednotách, což jsou definované úseky DNA, které se skládají z promotoru, strukturních genů a terminátoru. Přepis DNA probíhá ve třech fázích: iniciace, elongace a terminace.

Exprese začíná navázáním RNA polymerázy na promotor, což je specifická sekvence DNA o délce asi 40 bp. Po navázání dochází k rozpletení dvoušroubovice a enzym zahajuje syntézu RNA prostřednictvím přidáváním nukleotidů. Po dosažení délky asi 9 nukleotidů se od polymerázy odštěpí sigma faktor a polymeráza se posunuje dále podél molekuly DNA a tím dochází k prodlužování vlákna RNA. Syntéza probíhá ve směru od 5‘ konce ke 3‘ konci.
Jakmile se syntetizující enzym dostane k terminátoru, polymeráza uvolní jak mRNA, tak DNA, a tím dojde k ukončení transkripce.~\cite{2}

\subsection{Translace}

Druhá část genové exprese spočívá v překladu mRNA do pořadí aminokyselin, jež probíhá podle pravidel genetického kódu.

Iniciace translace začíná vytvořením translančního komplexu, který je proveden ve třech krocích. Nejprve se tři iniciační faktory (IF1-IF3) a GTP navážou na menší ribosomální podjednotku. Poté se na další vazebná místa připojí tRNA a mRNA a nakonec se připojí větší podjednotka ribozomu. Iniciační tRNA je navázána na P místo ribozomu.

Následně dochází k přikládání dalších tRNA na příslušné kodony mRNA a začíná se tvořit polypeptidový řetězec, který se prodlužuje, dokud není načten jeden ze tří stop kodonů (UAG, UAA, UGA), který interaguje s uvolňovacími faktory a tím dojde k ukončení translace a oddělení polypeptid od tRNA.~\cite{6}

\begin{figure}[!h]
  \begin{center}
    \includegraphics[scale=0.4]{obrazky/exprese}
  \end{center}
  \caption{Exprese genetické informace u prokaryot, z~\cite{7}.}
\end{figure}


\section{Metody predikce genů}

Pokud chceme pochopit genomy jednotlivých organismů, je nezbytné, je identifikovat a popsat, a tudíž  je potřeba nalézt program, který tento objem dat zpracuje a jednotlivé geny správně identifikuje a anotuje. Metody predikce můžeme obecně rozdělit do dvou skupin: vnitřní (ab initio) a vnější (homology-based).~\cite{8}

\subsection{Vyhledávání genů ab initio}

Predikce ab initio patří mezi vnitřní metody, což znamená, že zkoumá danou sekvenci, kde hledá přítomnost signálů, mezi které patří promotory, start a stop kodony a poté určí statistiky výskytu kodonů, které jsou typické pro daný organismus. 

Nejjednodušší metoda predikce ab initio zkoumá ORF (Open Reading Frame) neboli otevřené čtecí rámce, což jsou dostatečně dlouhé úseky DNA ohraničené start a stop kodonem, které kódují polypeptidický řetězec. U každé DNA můžeme nalézt těchto rámců šest, tři na vedoucím vlákně a tři na vlákně komplementárním. Většinou pouze jeden ORF je použit pro translaci genů. Výhodou prokaryotických organismů je, že mají dlouhá ORF a většinou nejdelší obsahuje gen. Avšak neplatí to ve~sto procentech případů, takže zde vzniká problém mezi odlišením krátkých a dlouhých genů. Mezi další komplikace patří překryv ORF, který sice není u prokaryot častý, ale může se vyskytnout.~\cite{8}

Nejrozšířenější algoritmy predikce ab initio jsou založeny na Markovových modelech a dynamickém programování, kterým se budeme věnovat v dalších částech.

\subsection{Metody založené na homologii}
U homologního vyhledávání identifikujeme geny pomocí srovnáváním s existujími proteinovými sekvencemi. Vezmeme zkoumanou sekvenci, v knihovně sekvencí jiných organismů hledáme shodu, a pokud ji najdeme, můžeme sekvenci identifikovat. Mezi~metody, které jsou založené na hledání podobností, můžeme zařadit lokální a globální zarovnání.

Výhodou homologního vyhledávání je snadnost a velmi vysoká přesnost. Nicméně na druhou stranu pro hledání je potřeba velké množství externích dat, ve kterých lze geny vyhledávat. Další nevýhodou je, že spousta genů není významně homologní k již známým genům.~\cite{8}

\section{Programy pro predikci genů}

\subsection{GeneMark.hmm}

GeneMark.hmm patří do skupiny GeneMark, což je rodina programů sloužící k predikci genů již od roku 1995. Samotný GeneMark.hmm byl vyvinut v roce 1998 za~účelem zlepšení predikce genů, a to díky přesnému nalezení hranice mezi nimi. Využívá soustavu skrytých Markovových modelů (HMM) a generalizovaný Viterbiho algoritmus k určení nejpravděpodobnější sekvence skrytých stavů založených na celé pozorované DNA sekvenci.	

Pokud máme sekvenci \begin{math} S\in\{b_1, b_2, ..., b_L\}\end{math}, kde $b_i$ odpovídá bázi T, C, G nebo A a \textit{L} je délka sekvence, můžeme pro ni vytvořit funkční sekvenci \begin{math} A\in\{a_1, a_2, ..., a_L\}\end{math}, kde každé $a_i$ může nabývat hodnoty 0, pokud nukleotid $b_i$ je součástí nekódující oblasti nebo hodnoty 1, pokud je součástí genu na vedoucím vlákně DNA nebo hodnoty 2, pokud se gen nachází na komplementárním vlákně. Dojde ke spočítání \begin{math}P(A|S)\end{math} hodnoty a eventuálně se definuje funkční sekvence $A^*$, která popisuje nejpravděpodobnější anotaci sekvence S. Výpočet \begin{math}P(A|S)\end{math} je prováděn pomocí skrytých Markovových modelů.~\cite{9}

Obecně je skrytý Markovův model definován jako pravděpodobnostní stavový model s konečným počtem stavů, jenž na základě pravděpodobnosti přechází mezi~jednotlivými stavy. Skrytý se nazývá, protože z venku nemůžeme určit stav, ve kterém se právě nachází, získáme pouze informaci o výstupu, který nastane s určitou pravděpodobností.~\cite{10}

Architektura skrytých Markovových modelů, kterou využívá GeneMark.hmm, je zobrazena na obr. \ref{fig:gull}.

\begin{figure}[!h]
  \begin{center}
    \includegraphics[scale=0.6]{obrazky/hidden1}
  \end{center}
\begin{center}
  \caption{Skrytý Markovův model prokaryotické nukleotidové sekvence používaný v GeneMark.hmm, z~\cite{9}.}
\label{fig:gull}
  \end{center}
\end{figure}
Pokud chceme najednou řešit vedoucí i komplementární vlákno DNA, musíme definovat devět skrytých stavů, které korespondují s funkčními jednotkami bakteriálního genomu. Je potřeba definovat typické geny, atypické geny, start a stop kodony a nekódujícící oblasti a to jak pro vedoucí, tak pro komplementární vlákno. Nevýhodu je, že tento skrytý Markovův model nepočítá s překryvem genů.  

Jednou z vlastností HMM je, že každý kódující i nekódující skrytý stav může generovat nukleotidovou sekvenci, pozorovanou sekvenci, délky skrytých stavů. Pozorovaná sekvence DNA \begin{math} S\in\{b_1, b_2, ..., b_L\}\end{math} je generována pomocí HMM, jak je zobrazeno v obr. \ref{fig:gull}, paralelně s HMM přechodem z jednoho skrytého stavu do dalšího. Trajektorie skrytého stavu \textit{A}, jedna z mnoha variací dovolených cest, může být stručně reprezentována jako sekvence \textit{M} skrytých stavů $a_i$ mající délku $d_i$: \begin{math}A=\{(a_1d_1)(a_2d_2)...(a_Md_M)\}\end{math}. Pro danou sekvenci pozorovaných stavů (nukleotidů) \begin{math} S\in\{b_1, b_2, ..., b_L\}\end{math} je optimální trajektorie skrytých stavů $A^*$ definována jako trajektorie (funkční sekvence) \textit{A} s maximální hodnotou podmíněné pravděpodobnosti \begin{math}P(A|S)\end{math}. 

Pomocí Viterbiho algoritmu najdeme pro danou nukleotidovou sekvenci S maximálně pravděpodobnou trajektorii $A^*$ mezi skrytými stavy. Trajektorii $A^*$ můžeme popsat následovně: \begin{math}A^*=\{(a_1^*d_1^*)(a_2^*d_2^*)...(a_M^*d_M^*)\}\end{math}.
Tato trajektorie má nejvyšší pravděpodobnost výskytu simultánně se sekvencí \textit{S} ve srovnání se všemi dalšími možnými trajektoriemi.

V posledním kroku programu je hledáno místo, kde se navazuje ribozom (RBS). Toto hledání bylo zavedeno, jelikož se ukázalo, že Viterbiho algoritmus predikuje geny, které jsou součástí překryvu, kratší než ve skutečnosti jsou. Pro predikovaný gen je hledáno RBS v intervalu -19 až -4 nukleotidů proti směru každého alternativního start kodonu, ležícího mezi pozicí start kodonu navrhovaného algoritmem a pozicí start kodonu neseným nejdelším ORF pro predikovaný gen a dle skóre je vybrán správný začátek translace.~\cite{9}

\subsection{Glimmer}

Glimmer neboli Gene Locator and Interpolated Markov ModelER je systém pro~hledání genů v mikrobiální DNA. Funguje na principu interpolovaných Markovových modelů, které využívá pro hledání kódujících oblastí a jejich oddělení od oblastí nekódujících.

Glimmer byl vyvinut v institutu pro genomických výzkum v roce 1998. O rok později byla vydána druhé verze označená jako Glimmer 2.0 a v roce 2007 byla vydána třetí verze. V současné době je nejnovější Glimmer 3.02, který je přístupný na webových stránkách NCBI.

\subsubsection{Glimmer 1.0}

První verze programu používá pro hledání kódujících oblastí interpolované Markovovy modely (IMM). Nejprve dojde k vytvoří IMM pro všech šest čtecích rámců, které jsou poté využity pro ohodnocení celých ORF. Pokud se dva čtecí rámce s~vysokým skórem překrývají, překryv je skórován samostatně a dojde k určení, kde pravděpodobně leží gen.

Abychom mohli definovat IMM, musíme nejdříve objasnit, co je Markovův řetězec. 1. řád Markovova řetězce můžeme popsat následovně: pokud máme sekvenci $X_1$, $X_2$, ... $X_i$, kde \textit{i} je pozice v sekvenci a \begin{math} X\in\{A, C, G, T\}\end{math}, přičemž pravděpodobnost, že $X_i$ bude obsahovat nějakou bázi, závisí pouze na bázi $X_{i-1}$. U \textit{k}-tého řádu pravděpodobnost, že $X_i$ bude obsahovat nějakou bázi, závisí na \textit{k} předchozích bází. Pro hledání genů pomocí řetězce musíme vytvořit 7 submodelů, 6 pro každý čtecí rámec a 1 pro nekódující sekvence, kde každý provádí predikce pro báze ve všech třech pozicích v kodonu a poté pomocí modelů ohodnotí každé ORF a vybere model s nejvyšším skórem. Pokud model korespondující se správnou kódovací oblastí ve správném rámci má nejvyšší skóre, může být označen jako gen.

IMM využívají kombinaci pravděpodobností z \begin{math}0, 1, 2 ... k\end{math} předchozích bází, kde \textit{k} má hodnotu 8. Tudíž pro oligomery vyskytující se často, může být použit 8. řád, zatímco pro oligomery méně časté se využije nižší řád. Dojde ke spočítání pravděpodobnosti pro 0 až 8 přechozích bází a poté jsou spočítány váhy pro použití v kombinaci s predikcí jiných řádu modelu. Glimmer ohodnotí novou sekvenci spočítáním pravděpodobnosti, že model \textit{M} vytvořil sekvenci \textit{S}. Pravděpodobnost je spočítaná jako:
\begin{equation}
P(S|M)=\displaystyle\sum_{x=1}^{n} IMM_8 (S_x),
\end{equation}
kde $S_x$ je oligomer končící na pozici \textit{x} a \textit{n} je délka sekvence. Skóre pro $IMM_8$($S_x$), což značí 8.řád interpolovaného Markovova modelu spočítáme jako:
\begin{equation}
IMM_k (S_k)=\lambda_k(S_{x-1})\cdot P_k (S_x)+[1-\lambda_k (S_{x-1})]\cdot IMM_{k-1} (S_x),
\end{equation}
kde \begin{math}\lambda_k(S_{x-1})\end{math} je číselná váha \textit{k}-meru, který končí na pozici \textit{x-1} v sekvenci \textit{S} a  \begin{math}P_k(S_x)\end{math}  je odhad získaný z trénovacích dat pravděpodobnosti báze lokalizované na \textit{x} v \textit{k}-tém řádu modelu. Z toho plyne, že 8.řád IMM skóre oligomeru je lineární kombinací predikcí vytvořených všemi 8 řády.

Z trénovací množiny genů jsou stanoveny frekvence výskytu pro všechny podřetězcové vzory délky 1 až \textit{k}+1 pro každý čtecí rámec. Pro jeden čtecí rámec \textit{f(S)} označuje frekvence výskytu v sekvenci \begin{math}S = s_1 s_2 … s_n\end{math}. Z těchto frekvencí dostaneme počáteční odhady pravděpobnosti báze \textit{$s_x$}, která je dána kontextovým řetězcem \begin{math} s_{x-i},s_{x-i+1}, … , s_{x-1}\end{math}, označeným jako $S_{x,i}$ (i bází předešlých pozici x). Pravděpodobnost báze $s_x$ danou \textit{i} předchozími bázemi spočítáme jako:
\begin{equation}
P(s_x|S_{x,i}) = \frac{f(S_{x,i})}{\sum_{b\in{acgt}} f(S_{x,i},b)},
\end{equation}

Pokud počet výskytů v řetězci $S_{x,i}$ v trénovacích datech přesáhne specifický práh, potom  \begin{math}\lambda_i (S_x)\end{math} je nastaveno na 1 a použijeme tyto vzorky pravděpodobností.
Pokud ovšem v datech není dostatek výskytu k dostatečnému odhadu pravděpodobnosti další báze, k \begin{math}\lambda\end{math} hodnotě je přidáno dodatečné kritérium. Pro daný kontextový řetězec $S_{x,i}$ délky \textit{i}, srovnáme pozorované frekvence: f($S_{x,i}$, a), f($S_{x,i}$, c), f($S_{x,i}$, g) a f($S_{x,i}$, t) s vypočítanými IMM pravděpodobnostmi využívající další kratší kontext, $IMM_{i-1}$ ($S_{x,i}$, a), $IMM_{i-1}$ ($S_{x,i}$, c), $IMM_{i-1}$ ($S_{x,i}$, g) a $IMM_{i-1}$ ($S_{x,i}$, t) a pomocí testu dobré shody určíme, jak se 4 pozorované frekvence liší od IMM hodnot. Pokud se frekvence velmi liší, je lepší pro odhad báze použít právě tyto frekvence, tzn. dát jim vyšší \begin{math}\lambda\end{math} hodnotu. Naopak, když jsou frekvence shodné s IMM hodnotami, nabízejí malou prediktivní hodnotu, a proto jim dáme menší \begin{math}\lambda\end{math} hodnotu. Tato \begin{math}\lambda\end{math} hodnota nyní definuje pravděpodobnosti $IMM_i$ ($S_{x,i}$,b) kde \begin{math} b\in\{a, c, g, t\}\end{math}.

Samotný Glimmer systém se skládá ze dvou programů. První nazývaný „build-imm“ vytvoří pro vstupní množinu sekvencí IMM, jak je popsáno výše a druhý program, zvaný glimmer, potom použije IMM k identifikaci domnělých genů v celém genomu a to tak, že nejprve identifikuje všechny ORF delší než daný práh a ohodnotí každé ve všech čtecích rámcích. Vybraná ORF potom zkoumáme pro překryv. Každá překrývající se oblast je hodnocena zvlášť a tato skóre porovnáváme, abychom zjistili, který rámec dosahuje vyššího skóre. Obecně pokud se delší ORF překrývá s kratším a překrývající oblast má vyšší skóre ve čtecím rámci delšího ORF, tak kratší je zamítnuto.~\cite{11}

\subsubsection{Glimmer 2.0}

Druhá verze Glimmeru byla vydána v roce 1999 a oproti Glimmeru 1.0 má lehce vyšší sensitivitu a je mnohem lepší v řešení překrývajích se genů. Jako základ používá interpolovaný kontextový model.

Interpolovaný kontextový model je rozšířením pro interpolované Markovovy modely. Pro daný kontext \begin{math}C=b_1 b_2…b_k\end{math} délky \textit{k}, může ICM vybrat jakoukoliv bází v kontextu C (ne jenom ty, které sousedí s $b_{k+1}$) k určení pravděpodobnosti $b_{k+1}$.  Jako kritérium k určení, kterou bázi z kontextu C vybrat, je použita tzv. společná informace, která je mezi daným párem diskrétních náhodných proměnných X a Y definována jako:

\begin{equation}
I(X;Y)=\displaystyle\sum_{i}\sum_{j}  P(x_i,y_j) \log (\frac{P(x_i)P(y_j)} {P(x_i,y_j)}),
\end{equation}

kde $X_i$ a $Y_j$ jsou hodnoty vzaté náhodnou proměnnou X, respektive Y a P($x_i$, $y_j$) je společná pravděpodobnost $x_i$ a $y_j$. 

Abychom mohli z trénovací množiny T DNA sekvencí vytvořit ICM délky {\it k}, musíme nejprve začít zvážením všech oken (tj. oligomerů) délky {\it k+1} , které se objevují v T. Náhodná proměnná $X_1$ udává distribuci bází v první pozici tohoto okna, $X_2$ ve druhé pozici a tak dále až k $X_{k+1}$. Následně jsou spočítány vzájemné informační hodnoty I($X_1$;$X_{k+1}$), I($X_2$;$X_{k+1}$), … I($X_k$;$X_{k+1}$) a poté je z nich vybráno maximum. Pokud je maximum I($X_j$;$X_{k+1}$), rozdělíme naši množinu oken do 4 podmnožin založených na nukleotidu, který se v okně vyskytuje na pozici {\it j}.

Stejný postup je proveden znovu pro každou ze 4 množin oken. V každé množině je vybrána pozice, která má nejvyšší společnou informaci s bází na pozici {\it k+1} a je vyvoláno další dělení současné množiny oken ve 4 podmnožiny, protože existují 4 typy nukleotidů.

Tímto postupem je vytvořen strom pozic pro každý kontextový řetězec. Tvoření stromu skončí, když hloubka stromu dosáhne předurčeného limitu nebo když je velikost množiny oken moc malá pro efektivní stanovení pravděpodobnosti poslední pozice báze.

Každý uzel ve stromu reprezentuje množinu oken, které poskytují pravděpodobností rozložení pro každou bázi na výsledné pozici. 
Kořen stromu, jež reprezentuje 0. řád Markovova modelu, obsahuje všechna možná okna a další uzly udávají pravděpodobnost distribuce pro výslednou pozici báze, která je podmíněná množinou bází, jež se vyskytuje na pozicích u cesty z uzlu ke kořenu.

Interpolovací mechanismus využitý v druhé verzi Glimmeru je stejný jako ten v první. Jediný rozdíl je, že ICM interpolace probíhá jako interpolování mezi distribucemi v rodičovském a dceřinném uzlu ve stromě, zatímco IMM interpolace je vždy mezi distribucemi získaných využitím různých čísel bazí na konci kontextového okna. 

Pokud se dva geny překrývají, oblast překryvu je nejprve ohodnocena stejně jako v předcházející verzi programu, ale poté se systém pokusí posunout pozice start kodonů, jak je uvedeno níže. Posun startovacího kodonu funguje následovně: systém zkrátí predikovaný gen posunutím startu na další dostupný start kodon. Pokud nedojde k vyřešení překryvu, posune se start kodon znovu a tento postup pokračuje tak dlouho, dokud je výsledný gen delší než minimální délka genu. 

Pokud domnělý gen A má vyšší skóre než gen B, jsou zváženy 4 různé orientace:

\begin{figure}[!h]
  \begin{center}
    \includegraphics[scale=1]{obrazky/1}
  \end{center}
\begin{center}
  \caption{Případ překryvu č. 1, z~\cite{12}.}
\label{pr1}
  \end{center}
\end{figure}
Na obr. \ref{pr1} je ilustrován první případ, kdy posun startu A nebo startu B překryv nevyřeší. Takže pokud je A delší než B, potom B zamítneme jako gen. Jestliže A není delší než B, budou oba dva geny označeny jako geny s poznámkou, že zde byl nalezen nejasný překryv.

\begin{figure}[!h]
  \begin{center}
    \includegraphics[scale=1]{obrazky/2}
  \end{center}
\begin{center}
  \caption{Případ překryvu č. 2, z~\cite{12}.}
\label{pr2}
  \end{center}
\end{figure}
Druhý případ je uveden na obr. \ref{pr2}. V tomto případě lze překryv vyřešit jedině posunutím genu B, tudíž pokud s ním může pohnout, tak to uděláme. Pokud ne a B je znatelně kratší než A, potom je B zamítnuto. Jinak jsou oba geny označeny jako geny s poznámkou značící překryv.

\begin{figure}[!h]
  \begin{center}
    \includegraphics[scale=1]{obrazky/3}
  \end{center}
\begin{center}
  \caption{Případ překryvu č. 3, z~\cite{12}.}
\label{pr3}
  \end{center}
\end{figure}
\newpage
Ve třetím případě, jak vidíme na  obr. \ref{pr3}, může být překryv vyřešen pouze posunem startu A. Jelikož A má vyšší skóre, zkusíme ho posunout. Posun provádíme do té doby, dokud je překryv relativně malou frakcí délky A. Pokud přizpůsobení A není úspěšné, B je zamítnuto.

\begin{figure}[!h]
  \begin{center}
    \includegraphics[scale=1]{obrazky/4}
  \end{center}
\begin{center}
  \caption{Případ překryvu č. 4, z~\cite{12}.}
\label{pr4}
  \end{center}
\end{figure}
V posledním případě (obr. \ref{pr4}) lze posunout oba starty. Nejprve posouváme start B, dokud oblast překryvu nemá větší skóre pro gen B. Následně posouváme start A, dokud nebude mít větší skóre a poté opakujeme posun genu B, atd., dokud můžeme posun provádět nebo dokud není odstraněn překryv.~\cite{12}

\subsubsection{Glimmer 3.0}

Třetí a zatím poslední dostupná verze byla vypuštěna v roce 2007. Dle autorů je snížena míra falešně pozitivních predikcí, je správně predikován větší počet startovacích míst a stále je zachována vysoká míra správně pozitivních predikcí. 

Autoři se v této verzi zabývali problematikou separace a identifikace DNA hostitele a jeho symbionta. Proto vyvinuli nový algoritmus, ve kterém se IMM uvnitř Glimmeru učí zvlášť na hostiteli a endosymbiontovi a poté se promění ve třídící program, který je schopen tyto dvě sekvence oddělit.~\cite{13}

\subsection{Prodigal}
Prodigal neboli Prokaryotic Dynamic Programming Genefinding Algorithm je program pro vyhledávání genů, který byl vyvinut v roce 2007, avšak publikován byl až o tři roky později.

Program začíná projitím celé vstupní sekvence a v každém otevřeném čtecím rámci spočítá počet bází guaninu a cytosinu pro každou kodonovou pozici, z kterého určí bias skóre, pomocí kterého je vytvořeno předběžné kódovací skóre pro každý gen v genomu. Skóre S pro daný gen začínající na pozici n1 a končící na pozici n2 je dáno vzorcem:

\begin{equation}
S(n1..n2) = \displaystyle\sum_{i=3}^{3} B(i)*l(i),
\end{equation}
kde \textit{B(i)} je bias skóre pro pozici v kodonu \textit{i} a \textit{l} je počet bází v genu. Tímto skórem je ohodnocený každý start-stop pár, který je delší než 90 bp.
Při dynamickém programování je každý uzel v matici buď start nebo stop kodon. Spojení startu k~jeho odpovídajícímu stopu reprezentuje gen, s ohledem na to, že spojení 3' konce  k novému 5' konci reprezentuje mezigenový prostor. 
Jelikož dynamické programování nemůže jít zpětně, protože částečné řešení daného bodu, musí být součástí výsledného řešení, je potřeba určit pravidla pro překrývající se geny. Prodigal ohodnotí překrývající se geny pro všechny tři rámce pro každý 3' konec v genomu a vytvoří nový typ spojení z 3' konce jednoho genu k 3' konci druhého genu na stejném vlákně. Mezi dvěmi geny na stejném vlákně je povolen maximální překryv 60 bp a pro opačné vlákno 200 bp mezi 3' koncemi genu a pro 5' konce genů překryvy povoleny nejsou.

Po skončení předběžného algoritmu dynamického programování, dojde k vyhodnocení domnělých genů a vytvoření více důkladného kódovacího skóre. Na sekvenci je pohlíženo jako na řadu slov délky 6, tedy hexamery. Frekvence hexameru uvnitř rámce mohou sloužit k rozdělení kódujících regionů od těch nekódujících. Prodigal počítá skóre pro hexamer, tedy slovo w jako:

\begin{equation}
C(w)=\log (G(w)/B(w)),
\end{equation}
kde C je kódovací skóre, G je procentuální výskyt daného slova v naší trénovací množině a B je procentuální výskyt daného slova v celé sekvenci. 
Finální kódovací skóre pro gen začínající na pozici n1 a končící na n2 může být zapsáno jako:

\begin{equation}
S(n1..n2) = \displaystyle\sum_{i=n1}^{n2} C(w(i)),
\end{equation}
kde S je suma kódovacích skór (C) pro hexamery uvnitř rámce (množina slov w). Toto kódovací skóre je poté poupravené podle toho, co leží proti směru vybraného startu, aby se zamezilo výběru zkrácené verze genu, když může být vybrána delší verze toho samého genu s vyšším skórem.

Dalším krokem je vytvoření skórovacího systému pro translační iniciační místo. Ze všech startovacích uzlů je získáno pozadí ATG, GTG a TTG frekvencí a též je vytvořeno pozadí RBS motivů založených na Shine-Dalgarno (SD) sekvenci, což je krátký úsek ležící před iniciačním kodonem.

Pro RBS motivy je používán koncept 'košů'. Každý koš koresponduje určité sadě RBS motivů a vzdálenosti mezi motivem a iniciačním kodonem translace. Tyto koše byly určené z sady dat z GenBanku.

Na začátku, pokud jsou dva motivy nalezeny proti směru od startovacího místa, má ten, který spadá do více početného koše přednost než ten, spadající do koše méně početného. Prodigal zkoumá výchozí kódovací vrcholy, což jsou nejvíce skórující start-stop páry pro daný stop kodon v každém ORF, které mají skóre vyšší než daný práh. Z těchto kódovacích vrcholů postaví log-pravděpodobnostní model podobný kódujícímu skóre, popsaný následovně:

\begin{equation}
S(n) = \log (R(n)/B(n)),
\end{equation}
kde S je skóre, R je pozorované procento daného typu v naší trénovací množině a B je procento výskytu v pozadí. Tato metoda je používána pro použití start kodonu stejně jako pro koš SD motivu. Skóre jsou sečtená dohromady a vynásobena konstantou a poté přidána do kódovacího skóre. Prodigal projde skrz každý start-stop uzel a provede tento výpočet a modifikaci, což vede k novému nastavení vrcholů pro~množinu trénovacích ORFs. 

Jakmile je určena nová množina vrcholů, Prodigal rekonstruuje pozadí pro oba SD motivy a pro použití start kodonu. V této iteraci a v té následující už dále nepředpokládá, že vyšší očíslovaný koš je lepší pro RBS motivy a místo toho spoléhá na~log-pravděpodobnost vypočítanou v předchozí iteraci k nalezení nejlepšího motivu pro daný start. Prodigal provádí několik iterací tohoto procesu a dokud se vrcholy pohybují významně, tak s nimi pohybuje. Když se vrcholy dále nepohybují, určí finální množinu vah založených na statistice získané z finální množiny domnělých pravých start kodonů.

Výsledný výsledek je množina log-pravděpodobnostních vah pro ATG/GTG/TTG a pro každý RBS koš. 

Pokud se ukáže, že organismus nepoužívá SD motiv, Prodigal prohledá všechny alternativní motivy a potom provede iterativní algoritmus stejný jako je uveden výše. Koše v tomto případě korespondují každému slovu délky 3-6 bp.

Nakonec vytvoříme další skórovací systém, abychom získali informace o regionech, které již nejsou hodnoceny pomocí RBS skóre, tzn. pro několik bází proti~směru iniciačního místa translace. Tento systém postaví matici váhovaných pozic pro celou oblast.

Jakmile je vytvořeno skóre vah pro všechny typy startovacích kodonů, pro RBS motivy a pro vzdálenosti mezi motivy a iniciačním místem translace, potom je ohodnocen každý start a to v celé sekvenci. Finální skóre pro startovací uzel je vyjádřeno jako:

\begin{equation}
S(n) = 4,25*(R(n)+T(n)+0,4*U(n))+C(n),
\end{equation}
kde S je výsledné skóre, R je RBS motiv skóre, T je skóre pro daný typ startu, U je skóre pro oblasti, které nebyly hodnoceny pomocí RBS skóre a C je kódovací skóre. 

Jakmile je vypočítané výsledné skóre, DP proběhne podruhé a pro spojení genů používá již přesnější skóre. Po proběhnutí dynamického programování, program projde výsledné geny a odstraní ty, které mají záporné skóre a výsledkem je seznam genových koordinátů.~\cite{14}


