In 2020 ontwikkelden verschillende bedrijven vaccins tegen het SARS-CoV-2 virus. De meeste daarvan bevatten genetisch materiaal dat sterk lijkt op dat van het beruchte Spike-eiwit van het virus: het eiwit dat zorgt voor de karakteristieke knotsvormige uitsteeksels aan de buitenkant van coronavirussen.

coronavirus
Coronavirussen hebben karakteristieke knotsvormige uitsteeksels, die in het beeld van een elektronenmicroscoop doen denken aan de corona rondom de zon. Daar hebben ze ook hun naam aan te danken.

Het duurde niet lang of de anti-vaxxers begonnen deze vaccins in een slecht daglicht te stellen. Dat is niet nieuw, want bijna zolang als de mens vaccins is beginnen maken, zijn er ook hevige tegenstanders geweest die alles op alles zetten om mensen bang te maken om ze te gebruiken. Onder de vele medische vragen waarover het gerenommeerde tijdschrift The Lancet zich eind 1890 en begin 1900 boog — Grey Hair and Emotional States1, In Praise of Rum and Milk2, On the Value of Cheese as a Dietetic Resource in Diabetes Mellitus3 — vinden we brieven en opiniestukken waarin gedebatteerd wordt over het pokkenvaccin, de leeftijd waarop kinderen het moeten krijgen, het risico van het vaccin ten opzichte van de ziekte zelf en de mate waarin lokale autoriteiten verplichte vaccinatie moeten afdwingen in geval van uitbraken.

De misleidende beweringen die anti-vaxxers over de recente COVID-19 vaccins de wereld insturen, zijn nagenoeg identiek aan de beweringen over pokkenvaccins van 120 jaar geleden: de ingrediënten zijn giftig en onnatuurlijk, de vaccins zijn onvoldoende getest, de wetenschappers die ze produceren zijn kwakzalvers en profiteurs, de celculturen die gebruikt worden zijn een belediging voor religieuzen of de autoriteiten die zich inzetten voor de bescherming van de volksgezondheid maken zich schuldig aan tirannieke overheersing.

Opgave

Een van die verzinsels van de anti-vaxxers speelt in op de eeuwenlang zoektocht van de mens naar geheime boodschappen die verborgen zitten in boeken4, achterwaarts afgespeelde muziek5, vreemd uitziende plateau's op Mars6, of andere dingen. In dit geval zochten ze naar boodschappen die verborgen zitten in eiwitsequenties. Dit is bijvoorbeeld de record van het SARS-CoV-2 Spike-eiwit (QLI519137) uit de databank van het National Institute of Health (NIH).

LOCUS       QLI51913                1273 aa            linear   VRL 17-JUL-2020
DEFINITION  surface glycoprotein [Severe acute respiratory syndrome coronavirus
            2].
ACCESSION   QLI51913
VERSION     QLI51913.1
DBSOURCE    accession MT772569.1
KEYWORDS    .
SOURCE      Severe acute respiratory syndrome coronavirus 2 (SARS-CoV-2)
…
ORIGIN      
        1 mfvflvllpl vssqcvnltt rtqlppaytn sftrgvyypd kvfrssvlhs tqdlflpffs
       61 nvtwfhaihv sgtngtkrfd npvlpfndgv yfasteksni irgwifgttl dsktqslliv
      121 nnatnvvikv cefqfcndpf lgvyyhknnk swmesefrvy ssannctfey vsqpflmdle
      181 gkqgnfknlr efvfknidgy fkiyskhtpi nlvrdlpqgf saleplvdlp iginitrfqt
      241 llalhrsylt pgdsssgwta gaaayyvgyl qprtfllkyn engtitdavd caldplsetk
      301 ctlksftvek giyqtsnfrv qptesivrfp nitnlcpfge vfnatrfasv yawnrkrisn
      361 cvadysvlyn sasfstfkcy gvsptklndl cftnvyadsf virgdevrqi apgqtgkiad
      421 ynyklpddft gcviawnsnn ldskvggnyn ylyrlfrksn lkpferdist eiyqagstpc
      481 ngvegfncyf plqsygfqpt ngvgyqpyrv vvlsfellha patvcgpkks tnlvknkcvn
      541 fnfngltgtg vltesnkkfl pfqqfgrdia dttdavrdpq tleilditpc sfggvsvitp
      601 gtntsnqvav lyqdvnctev pvaihadqlt ptwrvystgs nvfqtragcl igaehvnnsy
      661 ecdipigagi casyqtqtns prrarsvasq siiaytmslg aensvaysnn siaiptnfti
      721 svtteilpvs mtktsvdctm yicgdstecs nlllqygsfc tqlnraltgi aveqdkntqe
      781 vfaqvkqiyk tppikdfggf nfsqilpdps kpskrsfied llfnkvtlad agfikqygdc
      841 lgdiaardli caqkfngltv lpplltdemi aqytsallag titsgwtfga gaalqipfam
      901 qmayrfngig vtqnvlyenq klianqfnsa igkiqdslss tasalgklqd vvnqnaqaln
      961 tlvkqlssnf gaissvlndi lsrldkveae vqidrlitgr lqslqtyvtq qliraaeira
     1021 sanlaatkms ecvlgqskrv dfcgkgyhlm sfpqsaphgv vflhvtyvpa qeknfttapa
     1081 ichdgkahfp regvfvsngt hwfvtqrnfy epqiittdnt fvsgncdvvi givnntvydp
     1141 lqpeldsfke eldkyfknht spdvdlgdis ginasvvniq keidrlneva knlneslidl
     1201 qelgkyeqyi kwpwyiwlgf iagliaivmv timlccmtsc csclkgccsc gscckfdedd
     1261 sepvlkgvkl hyt
