{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# CMS-datan jaottelu ja histogrammien vertailu " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tässä harjoituksessa analysoidaan CERNin julkaisemaa avointa dataa Jupyter Notebook -sovelluksen avulla.\n", "\n", "Valitse analysoitava datatiedosto osoitteesta [opendata.cern.ch](http://opendata.cern.ch/record/545). Tässä esimerkissä käytetään tiedostoa *Dimuon_DoubleMu.csv*, jossa on dataa sellaisista törmäystapahtumista, joissa on havaittu kaksi myonia. Myös muita tiedostoja voidaan käyttää, kunhan niiden tiedostotyyppi on *.csv*. Voit käyttää haluamaasi datatiedostoa tässä notebookissa esimerkiksi kopioimalla datatiedoston URL-osoitteen ja käyttämällä sitä dataa luettaessa.\n", "\n", "![](../../Kuvat/data_url.png)\n", "\n", "Osoitteen voit kopioida painamalla datasetin nimen vieressä olevaa \"Download\"-painiketta hiiren oikealla painikkeella ja valitsemalla \"Copy link location\".\n", "\n", "Ruvetaas hommiin! Otetaan ensimmäiseksi käyttöön paketit pandas ja matplotlib.pyplot, jotta voimme lukea tiedostoja ja piirtää kuvaajia." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import pandas\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Koodisolu voidaan suorittaa *Run*-painikkeella yläpalkista tai näppäinyhdistelmällä *Ctrl+Enter*. Hakasulkujen `In[ ]` sisään ilmestyvä tähti on merkki siitä, että koodia suoritetaan. Etene vasta sitten, kun tähden tilalle on tullut numero eli kun koodi on suoritettu. Numero kertoo, kuinka monta kertaa koodisoluja on suoritettu.\n", "\n", "Tallennetaan data muuttujaan *datasetti* ja tarkistetaan ensimmäisten viiden rivin sisältö." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "datasetti = pandas.read_csv('http://opendata.cern.ch/record/545/files/Dimuon_DoubleMu.csv')\n", "\n", "datasetti.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tässä harjoituksessa olemme kiinnostuneita hiukkasten invariantista massasta. Tallennetaan datasetin invarianttia massaa vastaava sarake muuttujaan *invariantti_massa* viittaamalla sarakkeen otsakkeeseen siten, kuin se esiintyy taulukossa (esim. *M*). Jos datasetistäsi puuttuu invariantin massan sarake, sen voi myös laskea itse (ks. demo \"Laske-invariantti-massa\"). Piirretään histogrammi kertomalla ohjelmalle piirrettävä muuttuja, pylväiden (bins) lukumäärä sekä haluttu piirtoväli (range). Alla olevassa esimerkissä piirretään invariantin massan histogrammi välillä 0-200 GeV ja 50 pylväällä. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": false }, "outputs": [], "source": [ "invariantti_massa = datasetti['M']\n", "\n", "plt.hist(invariantti_massa, bins=50, range=(0,200))\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Piirtoväliä ja pylväiden lukumäärää voidaan muuttaa tarkemman analyysin tekemiseksi.\n", "Yllä olevasta kuvaajasta voidaan erottaa piikki noin 90 GeV:n kohdalla.\n", "\n", "Alla piirretään sama kuvaaja uudestaan siten, että akselit on nimetty ja kuvaajalla on otsikko ja piirtoväliksi valittu 80 GeV - 100 Gev, joka vastaa havaitsemamme piikin ympäristöä." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "plt.xlabel('Invariantti massa [GeV]')\n", "plt.ylabel('Tapahtumien lukumäärä')\n", "plt.title('Kahden myonin invariantin massan histogrammi \\n')\n", "\n", "plt.hist(invariantti_massa, bins=50, range=(80,100))\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dataa voidaan käsitellä matemaattisilla operaattoreilla, kuten yhteen- ja vähennyslaskulla. Datan lajittelu onnistuu luomalla uusi muuttuja, johon talletetaan vain tietyn ehdon täyttävät arvot. Seuraavassa esimerkissä alkuperäisen datan tapahtumat jaetaan kahteen uuteen datasettiin hiukkasten energian perusteella. Datasetit nimetään ja lajitellaan korkeaan energiaan (> 150 GeV) ja matalaan energiaan (< 150 GeV). Jaottelu tehdään siten, että lasketaan kussakin tapahtumassa olevien myonien energiat yhteen ja katsotaan onko se suurempi vai pienempi kuin 150 GeV." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "uusiSettiKorkeaE = datasetti[ datasetti.E1 + datasetti.E2 > 150 ]\n", "uusiSettiMatalaE = datasetti[ datasetti.E1 + datasetti.E2 < 150 ]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Uudet datasetit voidaan piirtää erikseen, kuten tehtiin aiemmin, tai sovittaa yhteen kuvaajaan. Kaksi histogrammia voidaan piirtää päällekkäin säätämällä niiden läpinäkyvyyttä komennolla *alpha*. Histogrammien selitteet tulostetaan kuvaajan oikeaan yläkulmaan selvyyden vuoksi. Lisäksi kuvaajan piirtoväli (range) voidaan rajata analyysin kannalta kiinnostavalle alueelle (piikki 90 GeV:n tuntumassa). " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "plt.xlabel('Invariantti massa [GeV]')\n", "plt.ylabel('Tapahtumien lukumäärä')\n", "plt.title('Kahden myonin invariantti massa, vertailu energian perusteella \\n')\n", "plt.hist(uusiSettiMatalaE ['M'], bins=50, range=(80,100), alpha=0.5, label='Matala E')\n", "plt.hist(uusiSettiKorkeaE ['M'], bins=50, range=(80,100), alpha=0.5, label='Korkea E')\n", "plt.legend (loc='upper right')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Mitä tapahtuu, jos muutat energiarajan arvoa? Kokeile energiarajan muuttamista luodessasi muuttujat *uusiSettiKorkeaE* ja *uusiSettiMatalaE*. Millä muulla ehdolla voisit lajitella datan?" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 2 }