Luciferase is een algemene naam voor een klasse van enzymen1 die gewoonlijk in de natuur voor bioluminescentie2 zorgen. De naam is afgeleid van het Latijnse woord voor "licht" (lux) en "dragen" (ferre). Het bekendste voorbeeld is een luciferase van de glimworm Photinus pyralis.
In luminescente3 reacties wordt licht geproduceerd door de oxidatie4 van een luciferine5 (een pigment) en adenosinetrifosfaat6 (ATP). De reactiesnelheid7 van deze reactie tussen luciferine8 en zuurstof is bijzonder langzaam, tenzij ze door luciferase wordt gekatalyseerd9, dikwijls vergemakkelijkt door de aanwezigheid van calciumionen10 (vergelijkbaar met spiersamentrekking11). De reactie vindt plaats in twee stappen:
luciferine12 + ATP → luciferyladenylaat + PPi13
luciferyladenylaat + O2 → oxyluciferine14 + AMP15 + licht
Er wordt licht geproduceerd omdat de reactie oxyluciferine vormt in een elektronisch aangeslagen toestand. Bij de reactie komt een foton van licht vrij als oxyluciferine teruggaat naar de grondtoestand. Deze reactie is zeer efficiënt: bijna alle energie wordt in licht omgezet. Ter vergelijking, een gloeilamp verliest bijna 90% van haar vermogen in de vorm van warmte.
Luciferinen en luciferasen worden door verschillende diersoorten in verschillende vormen geproduceerd. Naast glimwormen zijn er onder andere paddenstoelen (Omphalotus olearius), insecten, vissen, weekdieren en algen zoals de zeevonk16 (het lichten van de zee17) bekend die met behulp van luciferase licht produceren. Sommige soorten hebben zelfs verschillende luciferasen die met dezelfde luciferine verschillende kleuren licht kunnen produceren.
Maar de meest duivelse van allemaal is wel Oceanobacillus caeni18: een staafvormige, gram-positieve bacterie die geïsoleerd werd uit actief slib van een afvalwaterzuiveringssysteem in Zuid-Korea. Haar luciferase (KPH7874319) bevat een peptide20 ASP–GLU–VAL–ILE–LEU:
MKLSILDQSP ISKGKTPKDA LEASIELAKL TDELGYHRYW VAEHHDLGGL ASPAPDILLG IIGSQTEQIR IGSGAVLLPN YSPYHIAERY NELATLYPNR VDLGLGRAPG GSAEVSIALA GNFLEKVRMY PKLVDEVILF LHQDFPSDHM YAKVSATPVP KTPPVPWLLG TSNKSAKLAI EKRLPFVFGH FMSNEDGPSI VKEYMKNVLN GKSNVIVTVS AICAETTEEA EEIAMSNYLW KILQDKGEGK EGVPSIEEAK AYPYSLEEKE RIERMKQNQI VGNPSQVREQ LENLQSEYEV DELMIVTITH SYEARKKSYQ LLAEEFCLA
In de biologie is een sequentiemotief een peptide (een deel van een eiwit) die in heel veel verschillende eiwitten voorkomt. Het herhaald voorkomen houdt meestal verband met een biologische functie21 van het macromolecuul waarin het motief voorkomt. De zoektocht naar motieven wordt vaak bemoeilijkt doordat er kleine variaties optreden, waardoor de herhalingen niet exact gelijk zijn aan elkaar.
Om alle mogelijke variaties van een motief te kunnen voorstellen, gebruikt de eiwitdatabank PROSITE22 een patroon dat uit één of meer eenheden bestaat die van elkaar gescheiden worden door koppeltekens (-), bijvoorbeeld [AC]-x-V-x-{ED}. Elke eenheid beschrijft welke letters kunnen voorkomen op één bepaalde positie in het motief. Er zijn vier mogelijke notaties voor eenheden:
een hoofdletter (bijvoorbeeld V) geeft aan dat op deze positie enkel die letter mag staan
de kleine letter x geeft aan dat op deze positie gelijk welke letter mag staan
één of meer hoofdletters tussen vierkante haakjes (bijvoorbeeld [AC]) geeft aan dat op deze positie één van deze letters moet staan
één of meer hoofdletters tussen accolades (bijvoorbeeld {ED}) geeft aan dat op deze positie geen enkele van deze letters mag staan
Het is toegelaten dat dezelfde hoofdletter meerdere keren voorkomt tussen een paar vierkante haakjes of accolades, maar dit verandert niets aan het patroon. Omdat elke eenheid correspondeert met één enkele positie in een motief, is de lengte van een motief dat matcht met een patroon dus altijd gelijk aan het aantal eenheden van het patroon.
Zo beschrijft [DJINN]-x-V-x-{SATAN} bijvoorbeeld een patroon met vijf eenheden. Dit patroon matcht met motieven van vijf letters, waarbij de eerste letter een D, I, J of N moet zijn, de tweede en de vierde letter gelijk welke letter kunnen zijn, de derde letter een V moet zijn, en de vijfde letter geen A, N, S of T kan zijn. Dit patroon matcht bijvoorbeeld met het motief DEVIL.
Gevraagd wordt:
Schrijf een functie eenheid waaraan een string $$e$$ (str) moet doorgegeven worden. Als de string $$e$$ geen notatie is voor de eenheid van een patroon (zie de vier mogelijkheden die door PROSITE gebruikt worden), dan moet een AssertionError opgeworpen worden met de boodschap ongeldig patroon. Anders moet de functie een string (str) teruggeven met alle hoofdletters van het alfabet die matchen met de eenheid $$e$$. Die letters moeten in alfabetische volgorde opgelijst worden en er mogen geen dubbels voorkomen.
Schrijf een functie uitbreiden waaraan een patroon $$p$$ (str) moet doorgegeven worden. De functie moet een lijst (list) teruggeven die voor elke eenheid in patroon $$p$$ een string (str) bevat met alle hoofdletters van het alfabet die matchen met de eenheid. Die letters moeten in alfabetische volgorde opgelijst worden en er mogen geen dubbels voorkomen.
Schrijf een functie ismotief waaraan twee argumenten moeten doorgegeven worden: i) een patroon $$p$$ (str) en ii) een string $$m$$ (str). De functie moet een Booleaanse waarde (bool) teruggeven die aangeeft of string $$m$$ matcht met patroon $$p$$. Bij het matchen mag geen onderscheid gemaakt worden tussen hoofdletters en kleine letters in de string $$m$$. We onderstrepen ook nog eens dat een string per definitie niet matcht met een patroon waarvan het aantal eenheden niet gelijk is aan de lengte van de string.
Schrijf een functie motieven waaraan twee argumenten moeten doorgegeven worden: i) een patroon $$p$$ (str) en ii) een string $$s$$ (str). De functie moet een verzameling (set) teruggeven met alle motieven in $$s$$. Een motief is een reeks opeenvolgende letters van $$s$$ die matchen met patroon $$p$$. In de verzameling wordt een motief voorgesteld als een tuple (tuple) met twee elementen: i) de positie (int) van de eerste letter van het motief in de string $$s$$ en ii) een string (str) met de letters van het motief. Bij het matchen mag geen onderscheid gemaakt worden tussen hoofdletters en kleine letters in de string $$s$$. De posities van de karakters in een string worden van links naar rechts genummerd vanaf nul.
Als het eerste argument dat aan deze functies wordt doorgegeven geen string (str) is die een geldig patroon voorstelt, dan moet een AssertionError opgeworpen worden met de boodschap ongeldig patroon.
>>> eenheid('V')
'V'
>>> eenheid('x')
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> eenheid('[DJINN]')
'DIJN'
>>> eenheid('{SATAN}')
'BCDEFGHIJKLMOPQRUVWXYZ'
>>> eenheid('abc')
Traceback (most recent call last):
AssertionError: ongeldig patroon
>>> uitbreiden('[DJINN]-x-V-x-{SATAN}')
['DIJN', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'V', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'BCDEFGHIJKLMOPQRUVWXYZ']
>>> ismotief('[DJINN]-x-V-x-{SATAN}', 'DEVIL')
True
>>> ismotief('[DJINN]-x-V-x-{SATAN}', 'dive')
False
>>> ismotief('[DJINN]-x-V-x-{SATAN}', 'SATAN')
False
>>> motieven('[DJINN]-x-V-x-{SATAN}', 'GNFLEKVRMYPKLVDEVILFLHQDFPSDHMYAKVSATPVPKTPPVPWLLGTSNKSAKLAI')
{(14, 'DEVIL')}
>>> motieven('[DIL]-x-{AEIOU}-[AEIOU]-x-x-[ORS]', 'fanhymkkcllnpwsdetailslmmipiedqcwwffvluciferrhaqcnhgqdyytspmhinfernodkwcfiyveagp')
{(15, 'details'), (37, 'lucifer'), (61, 'inferno')}