Het emissiespectrum van een chemisch element of een chemische verbinding is het frequentiespectrum van de electromagnetische straling die wordt uitgezonden wanneer een atoom of een molecule overgaat van een hoge energietoestand naar een lage energietoestand. De energie van het uitgezonden foton is gelijk aan het verschil in energie tussen de twee toestanden.
Elk atoom heeft verschillende mogelijke elektronentransities, die elk corresponderen met een specifiek energieverschil. Deze verzameling van mogelijke transities — die aanleiding geven tot een straling in verschillende golflengten — vormt een emissiespectrum.
Elk chemisch element heeft een uniek emissiespectrum. Bij wijze van voorbeeld tonen we hieronder het referentiespectrum van waterstof (H) waarop vier spectraallijnen te zien zijn.
Spectroscopie kan dus gebruikt worden om de atomen te identificeren die voorkomen in een stof met onbekende samenstelling. De emissiespectra van moleculen kunnen ook gebruikt worden bij de chemische analyse van stoffen.
Hierbij moet rekening gehouden worden met een aantal vormen van variatie die kunnen optreden bij het bepalen van emissiespectra. Door meetfouten wijkt de gemeten golflengte van een spectraallijn doorgaans lichtjes af van een spectraallijn in een emissiespectrum dat als referentie gebruikt wordt. Bovendien vinden bij het bepalen van het energiespectrum van een bepaalde stof niet noodzakelijk alle mogelijke elektronentransities plaats, waardoor de corresponderende spectraallijnen niet gemeten worden. Door interferenties tussen atomen kunnen er ook spectraallijnen opduiken die niet in de referentiespectra van de individuele atomen voorkomen.
Hierboven tonen we opnieuw het referentiespectrum van waterstof (midden) waarop vier spectraallijnen te zien zijn. Boven en onder het referentiespectrum staan twee emissiespectra van waterstof zoals ze gemeten werden in het laboratorium. We zien telkens lichte afwijkingen in de gemeten golflengte van de spectraallijnen (de golflengten worden aangegeven boven of onder de spectra). Alle corresponderende spectraallijnen tussen het referentiespectrum en de gemeten spectra zijn aangegeven met een blauwe pijl, waarbij we ook de afwijking ($$\Delta$$) hebben aangegeven. In het bovenste spectrum is de tweede spectraallijn uit het referentiespectrum door een meetfout als het ware verdubbeld. In het onderste spectrum duikt op golflengte 524.8 nm een extra spectraallijn op.
We stellen het emissiespectrum van een atoom of een chemische stof voor als een tuple met reële getallen (float). Deze getallen stellen golflengten van spectraallijnen in het emissiespectrum voor, en moeten altijd in oplopende volgorde gerangschikt zijn.
Als we de referentiespectra van een reeks atomen opslaan in een bestand, dan doen we dat door op elke regel de symbolische naam van het atoom te zetten, gevolgd door een tab en de golflengten van de spectraallijnen in het emissiespectrum van dat atoom. De golflengten van de spectraallijnen worden van elkaar gescheiden door komma's (,). Hierbij moeten de golflengten niet noodzakelijk in oplopende volgorde gerangschikt zijn. Bij wijze van voorbeeld tonen we hieronder de inhoud van het bestand spectra.txt1.
H 486.135,434.0472,656.279,410.1734
He 501.56783,667.8151,587.5621,471.31457,492.19313,504.7738,447.14802,438.79296,402.61914,412.08154
Li 610.354,670.791,413.259,610.365,670.776
Hg 404.6565,407.7837,434.74945,435.8335,535.4034,546.075,567.581,576.961,579.067,580.3782,585.9254,671.634,690.746
Gevraagd wordt:
Schrijf een functie referentiespectra waaraan de locatie (str) van een tekstbestand moet doorgegeven worden dat de referentiespectra bevat van een reeks atomen. De functie moet een dictionary (dict) teruggeven die de symbolische naam (str) van elk atoom uit het bestand afbeeldt op zijn referentiespectrum (voorgesteld als een emissiespectrum).
Schrijf een functie referentielijnen waaraan twee emissiespectra moeten doorgegeven worden: i) een gemeten spectrum en ii) een referentiespectrum. De functie heeft ook nog een derde optionele parameter eps waaraan een waarde $$\epsilon$$ (float; standaardwaarde: 0.1) kan doorgegeven worden. De waarde $$\epsilon$$ stelt de toegelaten afwijking voor tussen corresponderende spectraallijnen in de twee gegeven spectra. De functie moet teruggeven hoeveel spectraallijnen (int) in het referentiespectrum minstens één corresponderende spectraallijn hebben in het gemeten spectrum. Een spectraallijn met golflengte $$g_r$$ in het referentiespectrum correspondeert met een spectraallijn met golflengte $$g_m$$ in het gemeten spectrum als $$|g_r - g_m| \leq \epsilon$$.
Schrijf een functie decompositie waaraan twee argumenten moeten doorgegeven worden: i) een gemeten spectrum en ii) een dictionary (dict) met referentiespectra, die dezelfde vorm heeft als de dictionaries die worden teruggegeven door de functie referentiespectra. De functie heeft ook nog een optionele parameter eps die dezelfde betekenis en standaardwaarde heeft als bij de functie referentielijnen. De functie heeft ook nog een optionele parameter minimum waaraan een natuurlijk getal (int) kan doorgegeven worden. De functie moet een alfabetisch gerangschikte lijst (list) teruggeven van de symbolische namen (str) van alle atomen die voorkomen in de gegeven dictionary, en waarvoor het corresponderende referentiespectrum "voldoende" corresponderende spectraallijnen heeft met het gemeten spectrum. Om het aantal corresponderende spectraallijnen te bepalen tussen het gemeten spectrum en een referentiespectum moet gebruikgemaakt worden van de functie referentielijnen en van de waarde die werd doorgegeven aan de parameter eps. Als er expliciet een waarde werd doorgegeven aan de parameter minimum, dan geeft deze waarde het minimaal aantal corresponderende spectraallijnen aan dat als "voldoende" beschouwd wordt. Als er niet expliciet een waarde werd doorgegeven aan de parameter minimum, dan zijn er pas "voldoende" corresponderende spectraallijnen, als alle spectraallijnen uit het referentiespectrum een corresponderende spectraallijn hebben in het gemeten spectrum.
Bij onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand spectra.txt2 zich in de huidige directory bevindt.
>>> referentiespectrum = referentiespectra('spectra.txt3')
>>> referentiespectrum['H']
(410.1734, 434.0472, 486.135, 656.279)
>>> referentiespectrum['Li']
(413.259, 610.354, 610.365, 670.776, 670.791)
>>> spectrum1 = (410.1055, 434.1126, 434.1427, 486.3071, 656.224)
>>> referentielijnen(spectrum1, referentiespectrum['H'])
3
>>> spectrum2 = (410.1875, 434.0906, 486.2315, 524.7571, 656.2779)
>>> referentielijnen(spectrum2, referentiespectrum['H'], eps=0.1)
4
>>> referentielijnen(spectrum2, referentiespectrum['H'], eps=0.025)
2
>>> spectrum = (402.5579, 410.1914, 413.162, 434.1243, 486.0598, 504.7387, 610.157, 610.562, 656.354, 670.578, 670.991)
>>> decompositie(spectrum, referentiespectrum)
['H']
>>> decompositie(spectrum, referentiespectrum, eps=0.2)
['H', 'Li']
>>> decompositie(spectrum, referentiespectrum, minimum=2)
['H', 'He']
>>> decompositie(spectrum, referentiespectrum, eps=0.2, minimum=2)
['H', 'He', 'Li']