//

In de NIH-databank wordt de gekende informatie over een eiwit beschreven in het zogenaamde GenBank formaat, een formaat voor tekstbestanden. Bovenaan zie je bijvoorbeeld algemene informatie over het eiwit, zoals een unieke code (QLI51913) die aan elke record toegekend wordt en de lengte van de eiwitsequentie (1273 aminozuren). Het eiwit bestaat immers uit een reeks bouwstenen (aminozuren) die elk door één letter voorgesteld worden. Die sequentie zelf staat in het Genbank formaat helemaal onderaan, tussen een regel met de tekst ORIGIN en een regel met de tekst //.

Om verborgen boodschappen te vinden, maken de anti-vaxxers gebruik van een eenvoudige techniek: start bij een bepaalde letter in een tekst en spring daarna telkens een vast aantal letters vooruit of achteruit. Als we bijvoorbeeld starten vanaf de 1226e letter (A) in de sequentie van het Spike-eiwit (gebruik de positie-indicatoren aan de linkerkant van de sequentie in het GenBank-formaat om je te oriënteren) en telkens 8 letters achteruit te springen, lezen we achtereenvolgens de letters van het woord ALIEN (aangeduid in het blauw). Op dezelfde manier kunnen we de volgende woorden in de eiwitsequentie terugvinden:

woord startpositie stapgrootte lengte kleur
ALIEN 1226 -8 5 blauw
KINGS 386 32 5 oranje
SHALL 45 24 5 groen
EAT 132 -9 3 geel
ALL 123 53 3 rood
DIGITS 950 -54 6 paars

Hierbij springen we bij een positieve stapgrootte vooruit in de eiwitsequentie, en bij een negatieve stapgrootte achteruit. De eerste letter van het woord ALL hebben we niet in kleur aangeduid in de eiwitsequentie, omdat de A op de startpositie dezelfde is als de middelste A van EAT. Als een vaccin dat ons toegediend wordt de geheime boodschap

ALIEN KINGS SHALL EAT ALL DIGITS

bevat, dan kan dat toch geen toeval zijn zeker? Iemand moet die er toch moedwillig in aangebracht hebben!

Schrijf een bash shell script antivaxx waarmee woorden uit eiwitsequenties kunnen gelezen worden op basis van de hierboven beschreven techniek. Aan het shell script moeten vier argumenten doorgegeven worden: i) de padnaam van een GenBank-bestand met informatie over een eiwit, ii) een startpositie, iii) een stapgrootte en iv) de lengte van het uit te lezen woord. Het shell script moet drie regels uitschrijven naar stdout die telkens een eigenschap bevatten, gevolgd door een dubbelpunt (:), een spatie en dan de waarde van de eigenschap:

  1. sequence: de eerste tien letters van de eiwitsequentie, gevolgd door drie puntjes (...) en de laatste tien letters van de eiwitsequentie; de letters van de eiwitsequentie staan altijd in hoofdletters

  2. length: de lengte van de eiwitsequentie (aantal aminozuren)

  3. word: het woord van de gegeven lengte dat gevonden wordt door vanaf de startpositie telkens het gegeven aantal letters vooruit of achteruit te springen; de letters van het woord staan altijd in hoofdletters

Als het eerste argument begint met een dubbelpunt (:), dan moet het eiwit niet uit een lokaal GenBank-bestand uitgelezen worden, maar moet het shell script dat tekstbestand downloaden uit de NIH-databank. Dit kan aan de hand van de URL

https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=protein&id=QLI51913&rettype=gb&retmode=text
8

waar op de juiste plaats de unieke code van de eiwitrecord moet ingevuld worden (hier hebben we de code QLI51913 als voorbeeld gebruikt). Die code is het deel van het eerste argument dat na het dubbelpunt staat. Zorg ervoor dat als het shell script gebruikmaakt van tijdelijke bestanden, die ook terug verwijderd worden.

Het shell script mag ervan uitgaan dat de argumenten die eraan doorgegeven worden altijd geldig zijn, zonder dat dit expliciet moet gecontroleerd worden.

Voorbeeld

In onderstaande voorbeeldsessie gaan we ervan uit dat het GenBank-bestand spike.gp9 zich in de huidige directory bevindt.

$ antivaxx spike.gp10 1226 -8 5
sequence: MFVFLVLLPL...VLKGVKLHYT
length: 1273
word: ALIEN
$ antivaxx spike.gp11 386 32 5
sequence: MFVFLVLLPL...VLKGVKLHYT
length: 1273
word: KINGS
$ antivaxx spike.gp12 45 24 5
sequence: MFVFLVLLPL...VLKGVKLHYT
length: 1273
word: SHALL
$ antivaxx spike.gp13 132 -9 3
sequence: MFVFLVLLPL...VLKGVKLHYT
length: 1273
word: EAT
$ antivaxx :QLI51913 123 53 3
sequence: MFVFLVLLPL...VLKGVKLHYT
length: 1273
word: ALL
$ antivaxx :QLI51913 950 -54 6
sequence: MFVFLVLLPL...VLKGVKLHYT
length: 1273
word: DIGITS