{ "cells": [ { "cell_type": "markdown", "id": "de1086d2", "metadata": {}, "source": [ "# 3 Zenith-afhankelijkheid van een station.\n", "\n", "Deze notebooks werken alleen met Python 3.\n", "\n", "Dit notebook sluit aan op het notebook 'HiSPARC_API'. Er wordt zowel informatie\n", "van het station als van de metingen verwerkt.\n", "\n", "Een HiSPARC-station meet deeltjes in een deeltjeslawine die wordt veroorzaakt\n", "door een primair kosmisch deeltje. De deeltjes in de lawine bewegen globaal met\n", "de lichtsnelheid. De interactie van het primaire deeltje vindt plaats op een\n", "hoogte van tientallen kilometers. De doorsnede van de deeltjeslawine is slechts\n", "enkele hectometers. We kunnen we er dus van uitgaan dat deeltjes globaal in een\n", "vlak loodrecht op de snelheid van het primaire deeltje bewegen.\n" ] }, { "cell_type": "code", "execution_count": null, "id": "0d843c18", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import sapphire\n", "from sapphire import Station\n", "detectors = Station(501).info['scintillators']\n", "for detector in detectors:\n", " print(detector)" ] }, { "cell_type": "markdown", "id": "e295eab6", "metadata": {}, "source": [ "De *plattegrond* van een meetstation (detectorposities) is gedefinieerd door:\n", "\n", "- 'alpha' : De hoek tussen de as gedefinieerd door de GPS-antenne en het midden van de scintillatorplaat en het Noorden.\n", "- 'beta' : De hoek tussen de lange zijde van de scintillatorplaat en het Noorden.\n", "- 'radius' : De afstand van GPS- antenne tot het midden van de detector.\n", "- 'height' : De hoogte t.o.v de GPS- antenne\n", "\n", "Een werkblad voor het maken van een stations-plattegrond is te vinden op:\n", "\n", "[https://docs.hisparc.nl/infopakket/pdf/station_map.pdf](https://docs.hisparc.nl/infopakket/pdf/station_map.pdf)\n", "\n", "### Afstanden\n", "\n", "De afstand tussen twee detectoren is te bepalen met de cosinusregel. Dit is in\n", "een functie te beschrijven:" ] }, { "cell_type": "code", "execution_count": null, "id": "eaabaf32", "metadata": {}, "outputs": [], "source": [ "def afstand(detector_1, detector_2):\n", " '''Bepaal de afstand tussen twee detectoren'''\n", " c = detector_2['radius']\n", " b = detector_1['radius']\n", " alpha = np.radians(detector_2['alpha'] - detector_1['alpha'])\n", " return (b ** 2 + c ** 2 - 2 * b * c * np.cos(alpha)) ** .5" ] }, { "cell_type": "markdown", "id": "1042e72e", "metadata": {}, "source": [ "De afstand tussen detector 1 (telt als 0) en 4 (telt als 3) is nu te berekenen\n", "met:" ] }, { "cell_type": "code", "execution_count": null, "id": "6eb56d74", "metadata": {}, "outputs": [], "source": [ "print(afstand(detectors[0], detectors[3]))" ] }, { "cell_type": "markdown", "id": "22ed411a", "metadata": {}, "source": [ "### Aankomsttijden\n", "\n", "In het recept *python data retrieval* zijn events van station 501 van een enkele\n", "dag gedownload.\n", "We openen nu deze data en controleren of de tabel '/s501/events' bestaat. Zo\n", "niet, dan downloaden we de data alsnog" ] }, { "cell_type": "code", "execution_count": null, "id": "3321ea25", "metadata": {}, "outputs": [], "source": [ "import tables\n", "data = tables.open_file('data.h5', 'a')\n", "if '/s501/events' not in data:\n", " data = sapphire.quick_download(501)\n", "else:\n", " print(data.root.s501.events)" ] }, { "cell_type": "code", "execution_count": null, "id": "94738491", "metadata": {}, "outputs": [], "source": [ "events = data.root.s501.events.read()\n", "event = events[0]\n", "print(event)" ] }, { "cell_type": "code", "execution_count": null, "id": "d1636b8f", "metadata": {}, "outputs": [], "source": [ "tijdkolommen = ['t1', 't2', 't3', 't4']\n", "for kolom in tijdkolommen:\n", " print(event[kolom])" ] }, { "cell_type": "markdown", "id": "094c04bb", "metadata": {}, "source": [ "### Zenithoeken\n", "\n", "Uit de tijdsverschillen tussen de aankomsttijden in detectoren is de zenithoek\n", "te bepalen.\n", "\n", "Voor een stations met 4 detectoren zijn er 6 combinaties, d.w.z. 6 zenithoeken:" ] }, { "cell_type": "code", "execution_count": null, "id": "4806b6cf", "metadata": {}, "outputs": [], "source": [ "from itertools import combinations\n", "\n", "def zenithoeken(event, detectors):\n", " '''\n", " De zenithoek is de hoek tussen het golf-front en de horizon,\n", " of ook tussen de as naar het zenith en de as van de deeltjeslawine.\n", "\n", " parameters\n", " event: een enkel event uit de opgehaalde data\n", " detectors: de detectorinformatie uit de API\n", "\n", " returns\n", " een array met de hoek tussen de as door twee detectors en het deeltjes front.\n", " '''\n", " c = 0.2998 # in m/ns\n", "\n", " tijden = [event['t1'], event['t2'], event['t3'], event['t4']]\n", " detector_tijd_paren = zip(detectors, tijden)\n", "\n", " zenith = []\n", " for paar1, paar2 in combinations(detector_tijd_paren, 2):\n", " detector1, t1 = paar1\n", " detector2, t2 = paar2\n", "\n", " if t1 < 0. or t2 < 0.:\n", " continue\n", "\n", " schuine = afstand(detector1, detector2)\n", " overstaande = c * (t1 - t2)\n", "\n", " angle = np.degrees(np.arcsin(overstaande / schuine))\n", " zenith.append(angle)\n", " return zenith" ] }, { "cell_type": "code", "execution_count": null, "id": "3941f2a3", "metadata": {}, "outputs": [], "source": [ "print(zenithoeken(event, detectors))" ] }, { "cell_type": "markdown", "id": "f768cb97", "metadata": {}, "source": [ "Omdat slechts 2 van de 4 detectoren (detector 3 en 4) deeltjes hebben\n", "gedetecteerd is er slechts 1 zenithoek." ] }, { "cell_type": "code", "execution_count": null, "id": "8320c81c", "metadata": {}, "outputs": [], "source": [ "for event in events[0:10]:\n", " print(zenithoeken(event, detectors))" ] }, { "cell_type": "markdown", "id": "8232ea0e", "metadata": {}, "source": [ "Hierboven zijn de gereconstrueerde hoeken voor de eerste 10 events voor alle\n", "combinaties van 2 detectoren in een set van 4 detectoren berekend. De hoeken\n", "zijn gedefinieerd als de hoek tussen de as door de detector en het hart van de\n", "deeltjeslawine.\n", "\n", "Voor events waarbij twee detectoren een of meer deeltjes hebben gedetecteerd is\n", "er slechts 1 zenithoek. Voor events waarbij 3 detectoren zijn geraakt zijn er 3\n", "zenithoeken. Als 4 detectoren meedoen, dan zijn er 6 zenithoeken.\n", "\n", "Een beschrijving van de zenith-hoek is te vinden op:\n", "[https://docs.hisparc.nl/infopakket/pdf/richting_reconstructie.pdf](https://docs.hisparc.nl/infopakket/pdf/richting_reconstructie.pdf)." ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "-all", "main_language": "python", "notebook_metadata_filter": "-all" } }, "nbformat": 4, "nbformat_minor": 5 }