Peptiden zijn moleculen opgebouwd uit een kleine keten van aminozuren die onderling verbonden zijn door middel van een peptidebinding. De Unique Peptide Finder1 toepassing van het Unipept2 platform laat je toe om een verzameling van unieke peptiden te bepalen voor een reeks geselecteerde genomen. De toepassing vat unieke peptiden op als peptiden die voorkomen in elk van de geselecteerde genomen, en in geen enkel ander genoom (behalve diegene die tot dezelfde soorten behoren als de geselecteerde genomen).

Unique Peptide Finder
De Unique Peptide Finder uit de Unipept suite vindt bijna 4000 unieke peptiden voor de bacteriële soort Acinetobacter baumannii. Deze peptiden kunnen als biomerker gebruikt worden om na te gaan of deze soort in een staal voorkomt.

Deze unieke peptiden kunnen dan gebruikt worden om na te gaan of een omgevingsstaal sporen bevat van een bepaalde soort, bijvoorbeeld om na te gaan of er paardenvlees in de gehaktballen van een Zweedse meubelgigant3 zit. Massaspectrometers kunnen immers specifiek ingesteld worden om gericht bepaalde peptiden op te sporen (targeted proteomics). Hierbij worden bijkomende selectiecriteria opgelegd aan de peptiden, om daarmee de kans te vergroten dat ze door de massaspectrometer opgepikt zullen worden. Bij selected reaction monitoring (SRM) — een bepaalde techniek voor targeted proteomics — wordt bijvoorbeeld enkel gewerkt met peptiden die een lengte tussen 10 en 15 aminozuren hebben, en worden ook peptiden uitgesloten die cysteïne (C), methionine (M), histidine (H) of tryptofaan (W) bevatten. Cysteïnes worden in proteomics experimenten immers vaak gereduceerd en gealkalyseerd om zwavelbruggen te verbreken. Methionine, histidine en tryptofaan kunnen dan weer geoxideerd worden.

Opgave

In deze opgave worden peptiden voorgesteld als strings die enkel bestaan uit letters (in de praktijk worden er slechts 20 letters gebruikt, die corresponderen met de 20 verschillende aminozuren). Je wordt gevraagd om een functie filterPeptiden te schrijven, waaraan twee locaties van tekstbestanden als stringargumenten moeten doorgegeven worden. Het eerste tekstbestand moet een lijst van peptiden bevatten. Elke peptide staat daarbij op een afzonderlijke regel. Dit is meteen ook het bestandsformaat waarmee de unieke peptiden uit de Unique Peptide Finder4 toepassing kunnen geëxporteerd worden. De functie moet alle peptiden uit het eerste bestand die voldoen aan bepaalde voorwaarden wegschrijven naar een nieuw tekstbestand (elke peptide moet op een afzonderlijke regel uitgeschreven worden), waarvan de locatie als tweede argument aan de functie wordt doorgegeven. De extra voorwaarden op basis waarvan de peptiden moeten gefilterd worden, kunnen ingesteld worden aan de hand van vier optionele parameters van de functie filterPeptiden.

Een filter wordt pas actief als er een waarde voor de corresponderende parameter aan de functie wordt doorgegeven. Alle filters die letters vergelijken, mogen geen onderscheid maken tussen hoofdletters en kleine letters. De peptiden die aan alle voorwaarden voldoen, moeten ongewijzigd naar het nieuwe bestand geschreven worden.

Als hulpfunctie bij de implementatie van de functie filterPeptiden schrijf je eerst een functie filterPeptide. Aan deze functie moet een peptide als argument doorgegeven worden. Voorts heeft de functie dezelfde optionele parameters als de functie filterPeptiden, met dezelfde betekenis. De functie moet een Booleaanse waarde teruggeven, die aangeeft of de gegeven peptide voldoet aan de gestelde voorwaarden.

Voorbeeld

Bij onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand peptiden.txt5 zich in de huidige directory bevindt.

>>> filterPeptide('QEWLEMPWDNWPVYVLR', minlen=10, maxlen=20)
True
>>> filterPeptide('LICLSYGCHMMSYQWAHIVTDDCVDEGCGMYHMSHEILK', maxlen=20)
False
>>> filterPeptide('EQEETISFADLGPNGTFISK', bevat='DEQ', ontbreekt='CMHW')
True
>>> filterPeptide('QEWLEMPWDNWPVYVLR', bevat='DEQ', minlen=10, maxlen=20, ontbreekt='CMHW')
False

>>> filterPeptiden('peptiden.txt', 'gefilterd.txt', minlen=10, maxlen=20)
>>> print(open('gefilterd.txt', 'r').read().rstrip())
EQEETISFADLGPNGTFISK
QEWLEMPWDNWPVYVLR

>>> filterPeptiden('peptiden.txt', 'gefilterd.txt', maxlen=20)
>>> print(open('gefilterd.txt', 'r').read().rstrip())
ISIK
GLIR
EQEETISFADLGPNGTFISK
QEWLEMPWDNWPVYVLR

>>> filterPeptiden('peptiden.txt', 'gefilterd.txt', bevat='DEQ', ontbreekt='CMHW')
>>> print(open('gefilterd.txt', 'r').read().rstrip())
EQEETISFADLGPNGTFISK
SATIDLGIYTIADLAISGGTTDNVDGTGDAPGLGDIQEVPR

>>> filterPeptiden('peptiden.txt', 'gefilterd.txt', ontbreekt='CMHW')
>>> print(open('gefilterd.txt', 'r').read().rstrip())
ISIK
GLIR
EQEETISFADLGPNGTFISK
SATIDLGIYTIADLAISGGTTDNVDGTGDAPGLGDIQEVPR

>>> filterPeptiden('peptiden.txt', 'gefilterd.txt', bevat='DEQ', minlen=10, maxlen=20, ontbreekt='CMHW')
>>> print(open('gefilterd.txt', 'r').read().rstrip())
EQEETISFADLGPNGTFISK

Bronnen