Definieer een klasse Atoom die ondersteuning biedt voor volgende methoden:
Een initialisatiemethode __init__ waaraan twee argumenten moeten doorgegeven worden: de symbolische naam van het atoom (een string bestaande uit een hoofdletter, gevolgd door nul of meer kleine letters) en de positie van het atoom (voorgesteld als een tuple $$(x, y, z)$$ dat een punt in een driedimensionale ruimte voorstelt, waarbij $$x, y, z \in \mathbb{R}$$). De initialisatiemethode moet deze argumenten respectievelijk toekennen aan de attributen element en positie van het nieuw aangemaakte object.
Een methode massa zonder argumenten die de atoommassa
van het atoom teruggeeft. Maak voor de implementatie van deze methode
optimaal gebruik van een voordefinieerde dictionary met de symbolische
naam van alle elementen uit het periodiek systeem als sleutel, en de
atoommassa's als de corresponderende waarden.
(klik
hier om voorgedefinieerde dictionary te bekijken)
Een methode __repr__ zonder argumenten die een stringvoorstelling van het atoom teruggeeft. De methode __repr__ geeft een syntactisch correcte Python expressie terug, die — wanneer deze geëvalueerd zou worden — een object aanmaakt dat gelijk is aan het object dat origineel werd doorgegeven aan __repr__. Alle reële getallen moeten weergegeven worden met 2 cijfers na de komma.
Een methode __str__ zonder argumenten die een stringvoorstelling van het atoom teruggeeft. Bekijk onderstaand voorbeeld om te achterhalen hoe deze stringvoorstelling er moet uitzien. Alle reële getallen moeten weergegeven worden met drie cijfers na de komma.
Definieer daarenboven nu ook een klasse Molecule die ondersteuning biedt voor volgende methoden:
Een initialisatiemethode __init__ waaraan optioneel een naam (string) voor de molecule kan doorgegeven worden. Gebruik de lege string als standaardwaarde voor de naam van de molecule. De initialisatiemethode moet ervoor zorgen dat alle objecten van de klasse molecule over twee attributen beschikken: i) naam, een string die de naam van de molecule bevat, en ii) atomen, een lijst van alle atomen van de molecule. Initieel verwijst het attribuut atomen naar een lege lijst.
Een methode atoomToevoegen die een gegeven object van de klasse Atoom (dat als argument aan de methode wordt doorgegeven) achteraan toevoegt aan de lijst van atomen.
Een methode leesPDB die de posities van de atomen van
een molecule kan inlezen uit een tekstbestand in PDB formaat. Aan de
methode leesPDB wordt de locatie van het bestand als
string-argument doorgegeven. Voor elke ATOM-regel uit
het bestand moet de methode een Atoom object achteraan
de lijst van atomen van het Molecule object toevoegen,
met een elementnaam en een positie zoals die op de regel worden
beschreven.
Het Protein Data Bank (PDB) bestandsformaat beschrijft de
driedimensionale structuren van moleculen zoals die worden opgeslagen
in de internationale PDB databank. Een typisch PDB bestand kan bestaan
uit honderden of duizenden regels, zoals geïllustreerd in
onderstaand voorbeeld (ingekorte versie van een bestand dat de
structuur van een synthetische collageenachtige peptide beschrijft).
HEADER EXTRACELLULAR MATRIX 22-JAN-98 1A3I
TITLE X-RAY CRYSTALLOGRAPHIC DETERMINATION OF A COLLAGEN-LIKE
TITLE 2 PEPTIDE WITH THE REPEATING SEQUENCE (PRO-PRO-GLY)
...
EXPDTA X-RAY DIFFRACTION
AUTHOR R.Z.KRAMER,L.VITAGLIANO,J.BELLA,R.BERISIO,L.MAZZARELLA,
AUTHOR 2 B.BRODSKY,A.ZAGARI,H.M.BERMAN
...
REMARK 350 BIOMOLECULE: 1
REMARK 350 APPLY THE FOLLOWING TO CHAINS: A, B, C
REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000
REMARK 350 BIOMT2 1 0.000000 1.000000 0.000000 0.00000
...
SEQRES 1 A 9 PRO PRO GLY PRO PRO GLY PRO PRO GLY
SEQRES 1 B 6 PRO PRO GLY PRO PRO GLY
SEQRES 1 C 6 PRO PRO GLY PRO PRO GLY
...
ATOM 1 N PRO A 1 8.316 21.206 21.530 1.00 17.44 N
ATOM 2 CA PRO A 1 7.608 20.729 20.336 1.00 17.44 C
ATOM 3 C PRO A 1 8.487 20.707 19.092 1.00 17.44 C
ATOM 4 O PRO A 1 9.466 21.457 19.005 1.00 17.44 O
ATOM 5 CB PRO A 1 6.460 21.723 20.211 1.00 22.26 C
...
Een methode massa zonder argumenten die de totale massa van de molecule als resultaat teruggeeft. Dit is de som van de massa's van de individuele atomen waaruit de molecule is opgebouwd.
Een methode massacentrum zonder argumenten die de
coördinaten van het massacentrum van de molecule als een tuple
$$(x,y,z)$$ teruggeeft. Het massacentrum $$(x,y,z)$$ van een molecule
die bestaat uit $$n$$ atomen met massa $$m_i$$ ($$1 \leq i \leq n$$)
en positie $$(x_i, y_i, z_i)$$ wordt gedefinieerd door
\[ \, x = \dfrac{\displaystyle\sum_{i=1}^n
m_i\,x_i}{\displaystyle\sum_{i=1}^n m_i} \qquad \, y =
\dfrac{\displaystyle\sum_{i=1}^n m_i\,y_i}{\displaystyle\sum_{i=1}^n
m_i} \qquad \, z = \dfrac{\displaystyle\sum_{i=1}^n
m_i\,z_i}{\displaystyle\sum_{i=1}^n m_i} \]
>>> zuurstof = Atoom('O', (4.013, 0.831, -9.083))
>>> zuurstof.element
'O'
>>> zuurstof.positie
(4.013, 0.831, -9.083)
>>> zuurstof.massa()
15.9994
>>> print(zuurstof)
O-atoom met massa 15.999 op positie (4.013, 0.831, -9.083)
>>> zuurstof
Atoom('O', (4.01, 0.83, -9.08))
>>> molecule = Molecule(naam='water')
>>> molecule.leesPDB('water.pdb')
>>> molecule.atomen
[Atoom('O', (4.01, 0.83, -9.08)), Atoom('H', (4.94, 0.84, -8.84)), Atoom('H', (3.75, -0.07, -9.29))]
>>> molecule.massa()
18.01528
>>> molecule.massacentrum()
(4.0502061994040615, 0.7814290335759422, -9.080985829806696)
Bovenstaande interactieve Pythonsessie maakt gebruikt van het PDB bestand water.pdb1 dat de posities van de atomen van een watermolecule beschrijft. Hieronder geven we de ATOM-regels van dat bestand, voorafgegaan door twee regels die verduidelijken op welke posities de coördinaten van de atomen staan weergegeven.
1 2 3 4 5 6 7 8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
ATOM 1 OH OSP3 1 4.013 0.831 -9.083 1.00 0.00 O
ATOM 2 1HH OSP3 1 4.941 0.844 -8.837 1.00 0.00 H
ATOM 3 2HH OSP3 1 3.750 -0.068 -9.293 1.00 0.00 H