Spektriä pukkaa¶
Elektronispektroskopiassa materiaa tutkitaan säteilyttämällä sitä kirkkaalla valolla ja mittaamalla siitä irronneiden elektronien kineettistä energiaa. Kun valon fotonien energia tiedetään, voidaan sitä ja elektronien kineettistä energiaa käyttämällä laskea elektronin irroittamiseen vaadittu työ. Tämä antaa tärkeää informaatiota aineen elektronirakenteesta ja siten sen kemiallisista ja fysikaalisista ominaisuuksista. Tapahtumaa, jossa fotoni irroittaa atomista elektronin kutsutaan fotoionisaatioksi ja irronneita elektroneja fotoelektroneiksi.
Tässä harjoitustyössä tehtävänäsi on analysoida argonin fotoionisaatiospektriä. Tehtävänanto sisältää (simuloitua) dataa mittauksesta, jossa argon-atomeita on ionistu säteilyllä ja irronneiden elektronien kineettinen energia on mitattu. Tehtävässä pääset kirjoittamaan ohjelman, joka osaa ladata datan tiedostoista, piirtää sen näkyviin, muokata sitä ja laskea siitä erinäisiä kiinnostavia arvoja. Lisäksi opit käyttämään ulkoisia kirjastoja (numpy, matplotlib).
Ohjelmistoista¶
Tässä työssä tarvitaan kahta kolmannen osapuolen kirjastoa: numpy ja matplotlib. Näille löytyy useita asennustapoja. Windows-asennusohjelmat löytyvät internetistä, ja asennus onnistuu myös pip install -komennolla. Internetistä löytyy myös ns. full stack -paketteja, joissa tulee mukana Python ja tarvittavat kirjastot - nämä tyypillisesti asentuvat oman Pythonisi päälle. Mikäli käytät jotain full stack -pakettia, mainitse asiasta ohjelmasi alussa kommenttirivillä, koska ne saattavat käyttää eri versioita kirjastoista kuin erikseen asennetut.
Lisäksi tarvitset pienen kirjaston graafista käyttöliittymää varten - siitä lisää alempana.
Tarkemmat vaatimukset¶
Argonin spektrin mittaus on suoritettu useamman kerran ja jokainen mittauskerta löytyy omasta tiedostostaan ("measurement_x.txt", missä "x" on kyseisen mittauskerran järjestysnumero). Tiedostoissa on jokaisella rivillä kaksi liukulukua. Ensimmäinen kertoo mitatun energian perusteella lasketun sidosenergian (yksikkönä elektronivoltti). Toinen luku on kyseistä energiaa vastaava intensiteetti (mielivaltainen yksikkö, mutta kertoo suurinpiirtein paljonko kyseisen energian elektroneja on mitattu). Jokaisessa mittauksessa sidosenergiat ovat samat tasaväliset luvut. Ohjelmasi tarkoitus on summata jokainen mittauksista yhteen. Tällöin yksittäisessä mittauksessa oleva satunnainen heilahtelu toivonmukaan kumoutuu ja ainoastaan kokeellisesti mielenkiintoinen signaali jää jäljelle.
Spektriin tulee mittauslaitteistosta johtuva lineaarinen tausta, eli spektri näyttää piikkejä lukuunottamatta laskevalta suoralta. Tämä taustasignaali pitää poistaa spektristä ennen sen analysointia. Poistaminen tapahtuu valitsemalla spektristä kaksi pistettä (alku- ja loppupäästä) ja sovittamalla näihin pisteisiin suora. Sen jälkeen spektrin jokaisesta pisteestä vähennetään samaa energiaa vastaava suoran arvo.
Tätä spektriä tutkittaessa olemme kiinnostuneet kahden spektrissä näkyvän piikin intensiteettien suhteesta. Piikkien intensiteetit saadaan laskemalla niiden pinta-ala integroimalla. Integroinnissa käytetään puolisuunnikassääntöä. Teorian mukaan energiassa ensimmäisen piikin intensiteetin tulisi olla noin kaksi kertaa suurempi kuin toisen piikin.
Ohjelmassasi pitää olla seuraavat ominaisuudet:
- Ohjelmassa on graafinen käyttöliittymä, josta käyttäjä voi valita ohjelman eri toiminnot.
- Ensimmäinen toiminto lataa datan tiedostoista ohjelman muistiin. Aliohjelma etsii käyttäjän valitsemasta kansiosta tiedostoja, joiden nimi on ylläolevaa muotoa ja lukee niissä olevan datan. Aliohjelman tulee luoda ohjelmaan muistiin kaksi listaa, joista toisessa on mitatut kineettiset energiat ja toisessa summa jokaisesta mitatusta intensiteetispektristä. (Eli jokaista yksittäistä energiaa vastaavat intensiteetit eri mittauksista on laskettu yhteen.) Lopuksi aliohjelma ilmoittaa käyttäjälle montako tiedostoa ladattiin.
- Toinen toiminto piirtää sen hetkisen ohjelman muistissa löytyvän datan näkyviin. Mikäli mitään dataa ei ole ladattu, tästä ilmoitetaan käyttäjälle jollain tavalla. Data piirretään näkyviin käyttämällä matplotlib-kirjastoa, ja käyttöliittymään upotettua kuvaajaa sekä piirtoaluetta - pyplotia ei siis voi käyttää. Kuvaajan pitäisi näyttää suurin piirtein alla olevan esimerkin mukaiselta.
- Kolmas toiminto poistaa spektristä lineaarisen taustan. Mikäli mitään dataa ei ole ladattu ohjelman muistiin, ilmoitetaan tästä käyttäjälle. Käyttäjä valitsee kaksi pistettä klikkaamalla niitä kuvaajasta, ja ohjelma sovittaa näihin pisteisiin suoran sekä vähentää ohjelman muistissa olevasta spektristä taustan.
- Neljäs toiminto laskee spektristä löytyvien piikkien intensiteetit. Mikäli mitään dataa ei ole ladattu ohjelman muistiin, ilmoitetaan tästä käyttäjälle. Integrointi tehdään käyttämällä puolisuunnikassääntöä, josta löytyy toteutus numpy-kirjastosta (numpy.trapz). Käyttäjä valitsee energiavälin klikkaamalla kuvaajasta. Tämän jälkeen ohjelma laskee piikin pinta-alan ja ilmoittaa sen käyttäjälle.
- Viides toiminto antaa käyttäjän tallentaa kuvaajan ohjelman muistissa sillä hetkellä olevasta datasta. Mikäli mitään dataa ei ole ladattu ohjelman muistiin, ilmoitetaan tästä käyttäjälle. Aliohjelma kysyy käyttäjältä tiedostonnimen, jolla tämä haluaa kuvaajan tallentaa. Sen jälkeen aliohjelma tallentaa käyttäjän antamalla nimellä samanlaisen kuvaajan kuin mitä toisessa aliohjelmassa piirretään näkyviin. Kuvaajien tallentamiseen löytyy omat metodinsa matplotlib-kirjastosta. Kuvaajat voi tallentaa .png-muodossa.
Kuvaajia piirtäessä muista antaa akseleille mielekkäät nimet (kuten esimerkkikuvassa). Tähän löytyy matplotlibistä omat komennot.
Grafiikka¶
Käyttöönotto¶
Kirjasto rakentuu Pythonin normaaliasennuksessa mukana tulevan Tkinter-kirjaston päälle, ja tarjoaa siitä rajusti yksinkertaistetun rajapinnan funktioiden kautta. Kirjaston dokumentaatiomerkkijonot kertovat miten sitä käytetään. Kirjaston pääohjelmassa on myös lyhyt esimerkki siitä, miten sillä tehdään yksinkertainen käyttöliittymä.
Käyttöliittymäkirjastojen 101¶
Käyttöliittymäohjelmoinnissa kirjastoissa on tyypillisesti pääohjelmasilmukka, joka pyörii ns. konepellin alla. Kaikki mitä käyttäjä tekee käyttöliittymässä kytketään yleensä käsittelijäfunktioihin. Kun käyttäjä vaikkapa painaa nappia, kutsutaan nappiin kiinnitettyä käsittelijäfunktiota, joka tekee Jotain (tm). Ohjelma ei siis etene samalla tavalla lineaarisesti kuin tähän asti on totuttu. Käyttöliittymät muodostuvat elementeistä joita kutsutaan widgeteiksi. Nämä voivat olla yksinkertaisia, kuten painonapit, tai monimutkaisempia kuten vaikkapa kokonainen tiedostonavausikkuna, joita näkee useimmissa ohjelmissa.
Tyypillisesti pääohjelmassa luodaan käyttöliittymän ulkoasu valitsemalla mitä elementtejä sinne laitetaan. Samalla määritellään elementtien ominaisuudet ja erityisesti niiden käsittelijäfunktiot. Loppu koodauksesta on näiden käsittelijäfunktioiden sekä erilaisten apufunktioiden tekemistä (joita käsittelijäfunktiot käyttävät).
Yksi erityispiirre on se, että koska funktioita kutsutaan ulkoisesti kirjaston toimesta, emme voi hallita sitä mitä tietoa niille annetaan. Ohjelman tilaa ei siis voi kuljettaa funktion argumenteissa, vaan se täytyy esittää jollain muulla tavalla. Hyvä vaihtoehto tämän lopputyön kontekstissa on tehdä sanakirja, johon talletetaan esim. ladattu data sekä pisteet, jotka käyttäjä on valinnut. Jos sanakirja on määritelty pääohjelmassa, sitä voidaan muuntuvuutensa ansiosta käsitellä kaikissa funktioissa. Tällöin mikä tahansa funktio voi lukea ja muuttaa ohjelman tilaa ilman, että sille tarvii antaa sitä argumenttina.
Palautus¶
Palautusaikaraja: