From 5bf0013622b722a6e7e3ea26deea196058f2fbad Mon Sep 17 00:00:00 2001 From: 153957 <153957@users.noreply.github.com> Date: Mon, 16 Dec 2024 22:05:38 +0000 Subject: [PATCH] deploy: 0ba6c4542e71952620b24ebe7c928f1073078905 --- .buildinfo | 4 + .doctrees/analysis.doctree | Bin 0 -> 17937 bytes .doctrees/analysis/calibration.doctree | Bin 0 -> 60289 bytes .../analysis/coincidence_queries.doctree | Bin 0 -> 61860 bytes .doctrees/analysis/coincidences.doctree | Bin 0 -> 80732 bytes .../analysis/core_reconstruction.doctree | Bin 0 -> 94048 bytes .../analysis/direction_reconstruction.doctree | Bin 0 -> 233905 bytes .doctrees/analysis/event_utils.doctree | Bin 0 -> 48860 bytes .doctrees/analysis/find_mpv.doctree | Bin 0 -> 25450 bytes .doctrees/analysis/landau.doctree | Bin 0 -> 97189 bytes .doctrees/analysis/process_events.doctree | Bin 0 -> 142243 bytes .doctrees/analysis/process_traces.doctree | Bin 0 -> 73642 bytes .doctrees/analysis/reconstructions.doctree | Bin 0 -> 106507 bytes .doctrees/analysis/signal_calibration.doctree | Bin 0 -> 37487 bytes .doctrees/analysis/time_deltas.doctree | Bin 0 -> 23414 bytes .doctrees/api.doctree | Bin 0 -> 158716 bytes .doctrees/clusters.doctree | Bin 0 -> 141645 bytes .doctrees/configuration.doctree | Bin 0 -> 6381 bytes .doctrees/corsika.doctree | Bin 0 -> 15747 bytes .doctrees/corsika/blocks.doctree | Bin 0 -> 46217 bytes .doctrees/corsika/corsika_queries.doctree | Bin 0 -> 48004 bytes .../corsika/generate_corsika_overview.doctree | Bin 0 -> 28735 bytes .doctrees/corsika/particles.doctree | Bin 0 -> 10385 bytes .doctrees/corsika/qsub_corsika.doctree | Bin 0 -> 42556 bytes .../corsika/qsub_store_corsika_data.doctree | Bin 0 -> 20618 bytes .doctrees/corsika/reader.doctree | Bin 0 -> 43916 bytes .doctrees/corsika/store_corsika_data.doctree | Bin 0 -> 27265 bytes .doctrees/corsika/units.doctree | Bin 0 -> 8938 bytes .doctrees/data.doctree | Bin 0 -> 5464 bytes .doctrees/data/extend_local_data.doctree | Bin 0 -> 8930 bytes .doctrees/data/update_local_data.doctree | Bin 0 -> 21847 bytes .doctrees/environment.pickle | Bin 0 -> 659631 bytes .doctrees/esd.doctree | Bin 0 -> 72241 bytes .doctrees/examples.doctree | Bin 0 -> 28737 bytes .doctrees/index.doctree | Bin 0 -> 6189 bytes .doctrees/installation.doctree | Bin 0 -> 32023 bytes .doctrees/kascade.doctree | Bin 0 -> 24596 bytes .doctrees/publicdb.doctree | Bin 0 -> 18217 bytes .doctrees/qsub.doctree | Bin 0 -> 16055 bytes .doctrees/sapphire.doctree | Bin 0 -> 15957 bytes .doctrees/simulations.doctree | Bin 0 -> 11272 bytes .doctrees/simulations/base.doctree | Bin 0 -> 40650 bytes .doctrees/simulations/detector.doctree | Bin 0 -> 80319 bytes .doctrees/simulations/gammas.doctree | Bin 0 -> 27142 bytes .doctrees/simulations/groundparticles.doctree | Bin 0 -> 100055 bytes .doctrees/simulations/ldf.doctree | Bin 0 -> 104553 bytes .doctrees/simulations/showerfront.doctree | Bin 0 -> 52441 bytes .doctrees/storage.doctree | Bin 0 -> 58952 bytes .doctrees/tests.doctree | Bin 0 -> 6149 bytes .doctrees/time_util.doctree | Bin 0 -> 12328 bytes .doctrees/transformations.doctree | Bin 0 -> 9150 bytes .doctrees/transformations/angles.doctree | Bin 0 -> 14157 bytes .doctrees/transformations/axes.doctree | Bin 0 -> 42566 bytes .doctrees/transformations/base.doctree | Bin 0 -> 10790 bytes .doctrees/transformations/celestial.doctree | Bin 0 -> 58318 bytes .doctrees/transformations/clock.doctree | Bin 0 -> 75044 bytes .doctrees/transformations/geographic.doctree | Bin 0 -> 37091 bytes .doctrees/tutorial.doctree | Bin 0 -> 122096 bytes .doctrees/utils.doctree | Bin 0 -> 44007 bytes .nojekyll | 0 _images/github-zipball.png | Bin 0 -> 167967 bytes _images/tutorial-hist-better.png | Bin 0 -> 38514 bytes _images/tutorial-hist-simple.png | Bin 0 -> 18757 bytes _sources/analysis.rst.txt | 23 + _sources/analysis/calibration.rst.txt | 8 + _sources/analysis/coincidence_queries.rst.txt | 8 + _sources/analysis/coincidences.rst.txt | 8 + _sources/analysis/core_reconstruction.rst.txt | 6 + .../analysis/direction_reconstruction.rst.txt | 6 + _sources/analysis/event_utils.rst.txt | 8 + _sources/analysis/find_mpv.rst.txt | 6 + _sources/analysis/landau.rst.txt | 6 + _sources/analysis/process_events.rst.txt | 6 + _sources/analysis/process_traces.rst.txt | 6 + _sources/analysis/reconstructions.rst.txt | 6 + _sources/analysis/signal_calibration.rst.txt | 8 + _sources/analysis/time_deltas.rst.txt | 6 + _sources/api.rst.txt | 6 + _sources/clusters.rst.txt | 6 + _sources/configuration.rst.txt | 20 + _sources/corsika.rst.txt | 44 + _sources/corsika/blocks.rst.txt | 6 + _sources/corsika/corsika_queries.rst.txt | 6 + .../corsika/generate_corsika_overview.rst.txt | 6 + _sources/corsika/particles.rst.txt | 6 + _sources/corsika/qsub_corsika.rst.txt | 6 + .../corsika/qsub_store_corsika_data.rst.txt | 6 + _sources/corsika/reader.rst.txt | 6 + _sources/corsika/store_corsika_data.rst.txt | 6 + _sources/corsika/units.rst.txt | 6 + _sources/data.rst.txt | 12 + _sources/data/extend_local_data.rst.txt | 6 + _sources/data/update_local_data.rst.txt | 6 + _sources/esd.rst.txt | 6 + _sources/examples.rst.txt | 133 + _sources/index.rst.txt | 31 + _sources/installation.rst.txt | 210 ++ _sources/kascade.rst.txt | 6 + _sources/publicdb.rst.txt | 6 + _sources/qsub.rst.txt | 6 + _sources/sapphire.rst.txt | 23 + _sources/simulations.rst.txt | 30 + _sources/simulations/base.rst.txt | 6 + _sources/simulations/detector.rst.txt | 6 + _sources/simulations/gammas.rst.txt | 6 + _sources/simulations/groundparticles.rst.txt | 6 + _sources/simulations/ldf.rst.txt | 6 + _sources/simulations/showerfront.rst.txt | 6 + _sources/storage.rst.txt | 7 + _sources/tests.rst.txt | 6 + _sources/time_util.rst.txt | 6 + _sources/transformations.rst.txt | 16 + _sources/transformations/angles.rst.txt | 6 + _sources/transformations/axes.rst.txt | 6 + _sources/transformations/base.rst.txt | 6 + _sources/transformations/celestial.rst.txt | 6 + _sources/transformations/clock.rst.txt | 6 + _sources/transformations/geographic.rst.txt | 6 + _sources/tutorial.rst.txt | 842 ++++++ _sources/utils.rst.txt | 6 + _static/basic.css | 914 +++++++ _static/doctools.js | 149 ++ _static/documentation_options.js | 13 + _static/favicon.ico | Bin 0 -> 4286 bytes _static/file.png | Bin 0 -> 286 bytes _static/header.png | Bin 0 -> 3210 bytes _static/hisparc_style.css | 70 + _static/language_data.js | 192 ++ _static/minus.png | Bin 0 -> 90 bytes _static/nature.css | 245 ++ _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 75 + _static/searchtools.js | 632 +++++ _static/sphinx_highlight.js | 154 ++ analysis.html | 163 ++ analysis/calibration.html | 366 +++ analysis/coincidence_queries.html | 387 +++ analysis/coincidences.html | 485 ++++ analysis/core_reconstruction.html | 494 ++++ analysis/direction_reconstruction.html | 1014 +++++++ analysis/event_utils.html | 300 +++ analysis/find_mpv.html | 232 ++ analysis/landau.html | 324 +++ analysis/process_events.html | 696 +++++ analysis/process_traces.html | 463 ++++ analysis/reconstructions.html | 500 ++++ analysis/signal_calibration.html | 257 ++ analysis/time_deltas.html | 218 ++ api.html | 877 ++++++ clusters.html | 785 ++++++ configuration.html | 123 + corsika.html | 160 ++ corsika/blocks.html | 330 +++ corsika/corsika_queries.html | 344 +++ corsika/generate_corsika_overview.html | 225 ++ corsika/particles.html | 171 ++ corsika/qsub_corsika.html | 306 +++ corsika/qsub_store_corsika_data.html | 197 ++ corsika/reader.html | 345 +++ corsika/store_corsika_data.html | 201 ++ corsika/units.html | 154 ++ data.html | 119 + data/extend_local_data.html | 148 ++ data/update_local_data.html | 191 ++ esd.html | 459 ++++ examples.html | 389 +++ genindex.html | 2353 +++++++++++++++++ index.html | 159 ++ installation.html | 307 +++ kascade.html | 199 ++ objects.inv | Bin 0 -> 7558 bytes publicdb.html | 214 ++ py-modindex.html | 355 +++ qsub.html | 189 ++ sapphire.html | 147 + search.html | 102 + searchindex.js | 1 + simulations.html | 140 + simulations/base.html | 298 +++ simulations/detector.html | 501 ++++ simulations/gammas.html | 250 ++ simulations/groundparticles.html | 587 ++++ simulations/ldf.html | 593 +++++ simulations/showerfront.html | 358 +++ storage.html | 359 +++ tests.html | 134 + time_util.html | 183 ++ transformations.html | 128 + transformations/angles.html | 183 ++ transformations/axes.html | 301 +++ transformations/base.html | 160 ++ transformations/celestial.html | 368 +++ transformations/clock.html | 508 ++++ transformations/geographic.html | 288 ++ tutorial.html | 951 +++++++ utils.html | 298 +++ 196 files changed, 26156 insertions(+) create mode 100644 .buildinfo create mode 100644 .doctrees/analysis.doctree create mode 100644 .doctrees/analysis/calibration.doctree create mode 100644 .doctrees/analysis/coincidence_queries.doctree create mode 100644 .doctrees/analysis/coincidences.doctree create mode 100644 .doctrees/analysis/core_reconstruction.doctree create mode 100644 .doctrees/analysis/direction_reconstruction.doctree create mode 100644 .doctrees/analysis/event_utils.doctree create mode 100644 .doctrees/analysis/find_mpv.doctree create mode 100644 .doctrees/analysis/landau.doctree create mode 100644 .doctrees/analysis/process_events.doctree create mode 100644 .doctrees/analysis/process_traces.doctree create mode 100644 .doctrees/analysis/reconstructions.doctree create mode 100644 .doctrees/analysis/signal_calibration.doctree create mode 100644 .doctrees/analysis/time_deltas.doctree create mode 100644 .doctrees/api.doctree create mode 100644 .doctrees/clusters.doctree create mode 100644 .doctrees/configuration.doctree create mode 100644 .doctrees/corsika.doctree create mode 100644 .doctrees/corsika/blocks.doctree create mode 100644 .doctrees/corsika/corsika_queries.doctree create mode 100644 .doctrees/corsika/generate_corsika_overview.doctree create mode 100644 .doctrees/corsika/particles.doctree create mode 100644 .doctrees/corsika/qsub_corsika.doctree create mode 100644 .doctrees/corsika/qsub_store_corsika_data.doctree create mode 100644 .doctrees/corsika/reader.doctree create mode 100644 .doctrees/corsika/store_corsika_data.doctree create mode 100644 .doctrees/corsika/units.doctree create mode 100644 .doctrees/data.doctree create mode 100644 .doctrees/data/extend_local_data.doctree create mode 100644 .doctrees/data/update_local_data.doctree create mode 100644 .doctrees/environment.pickle create mode 100644 .doctrees/esd.doctree create mode 100644 .doctrees/examples.doctree create mode 100644 .doctrees/index.doctree create mode 100644 .doctrees/installation.doctree create mode 100644 .doctrees/kascade.doctree create mode 100644 .doctrees/publicdb.doctree create mode 100644 .doctrees/qsub.doctree create mode 100644 .doctrees/sapphire.doctree create mode 100644 .doctrees/simulations.doctree create mode 100644 .doctrees/simulations/base.doctree create mode 100644 .doctrees/simulations/detector.doctree create mode 100644 .doctrees/simulations/gammas.doctree create mode 100644 .doctrees/simulations/groundparticles.doctree create mode 100644 .doctrees/simulations/ldf.doctree create mode 100644 .doctrees/simulations/showerfront.doctree create mode 100644 .doctrees/storage.doctree create mode 100644 .doctrees/tests.doctree create mode 100644 .doctrees/time_util.doctree create mode 100644 .doctrees/transformations.doctree create mode 100644 .doctrees/transformations/angles.doctree create mode 100644 .doctrees/transformations/axes.doctree create mode 100644 .doctrees/transformations/base.doctree create mode 100644 .doctrees/transformations/celestial.doctree create mode 100644 .doctrees/transformations/clock.doctree create mode 100644 .doctrees/transformations/geographic.doctree create mode 100644 .doctrees/tutorial.doctree create mode 100644 .doctrees/utils.doctree create mode 100644 .nojekyll create mode 100644 _images/github-zipball.png create mode 100644 _images/tutorial-hist-better.png create mode 100644 _images/tutorial-hist-simple.png create mode 100644 _sources/analysis.rst.txt create mode 100644 _sources/analysis/calibration.rst.txt create mode 100644 _sources/analysis/coincidence_queries.rst.txt create mode 100644 _sources/analysis/coincidences.rst.txt create mode 100644 _sources/analysis/core_reconstruction.rst.txt create mode 100644 _sources/analysis/direction_reconstruction.rst.txt create mode 100644 _sources/analysis/event_utils.rst.txt create mode 100644 _sources/analysis/find_mpv.rst.txt create mode 100644 _sources/analysis/landau.rst.txt create mode 100644 _sources/analysis/process_events.rst.txt create mode 100644 _sources/analysis/process_traces.rst.txt create mode 100644 _sources/analysis/reconstructions.rst.txt create mode 100644 _sources/analysis/signal_calibration.rst.txt create mode 100644 _sources/analysis/time_deltas.rst.txt create mode 100644 _sources/api.rst.txt create mode 100644 _sources/clusters.rst.txt create mode 100644 _sources/configuration.rst.txt create mode 100644 _sources/corsika.rst.txt create mode 100644 _sources/corsika/blocks.rst.txt create mode 100644 _sources/corsika/corsika_queries.rst.txt create mode 100644 _sources/corsika/generate_corsika_overview.rst.txt create mode 100644 _sources/corsika/particles.rst.txt create mode 100644 _sources/corsika/qsub_corsika.rst.txt create mode 100644 _sources/corsika/qsub_store_corsika_data.rst.txt create mode 100644 _sources/corsika/reader.rst.txt create mode 100644 _sources/corsika/store_corsika_data.rst.txt create mode 100644 _sources/corsika/units.rst.txt create mode 100644 _sources/data.rst.txt create mode 100644 _sources/data/extend_local_data.rst.txt create mode 100644 _sources/data/update_local_data.rst.txt create mode 100644 _sources/esd.rst.txt create mode 100644 _sources/examples.rst.txt create mode 100644 _sources/index.rst.txt create mode 100644 _sources/installation.rst.txt create mode 100644 _sources/kascade.rst.txt create mode 100644 _sources/publicdb.rst.txt create mode 100644 _sources/qsub.rst.txt create mode 100644 _sources/sapphire.rst.txt create mode 100644 _sources/simulations.rst.txt create mode 100644 _sources/simulations/base.rst.txt create mode 100644 _sources/simulations/detector.rst.txt create mode 100644 _sources/simulations/gammas.rst.txt create mode 100644 _sources/simulations/groundparticles.rst.txt create mode 100644 _sources/simulations/ldf.rst.txt create mode 100644 _sources/simulations/showerfront.rst.txt create mode 100644 _sources/storage.rst.txt create mode 100644 _sources/tests.rst.txt create mode 100644 _sources/time_util.rst.txt create mode 100644 _sources/transformations.rst.txt create mode 100644 _sources/transformations/angles.rst.txt create mode 100644 _sources/transformations/axes.rst.txt create mode 100644 _sources/transformations/base.rst.txt create mode 100644 _sources/transformations/celestial.rst.txt create mode 100644 _sources/transformations/clock.rst.txt create mode 100644 _sources/transformations/geographic.rst.txt create mode 100644 _sources/tutorial.rst.txt create mode 100644 _sources/utils.rst.txt create mode 100644 _static/basic.css create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/favicon.ico create mode 100644 _static/file.png create mode 100644 _static/header.png create mode 100644 _static/hisparc_style.css create mode 100644 _static/language_data.js create mode 100644 _static/minus.png create mode 100644 _static/nature.css create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/searchtools.js create mode 100644 _static/sphinx_highlight.js create mode 100644 analysis.html create mode 100644 analysis/calibration.html create mode 100644 analysis/coincidence_queries.html create mode 100644 analysis/coincidences.html create mode 100644 analysis/core_reconstruction.html create mode 100644 analysis/direction_reconstruction.html create mode 100644 analysis/event_utils.html create mode 100644 analysis/find_mpv.html create mode 100644 analysis/landau.html create mode 100644 analysis/process_events.html create mode 100644 analysis/process_traces.html create mode 100644 analysis/reconstructions.html create mode 100644 analysis/signal_calibration.html create mode 100644 analysis/time_deltas.html create mode 100644 api.html create mode 100644 clusters.html create mode 100644 configuration.html create mode 100644 corsika.html create mode 100644 corsika/blocks.html create mode 100644 corsika/corsika_queries.html create mode 100644 corsika/generate_corsika_overview.html create mode 100644 corsika/particles.html create mode 100644 corsika/qsub_corsika.html create mode 100644 corsika/qsub_store_corsika_data.html create mode 100644 corsika/reader.html create mode 100644 corsika/store_corsika_data.html create mode 100644 corsika/units.html create mode 100644 data.html create mode 100644 data/extend_local_data.html create mode 100644 data/update_local_data.html create mode 100644 esd.html create mode 100644 examples.html create mode 100644 genindex.html create mode 100644 index.html create mode 100644 installation.html create mode 100644 kascade.html create mode 100644 objects.inv create mode 100644 publicdb.html create mode 100644 py-modindex.html create mode 100644 qsub.html create mode 100644 sapphire.html create mode 100644 search.html create mode 100644 searchindex.js create mode 100644 simulations.html create mode 100644 simulations/base.html create mode 100644 simulations/detector.html create mode 100644 simulations/gammas.html create mode 100644 simulations/groundparticles.html create mode 100644 simulations/ldf.html create mode 100644 simulations/showerfront.html create mode 100644 storage.html create mode 100644 tests.html create mode 100644 time_util.html create mode 100644 transformations.html create mode 100644 transformations/angles.html create mode 100644 transformations/axes.html create mode 100644 transformations/base.html create mode 100644 transformations/celestial.html create mode 100644 transformations/clock.html create mode 100644 transformations/geographic.html create mode 100644 tutorial.html create mode 100644 utils.html diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 00000000..a1c8536e --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file records the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 8f97d9940cab1fd53fb95ef9cc893a2c +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/analysis.doctree b/.doctrees/analysis.doctree new file mode 100644 index 0000000000000000000000000000000000000000..108f999a706dc77b1c960cff34044ed233c51654 GIT binary patch literal 17937 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 literal 0 HcmV?d00001 diff --git a/.doctrees/analysis/calibration.doctree b/.doctrees/analysis/calibration.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f3a8c403877cbcb42f1ec97fabe897f2bdf9cd9d GIT binary patch literal 60289 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 literal 0 HcmV?d00001 diff --git a/.doctrees/analysis/coincidences.doctree b/.doctrees/analysis/coincidences.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a5a0f78ed6e30c26227ad6f874adddf113e1a29e GIT binary patch literal 80732 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�GPVmJ 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 literal 0 HcmV?d00001 diff --git a/.doctrees/analysis/core_reconstruction.doctree b/.doctrees/analysis/core_reconstruction.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6c4fecaaf8acd11a4bed7af191e3ec5849b3ef01 GIT binary patch literal 94048 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 literal 0 HcmV?d00001 diff --git a/.doctrees/analysis/direction_reconstruction.doctree b/.doctrees/analysis/direction_reconstruction.doctree new file mode 100644 index 0000000000000000000000000000000000000000..98c93f5d7699275fa126bd0300b22ae4f12d9894 GIT binary patch literal 233905 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 Twx;=G7BC~qNd@UraDf`zGBZF1l!ZCCG0NM zoHngFw5VWX9Ck`%3Dz>yVXj@C) zJJ~SF^hfN5jD~iHi&kwzQK#_x;8rqBMHZ^vuBbBPLG=ag4O-?ZMC^IDg)GJ(9kwuq z{sT9#4C^r!tyzZ+2*0p}9EI)9W?s`8WV?nb2aWM$?vh|KjagPh8()G1Dg)!Y>}^x< z*1W_TvSvtf4O@qC2Xe&QOes^1+svp3K5g0Cz?z5s8F$v(71 z33js?Lcy{exLc%AV|DW8-j-Bo6F+cxFjA{WH~r*NYdm~_0)uP)BI*t=0NCCj1v^VE z9+^K_w$+{JEckOw5!tH_di{YgkzZH)1l6+xFRDAyXYJ*~k>uxx*QeQ-+u|RgF8xX5 zh21ZfPne-4A4j5t9SMdg>QB{U`aW!PqhCw#AdMLwCb(z-a2df}8v&mqcy zz!bqTf?pBby9sbV!SFa>oZxYSrwD$$1@JP#-ctbk2=3bkSSI+$ser2qUL|;q;Gd@f z{!Q@W>42jI17`w839j1?xRK!g_W>RtcyR~dD8ax^z$n2d-VeBy;B|uE5xjF2VBOh( zH_ie4kw88dP$xLN3-B3&-<}Wn1Hqx)07h`zG~E(d7XTIrUM6^j;P)2-{!H-L#egRW zc3%ScAi?FA0wt3WPFG!s>;?Zfh9-UV3 z=(Nm-|JK*(-#;IF>oh=jz0ssg-O=Ky;QtE1dox DK6!?v literal 0 HcmV?d00001 diff --git a/.doctrees/analysis/event_utils.doctree b/.doctrees/analysis/event_utils.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fef6dca146bf090d3c47fd1ca176d5a1add80e73 GIT binary patch literal 48860 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 P;dGPc7U71u66gO9bl$4i literal 0 HcmV?d00001 diff --git a/.doctrees/analysis/find_mpv.doctree b/.doctrees/analysis/find_mpv.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cac398f69e9c307289728c3780537741eae71c14 GIT binary patch literal 25450 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 literal 0 HcmV?d00001 diff --git a/.doctrees/analysis/landau.doctree b/.doctrees/analysis/landau.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b5cf2f7b17b58d806386d102e816594d3fbeb9f4 GIT binary patch literal 97189 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 y^d`t9_@_d`VSx9+isplxh6R(`vZ3{Qm(3d_DmH literal 0 HcmV?d00001 diff --git a/.doctrees/analysis/process_events.doctree b/.doctrees/analysis/process_events.doctree new file mode 100644 index 0000000000000000000000000000000000000000..04b732baa28ddf1354f7ac56dfe89cbaf8589519 GIT binary patch literal 142243 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 GWB(s+TYx

K-t5nNPx86P04cAcecBR@H7x{-< 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

P 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 W^$Z$jDD(`o5pkHnRUymfmHz~o@=Hzt literal 0 HcmV?d00001 diff --git a/.doctrees/analysis/signal_calibration.doctree b/.doctrees/analysis/signal_calibration.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cfb6597937a936919609fd389307b3db20f08d74 GIT binary patch literal 37487 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
%OZ(x2txk1 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 literal 0 HcmV?d00001 diff --git a/.doctrees/clusters.doctree b/.doctrees/clusters.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d73d5009ea16a6eddb466aa7d513365734084d10 GIT binary patch literal 141645 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 BT)O}O literal 0 HcmV?d00001 diff --git a/.doctrees/corsika.doctree b/.doctrees/corsika.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4ea12384db2be8a636925a1fe661ddb81afb5c8f GIT binary patch literal 15747 zcmd5@ON<=HdFEqZGu#K4q)15=#kORMOItguL=i%)ltc_=i}Xqxnw0Vs-PDd8 zuI`@cdF~2=32=6%s{ZQ#_5Jne|Nr{*U+n$XG5Jp{1s!g=do{x}UC(4eEaptF5w)2c z#@~#u{aO6ActuovV>j?3zrkX03?mxca!jAO@qKhI()iGFf?7Jkg&?X2p%tRhb9Iw7 zE!U#2*?fFjJYK75Z*wc?7=Ghz&1W6QXt4El?Ur@#&W*b_V?KL7<`psZ8rvg2#H{Lg zFD9163PBPRXH6O&iP_L-QCG~XVnzwS09n_hcs0vy#A3>^To!K}=jZuJQPDHa@sm-VpGvd` zX*H5IFgj4R&x+#SyK(2vE$i+V5_y-!T-K1tiFvO81M%CtC#?t*m#Gw?_(cIzxd(Kle# zy^OErl5Tr}lC8KoQ1Ye{Q2ts1g}*P?ReIF2ST5Ttch4?;jpv@#zV7)wX?C@W%SA^E zuqcEUwhq{(AP5HJs3B*Wiy{!Cv2D1K;XI8VE2tKmv<4zN;&s!D;FugyRLjEV>ma=v zXfH>W$*Otuft&VQAb#_iT8DSwwofx-*aeu*>7Gjcu+TB%Di^j8*cH)nK(nwlAz7 zs-M<(@(tBr!pJ`rF#_hsbNj`T1C8gSUp$ZfBlp=Q(C=B%mJjj+MBrqQq*E8MTH+zUOgUH823 zS`vfd3cp%R<-z7Z#&bY2k6H`Q6tsRzMNPH&eN{DxMdhon%Jor2^xo#2mH!=|724?j zG8rzH=ZE3W$HcVdnryGIr%RX`xWJ29oVk2U9-~&oR0mtjSUj98=g(_uw_H=(B5@(< zS}pbPnawaZpd)+!__1R-Z^@p$uwkHWZ-WIv=1hfMu4#lu<}RZLW_q(P(KE+BBfyH{ zE90CEl$6<)Ue{^At?RYU{yG+w0ICD3yk=Qb*f7x$u~?lWr*+KU~04&cIhrQ z`>xtS1#*K!yC#~qYvYuwDOgvI^oh)sYw_txwP=5yD6VeMxll=35li_6f$ms1QspNM z1(Aw4*E2}BLe?&f6tAtr)z-KERM|lJV6EhlvxNeYz*vUxj93Mz;oPr$@NELzA4hU&Wtchh%wrf$!2?N_yClr$N(e z!x3ZqKIp|PgbVjOxEwl3&l0C-r?l5`tcDfF2eNzD@LhbZ00~Jj}VHezEGmNA*o>PYVK?Wo1~#Jhvu_~a47}F zL(%5Ydxw~xB!DUH;8bS6J%)DP>e3ETCE6Lf%dmf^i;67qf_#?!BK~B{+#e3YPU>L# zn-QZmW~&-72X{spCevvNUgp`8WdZrf{{tSbW&ZxDS(-v0o|B+TX$t z!l?b_ey!M|EcI|)!0300cA$k;>^IOq9zws3kz*m$wrEbes!`zl8)_IEoVJJIc85OR z#K)%X6M1Q^Qjt}esSgI{VEMlU@i4Z_7$m9>B$fSD{89c=!d-1Lw@{Fqlq^TvN8o0# zEqekhZTb}2Dv;>!$IwGJ+K4LA!z5@U?Gf6D(Wu^yIByULT6Ft|>p)#Ovcl34gybhSC0*@=VBquS4-7}brP@j=vd$I z+HKF(&WBOq7S<-F^ld2V%q*o)!8-)S}uMf4!Bp7^dgn@=&@OMFaR17{^ z!eB0L8FRRRv43p@!)447)vBZ#jybH&lQ@Bb*`#DSvhIVaLoJON+^R*vc-l^2;r$<(2Mj>6Nh_+Xrl4BZZg1 zrdk2E`6A;5yuCZrQj_5Aoe^dmf;R!uqvGvS32$8zmm#+d^M7>&&t=FF)vlx(4!P%# z;2H{lN17uCgyN&CBFXs8>EM3rc05-^fp2Z7NUii#lg{CuZM7c?0zWmk4i z>~r5dCM=(slz~17{Rvs2gizHAgkF&TT9&2&)}Icwh1!Q8>CeZ|Pd93bD$&m* zs3olqLhVa~Ktr#Qn7@U52gA(3Nx0RTNLZm{6l_ZG?1$WQ`))@EUb3bW_W|GX$$sEd ztpFb~Mu@2b*3J{jCvsDB7BdYyDGb4y2GXNqt$azE%36lj1(Rw+zl3@N+g~HETpGFV0nEISjr)>e55O22gteg z(ifjgkkl7FpP%4KeUS7gr0LQ!rdoldGi8nosM;E8s7Y3^`y;G21XVUjkBX`%ODk9( zxyuN96h81rBRDT3jHq6hRKpRr(tFMu5p3Tqc3#k*t3-i_hvgl^iR5ym$&Mto5~*S8v`1J=(vp(_QmH)$y2pnW(FikH+XjaK!fsiNKa4=1`Bwx4~oNOTF1b+RbLB zwzV`f;C;L;zmTd@<(_13=cw~Ds#9IbtBWmNz1fLr*s>ayUtm(RN=aMmx@V!D%Zgyo ziIxT_Q?8}EQEGcs5%yV2seeKBCvoBZn2CARTR0KDna9zA>Q3xOr|_ooG5UC%J~aAx zf<8V=A5YQ83VnPIA56@(jXjffLLPtV|L_m#3`h~CqLfWB)pEQ#k`rdQWtu2zc_0?j zhoub%V$O})b>wa$WBZt>%3_7UbDe!qRZ$z0n}>qY0v?!VL4O7otm0?yu|O=PzOcHB zl7S8mBu3BX)t;kSdff~K4LOR)+fvWY6VQuog~E_t%)ng>6P-=Ii+B5QIsQ6j^_5V*J*YrK4uD9WdizCX7gA^}0x&zm{{i%d`7Ym-BrMrM^4Fr*gdl+sHY zp}u1U7H&ytF5R>OdO;6CQZ8o|Q~(tqPuPhS;_9oEq)5lq$%kuXSx>%iN=J3&J{tTM3C z93VxK?tyBa-vXi@qLGpTjMS0phw{J>=9okK>Xm1H1NvO_n~k37sU@F2OYo+%5xML( z^J^9hoAMb52x~lSJ9t7tTv%GMJ1I}xMy4IZ;$;HC``~~x)IA-D zhZ-2Qtuv(YIXaTRDeg+Hm(w~u_^Q)PV%mW?$=sb7i;tK~q6y#&Pek@G>KWm8NuHh* zZW&B<6@SWT&M)(M{v5x?U*gvzTpbk0B=wh6wwV=X^2>z+NB&%%d&pmkh=r!2kp~qj z_C!hOEHx(ISL_W02KyE*q3`l{_>cGx`N#Zc_J3l}X8(ddZc_h?_=rS>=qP3^v-PudpmC#4-~Fw7TEp%@LqBa>%|_8^xvP+(XqGFbhEZ$X)p9pda;IFe$GrS~wo!D- zR?W|D_L#k9-(9U?bHMF!%1*@yJaRW4z4i7xZa#KIyRl*wPueX?iG=G;7&9cnlIL%4 z37LB9IwWvf<`#FL;EQaob$dNYkGtzC<(knt-kj9kLEUj0<;kW44N0T5<&sU(_Z2I; zZQ~|B_tf;N_|#u&*439uy?C-=Oi`Mq+vn)h^r&TSGIy98%$??1bC)|YZdz4iywR-H zjK=tBt8sGN*6Xlr!%!a}j-^Q#5-MtXt)$t_$x%;Z?or!2&h9xJY;i=i_Hizzp4cvAy6eqd z=5=V<)zXB}>ju%A%pUjd6Q-ego~M;-nq!u2O*BhDInAmWqmDI-i*~x~m`G*>^cox{ zJ%x_@G~L$hx=}1om5q`p((ujFw2cPJ*K19^GA26M_H!$Pvgxh)ZMrtrrWYJ(I;Pc_ z&|agTDjN;$RaWhcUNO!{eG{K6S?#eLkI z!zgD1PffHzXeg-y&V6B$Y_cVi6R4(mAh{`q-Sv=hv<~#An%yB1gm)(X-3USCz)ZC= zVb^tHu6|@ePdH_?sE58CEqA}D#hvZ~xQV6#B5k!Mb&1-DHmwq zQ1ErcR~TfDs{8Y$_A^w~GdgiJMi)@K6;;1_t6S42j=LM&&IndTr6F zIl%#*9HA*qB0~*Q{b#ZubC&>Z7d2sS~*2>$tyFJP~9Jwbu;tE&9wHkE(E{A6t9puPCYRU5KRC|lsS`6Kh` za52v$BenUj7(qS9j*(>Z>@HmR=XbQsf9D?vI)TN$!jNRErv(uC=Tdh$3{#VY%W0A@ zS+41gS#3%HOSvXKV0KN@D4GvUl`Donrq7c_8FkVVN8(?&9|ZlHbivGqZJ``|a>EKr z7bW`DN7~FryvfLjc86Fi&<^Y$J2-a0SETa-lv?#p)x!KDpqBEG==|FwMZY{`#W2T0Hb_8?sr#pSni=Ks!_zne4vZ;q|P{W-Rp|6N0Wsonr-d96V+ z=T3=hn?znFOX^5!5ZlyaV5!Z0TAd~WNp3%dxa%g%Ck$>d`w zIY=h##lfl)$m3IyOyN$$_TzDMtSZ@q>Wg|vu$M*H<59mRx7rQ*_nUxLrf7a}mI>sq zeSPv1h_VIyG8Gdgkb!{kfxq99aoGwo=kf1mq`z{yQ&B! z@_eeu=GUXnMiV3U3^KKw@(`L}Zp5C>kk*Y8QVrVb{``e4k*$ox7~on)#AyT zVcVD|7fho(ZSrNdwj8EmEyT1+n5$jUHtkqUC1DQqRe@97-&Giom#y98ZrDfCxctMu zz8*cBY7l>(|4bQNcCy%K%2y^*eP!58!{saeye|yv#`fj^^%3Eewkrl5(UjfTcsER$I!s`r@N{rP!?Kjseyo+|h=s`)DqwO_xs@ z{I!ojCT$omyQ)=tyjZ>b@`IvFVF`F*{=N@)T7+_sGoG;7r*{V_hnU`-R+=g%Ih>hE zj@0W0-qOuzuNadM&{<}s&V!w*LwustQT~`Tt&@$6(S|Tc(zLEu5Jh;6*LeuPq_XR(1x4AD)CvR4!xUW~FiV|Pwwqm`|?d`7osx0*#U)vmf z_bp_~%6Cs?NE_fgWqtMy5-rMikK^Xq;=5RT&$C~miZI{BC5-Z2Oqu}SNnHS&Pm)?~ z`R-*Wu?jf{rjk)IymMA=1_QG#-h1y9)QeD?(95PbI=rRfWV@A}sY z+viq?_)e+Qp6_HMgYSev^77ptl5~M-bXgRaynL5Xadc*lSCRg-U)m+CVET&dsE~9_ zNXjo+B|QtT3CCWE!Jm_3z4ekLvJMm!rdzo&t^JDYwm=zOTyuRDnI4EDTQAd^>#dPY z;pLaqHCL)H$C~R=zb4n}#$-Lv2rIPeTJklDBhB>JcFG#8NX2l13(WY}hr}1_uAzGh zoEvS#NSooui=l=YYT1;(&OBQyuMeh*oG`uq17ylN+_*18+Q4ul)(i^$*mWqbqu~aB zkLi%M^X!wjF#60_Ug?9J21^eB1m8eu+YSpZqLo*JATM$4H7$wqolkq!Nz4d$|0qY$ z>gze_yD-e3DZ{8yMBY`@tNkf+2RW71zLeK$?5`+?Sbq&D(&_r^^`>5GShWJSJQ~=WDdbt@oeLg^KA1vOaMci>n>H6=6`GpQc5hB z!UD2>=&6raMv=E@?KTDaS!Lf+ii_QlVqc)|p*A-}CB7j_gc7P|85p&zO~G9OscWdo@($vUMl$69DXK3ANL}UE)SXqaHcb*m zsVz&~PA-GQJW)9H24AcEIHfGYUQfkDaq1v$E(@pHx#c{opo$1k#i+}Xs*0o%sie3- zs>39C?5MLXQpv0xBGo-q^8&k&$dG-yI9Dy3897mX^kU}Di6b=aU9+I;&gppaL59S;T z{fKH_U{BL!QCvDgm~gexsWB~|%DH>0pa~mRe=el_g^-e8vPyXtmQVNL)!Zv_@-fR! z)x=X4qKq)m$wkxdY|@t!w0je|StRV@+U%Mh;r`M!GU4c8BvTF?rTTK<=&c_unBaV z+y;wnIqEFAoOmQWRUTuKK!F)wxR*zHhK`CXkXZ0cNN9MOL%UKBX5LFAcBLLT>@SOU zl2xg4s#8_yy{b}0wRO@yBH1v$F_PY^Ca~?hNYDlLZn`XrOCGlMT3|WHLte@U^;tPL z>CmHi?TJznShv!(K{1!19q(?HN_UZYKN<1KOw9XuBvZIgrmp%@eL0x-PyCwPZa3CS zaPQZBb>e3=X(t(#DcIMjm?-!5OYf1;s%|I<`feKm()c%CfEDN8|40=%fq#FBOj-H& zxeRFo{2OZqg~{wO6xTWbexJ0RX9K<9U;51Xmp(}Tm2D47_!y;)oiqmd_X71YG?sxA zpDVA~2x;rr}o{I@uC1nUV-8|=ZW7ZZRgqhaAEYBc*5NjYUIGiTGDaU!lD_*YTgolPP)3tNeJ79{3l_}JonfK?N9qu2~UX3@a zqu4t_p%M_}W$+Y&p9KOY+~(ovD_}+ugKb1ZTtFUS&B9f$R5XWnEa~&=X4 zvpf!8y>Lc5rB|AUtxYwos*FiDHYj8E6)mfQIDT|U3gLQan;05Plu1D-@kIo*yQw^l zpk&$sUaGeiu-|Wp7nDrO_@D38_Q_Zl*~ukKC|XP! zPD|Q~&*AO8PlyDDgK_Ko;35lb16>xyCC_Nu8<=*wA@OR-qf zI~`N+jFC=8l#u7m&T>GGOQ{_a7j@GI)_eWD?y0U1tUW_V*Iu?RHKAOEiF>5_?qOe< z{Nrq82zH2y>C!m+HK`&ejI(b-rZmKnA-gCn$c-7&2FBU3W>A2_cA~h>$Jtksw)2eP z!ss&}XP>{cxdVf3*%(k|H|1_S*uIDc+XMoK2T6# z3FvJRD^X-werCKjU6?`C?ZA-1-4-i==-UHsU!{zlQF@xLy!z_1qdXjHXd5dL@4Kj!9c&Jlw9e)BLMueWMr8AFFmOcj9zHySt}d^C~MwTT=D=CXOhU9?uoP;N>W37 zjgmjAROXZR*QYsxQrVBVqhD`!%`sZj6+JtsqyR&+^3KfUi>gcscC_sxk-LPsKzB z@f*VO3l0z8R2X%A8$r?*$m0cB@dfhNrHY&|aDOc_rHw6u1NU1pqzw$*W6hv|ldVT_ zoe$iPkhb%zi3_98{6#8#!0>~|^OHUREFPk?ZHMVQ=tXMX13pfVOSdznrcvH=#;Z_* ze;5NI%*CVnotq8}+niRmQ3H?M`=HdaX(w5g;pXxhjy*^@#1J!}N~bG1FE87L5`M6t z=8aWD%Fj)f`-lcL`qIBR@ww?REBSi22P7X{4_%?x~9`9rOrj`&L^ zhW>mcQ@D4gGBnkfgP}j=*YpBtOupeM@Wwdeh29(E@Lkn2zv-(I&&+9rsLa5gqGC8R z2bkcGakC>P;K+}|tf`JT&z?c~ZkXxap|GO-@W!)9C+R~93W)qT$=sGc#%Y!3M5AeF zcwu#uUa<|WECQkLJW_9zt-MV=YlTo&@AIN&^c0;Na6C!{3DpC^$@;*S&(_;ZHj?F@fpR_T>F z@#m{l^8))CT^7ZqyZAE!=cqNYN4aU|hadlUawETX86N4V8kT`R7evv=6Pge5SAH7& z6VF3rGiL&ypGGp}03WI^2l)KRugSgpT!4??7*XsQ3^u-ip5QHoJPW=C`H@Fy&z`4Z zqR8_-+*}s&Bsxsc!DZ&+}VUg5_hDCz?~m>O5?R{-T+QAt8~bmxU&ZW0e3XI zAnq$&x{Ev4!ZC^zTDW%7I+Y)J4rCqp_;oA;dtMa9oqsP14)me= za-h!@eogK@=K_5K%@M_)4M8`P3qs+W3WM(S^~jGw$_DIpR7@0u_T%QVFeuFlvAqh# zM~6RQH8~EQL^6p(QcU2`L6W$$@sG^fAr9S5H7~HY(q&Oxx{E_E*Bz@`#&7X9tCMLl znt~7zTzu6D^T>X=PI(jGYy0ujbzFJMO0r7D0;77(>Zt_5NVGn z77az7i{Vh@u0o?Hd{y$Jkun4OEEN+)BNsQ9g+{54IM4nb+8nM>6FA9jY$}==_&oliTe2_(wED6l>P`t%D7r;)_C-jq64ClI9FsCjDn? zl&)-uiisl2FJOyhAxoT-&9jS9R}@f$S{z3%!DERdQY_%ee|inm!Td^Ql{U(WBZtT~ zIDAeQ96qN@M>rC$HoC8cUbxAvH>rXqgsC|qq`Xl`$uC)@JPSeL_8*n=KYp$=%O=Rg zv+<##!Vu?&i0jHJ@`xbqHh5eRO5equmv5pr&pV|oMKXnfBXwT~)t3WO-{9BOo#V}+ zW>}%Em$SZ3@dLWFt(VFkY=(-7;{8xW0dH&>zN;AEfi|L~?KO!PWyLpNKAI|W!sg2l zAXC=Omk(!18`yjqYX$|^>~<8_5fS2$!gFknw4G;P#)W_8n=k36WI5>tV1UMf9mSfeH?!Ro8O!?5?dDTkd34=kDs_5*<3CaP_h0I@3GON8YW6{U~ z^1M0D^Eb4rUTf+&BkY|cKj3eS$(v27@Xwv9K)YgMRk)q3?5!o>7t})iPiq)BJyf!> zwMWyH<*{Rl4o}&dRU4$hzBsu>C+Ib+&QI0*YOX}l$`sFZYKoqaDO3kY+8`vo)%S;_ z4MGWHmS2;g3+%t?vM4Tj#w?x_E+@3!=uL=Hp*#5HyjrG!wihSO%~UxFBbHh>W)ndv z+6`AWsKhw0Ne8zguinn;>5$DE1h7ej$u#Y|Fp?<@OQ~ZNsxQYFWrJUn+x>=GiQsyp zzC!s2D9RXYgo=p{PzIIf$YuE8Ed@l^v=Jh0Xc8-gf+W_9vODMGmy=}k>{eVDede4@ zA0#JB#es+el(sD=UruZ>#nA+$AU*`b-pCWpQ{{>wjg}{iGU^FW9NCk?og$8_`zeRu z>enh=6jv|#N$6Ovz61OGNudM##}49usYGX)l{%B1szbc3)KQ+1L{_pHK~};bImv34 z1YKZf=&~p-xyZ_|wBvoOhk|Q%nJFvNu?#9Lfw-J*5LZ+)OxuXoQ#Q5^x z5ueROW*?4Z3isPoGNbx(klB0un%r~Mcq>6^pY_$sPie{|>~Sh4N@<&yI-r<#FMXh( z>nm*pN~5=UfmVFx{ryyt6K3AuL8h!T?{8&D8<=^=nn7VX`$H7hIm`boX*!0KIjxfLT!J6hkdBu^K4eInwwnRxxiNTwXTPW9#B^(+0Fy7O*wNmH!QV*2ZS zz48;gvI)DBiir~YmKY@jv&TG92xhbqDUI6WMOtxczdKdr1ZqExOj)Vj&X6`h?XhN1 zkk0m_xX!74nzWr~AHs#vXHM<(K~lT)1~AGYO52v&UlOGDV%x>_tjU#6ebf^pJ1ZWf z9D?8_Ytqoi?X|6Dqlg8w5%+wDq8^L)DFvJXoNgcxbnBkhu-oHU4#LhI zTjdVQG)4(un^fOwh$GHo7re5LyBp-4O1WmVj=TM~;W!9YZMWPlhz!?s$`yMI(UNNp z-sQC1-aC2xWIwK*+lx5W_!-dFadQ)5yLn-7tp-XOC?Srr?da7yzN~LpmIG0Zsq#$A zT|M4%*9#F4MYwhn2?o8d%|->^h8(L{nAD3W=_y3%!TIsVY|Gs`g<^1u+z32;&>ga| z9EX=vg&A6EY(401w4Fw|Ucg%?3fpX>z#Za_Q8D=dA#)3jxx9=E4tOg5)c-bRXq2P+~)!_cd^Gl1qO z8l)1*SFXWk1*2B95N>)J(e|3o)acctb{U^{h94G;M#E|pOubgB7!9-liCRSPyiLOL zfl_*SDJ^$b?4O_>|E7lE~>pe8I*E=h+ld)~NRe zR4A2gir)f7JSqERS3$Si0A*}+4*nh!g${Yi3bc@Ix9)1W+vyW3!Fyd=A4c0yX(crI z`i6em|9Wh-yM_82Jf}7dN30;OrPI1)^JVVFx=}AsU_~4tL3DRif(Vp#cspdLuHjy2 zI!@i57$3)Nd#pa|m{x7fYD}X?ZKIT20HiE9MitHDpgH<+fArG*hhfi+jj3X!c)FvC ze~By}omVH9J!v$?%7!z=>i{5(n@+WY$_5bU2EC}{n5|>|?k@ObwcvM7Ux9*MCl8r( zH`}u{N1rLsPmNdb5B|HZVv*}_u&Y=)D7>YKUTwor=kf32YXNYod#2r0G>h8O(} zR^}!|?vu?rs@MqWoU#M^3mBM#_gF=G{ov!mRssq{FpeZESIKuPmM%KuIu1#28SI=d zp$E@G0@Fae$~kvi5vfiV48+B(6!cPwaF$bvt|F0yM87`@jE$+;w)`yM1T_ky#o<>S-fD;2k= zY$MEP>p^e}yA7Cv$V2cCt7?olnh06j7(Z<_PWoplV?Km~j>4NK&|-vdwP_8z3=-Zi z^O+Z@bAvaIoiXocn^r^LZS?06`tvCL*}n#VuB1PY)1NQUpX=7*&r$mG1N!r0`a{1o z&aR?A^!vYzek7RxRwAPxROG+f#OSA;`0sKs`tc4PIhav+VIGQ%QM@unp=cPzt6>z1 zfbFF}bTpXVLx1R~9;5Soj1J7OE9ehxR%h>}KeV}&(GFC;yN1yg9R5y^ZNO3%U-x6Q zILN07jOG$ecPQA|c=Hb-4yy<{50?;k2vcP`;b*}+1O)spI%jp#s`&kv-#kBZ(@#AR zDse#8$}?>Zl@EGsI4ywPwrE-26O2-T_(iKpc#a`K(W+ELKLY3X9rf-%1iyWI>vo_Q s78!wq=ms`AtfL!6;^rgyu0XQ#*A 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 C;&>?l literal 0 HcmV?d00001 diff --git a/.doctrees/corsika/generate_corsika_overview.doctree b/.doctrees/corsika/generate_corsika_overview.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ad3d6a4d4c672ad1ba6d54cc9e5ceb0505bdd256 GIT binary patch literal 28735 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 Jz;|KS{ulG#Ku-Vw literal 0 HcmV?d00001 diff --git a/.doctrees/corsika/particles.doctree b/.doctrees/corsika/particles.doctree new file mode 100644 index 0000000000000000000000000000000000000000..716832ca0b062af15aaccec4c563f05218372c74 GIT binary patch literal 10385 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 iB*vcR$)Z{M|rk literal 0 HcmV?d00001 diff --git a/.doctrees/corsika/qsub_corsika.doctree b/.doctrees/corsika/qsub_corsika.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1c5e24e5193c40a81fdc4d936d5dac5f705d8e6a GIT binary patch literal 42556 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 literal 0 HcmV?d00001 diff --git a/.doctrees/corsika/reader.doctree b/.doctrees/corsika/reader.doctree new file mode 100644 index 0000000000000000000000000000000000000000..120feee3a9310ed5df0350757c3b193403a6e096 GIT binary patch literal 43916 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�l5;Wo=leR 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 literal 0 HcmV?d00001 diff --git a/.doctrees/corsika/store_corsika_data.doctree b/.doctrees/corsika/store_corsika_data.doctree new file mode 100644 index 0000000000000000000000000000000000000000..568c0bdcccb96f690d482b9c25daeb21815c69a7 GIT binary patch literal 27265 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 Ont&4vW&+;|SpGi()Zg|1 literal 0 HcmV?d00001 diff --git a/.doctrees/corsika/units.doctree b/.doctrees/corsika/units.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5e81c553997dd03c2988f30051e1bb82766cac0a GIT binary patch literal 8938 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 E0jXrP=l}o! literal 0 HcmV?d00001 diff --git a/.doctrees/data.doctree b/.doctrees/data.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d246d9ec963b67e23aa13e7f67d0505141fad9e2 GIT binary patch literal 5464 zcmcgwOK&7e5%#OwZa>E};}O!1XM2Qp$1Aqodq68NBOc<0wT*-p#AQ^QU6tKgc2#AO znKf=7faS2OwUj5O_6SIv`3W2lLgLKNK;l2Z7nxPv)$Oszix8IDs*HTb7hgn1%cbW28=}+Fy8O~`+v2Q!UR57t?+m${8yOzWmF9*et*-d7Q ziid>(4y5;L9BI;VJxrL^5aPR)vDANUL`6Pp3|V-t_=v_7cHOWsb(LaIyd}29W3eg@ z?FW4!Q{GoamT}d;km|gzSq}UapMBtvebV|^X&n2>=}IvaOSTnf5uY@0^N@0RHgoM$kyt@4`+$zl)t}u$-~_K@exL34-JN@&p#tz#bfyqXnp8 z&*d6S!1z7yU!r9{{8+@gn}b7a%)6n?42v_}^@h>i5dbY}Kbd*PNsZQjJADSxkG~Q` z0#Kf=HZeIK>0v z>?fOuS6%$vepQ^~`*>P%wc@H_j)LDi*CLIJsiU^}a`T z|JrfO8P3JcIKxlfc6KGdENwf#>;a3CH{F^TssTHk=4Kk(HVzFEmUhkicgM9;Fsc-v z+I6(dWsXq3O6%J#wD}~56UL^za@`k9W%%rX%$|Xz-I=op?f~?;s8|kgJzzzq#@v+l z?YVK+Emx8XnK*O|YC)B=+f<>!qA@sfv1fC}q9*?Cl4blHuwFexG) z`RH5ZT_fq!$J`?kPuG9FyIf!2qbcio;;+s-%t9L;acyeDBmRCf)<@#kcW{Qk-G=(q z8H9B_jimR3f85;<#BaqbQ4YkHi{!qpRg>HsAjDs8J6e<6H2BZ3@$aYDEwcIDuV72u zpLZQTrhyc_2UkAM#JrU@?^PU7+`7a=x6ndY*{qU-Tt z3CWoZjpEHL^bOe*4rAvss)2n(p|yWK(tnP4==-j-5|=a ziMEzma*0`+NZ@A)A&7Ujj|~Cc`?$w}_1P|(i-xp&6;Qnkk*7 zWQQ{gABpGoslx%;P!IWi&jUs+cbWIx1;y*^bvF3sVt~~tF1gPpHedC;b*dm)zU^MD za(?l?eP|TRG?GzDS8^rCiff8&<`z_nuuuxP{1k?IqyO#Jm!ft48 zsGdP7wNDj?tBsKAW>neWUjG?O3Yfl5k8E2OCNB&E%pR`NF-L8{j8t^5QgGIWr8yc~ zN=k#HBFmbTcDav>+aCehR(6g7n^m(=30ga_T|hMn_2MWkGC$Ia`y(uqNy8hR;1bnr zpieMCrkR3VyOhD^0o;fxL5&69@)DkKCkZH<59+!I`&ARFLTO;P70;zILBd~hz`0^K z1xu#Q7G+6Dn4z61bUmnLTM-`?V{EreIS5e12wYw%BpsM6mEy$Mc;5S4yftfPV={jM5Lfg~(O*Jo1fIT5grn9xn7OEO9mh@9nN%cXoz) z_T%}Eg~|3F=>YC&0f-XlgzPF|*|R<#l zfk+(Hgb;1J%L*fdnaHlhpxaJVq_XL9CglYrejHHf|s$5J!SWTDAsJ4kRsJ7*K1dS+igP`4d-xvheda)VL=@Z?IZfa zCYmefn>?e{BA9#&F$|{i&C_MOPyPnxWMdF9iBn{+AKiOqcXOTxl+waWLkAd=`5bJ= z*~vBR*Mu>-KI!)%)~MHvklC?RV|dg7jdTaV$N;4Y%!Bj@$u7@(?|kr0;JK?t;llDH znJxcry*!0BqUlikK7e$EnryKSVoJ@nMb50cqG>Srw5PnZz zq9~jMA|8tbKk#=gkwpD%oiaGuFA8|I22c-N+c$kS2r-@n4nu*OJ%stZzX4?jA!eT! zIkupu9CvM0Vc-hvkzt&Tz=0|*+^0aHi{ZksI3?~Tl6hyOCzbOOl)-%z!GkYx*9ngD z;L09^7?+S*($kFH@X-YB3nt<%1WzX5oi93^ za{D+Gm}L-d5z$c~P&Bvq=cN9z24bu>nl`9fqIVw1*GcHV&%O;8Kl>2>wC#|XN+ufQ zI?UU|-OU{3p6g|9_7Uh23eg z&FQ~`63}0Xz{E=^sMO;;&`k+>f|G)s=};z90z2Wu1>tmbXKuw#y{nsae{Ox;56YDA z_JhT>svcxI2zeoLJ@6WLVknaY)Bp)^>8<~;lD~rCJ}Z9$_r5$hLGUE{CfSd$KLd0WPCrVa92t}Qq>6)o-_jGr< zs{J^C;E-r7O5~6Z5a13G5(h584a9*P2QC~z5f2F>UJ?=)5Z_Q$kd`6_0k~=W%f$8^_A?4SxYq&=Ribh z(qoyL0z{8{ft#=}doELJ1TMWmbn^8Jg7u^qh2?TS&l`NIWV6`cA`4iDW z7(|Y10R@j1I)N2LJv?1UIvK6R!ntegkT5zE{>9AT+=v}uC^NpUns!MNpH+>Vl3g_y zcp=Mn)2^eI94Qm8n@VtiD4z9PLDVhu0!Ii8;(b1JhURV2P2=jL>-6>#)+d-$El6iT zQyD+UFYy(A8=vKy>alGe4cT^*h9OI~529pmTR1T|pRno$NNy9!+n|(%uC1A1(?}-~ zAms9unY7EN)VvqE?6Af|!(M(n5a)M*TX*9BZv5Yi|1BZ{d`LWvdP~j4j+bQW-eKgX z0ei?Q@aX7+-g0!N?lF+srGoVY!-p=9wpVEhluXYtKAe)47cs0L+yQ^ge1Ny{nIQ zPL&0*=VN@6e-zT3F4zQIKW;3I&#PY%c4JN9K1)VcmszP`uGKxVb|9FY=f6}iuj9nt z^Oo1Qyil?vWYY4)QW`q@ju$xHfOV{ETrVaLRt9GEoX~Otp||cwuyL2p5qn;YsUQ&a zB{^FXEZJv?6(v@juzjeM0ZiBnDb(2NCroh7KDpG5qf=ov4=a z%?{(h>v=Le*3$=065_Q9V=)$+soP84IL){h0j*tJwyRH+PBLIJQ!C|4;tkRCxm;^! zLEDqi*bVjSyHnXt(HwTFFzPl*)M=+ZVw1nT#yw$l8^2)$(+Yb*>KZ$AS>H(m3DfL3 zuuanZP^(JJw@I7TpZw+$0?&dWjcH zy#>h)c1#WdhdF)dFwPbdhUw5<*;&%4Z&uJDF2m|BU96(WI%a!Hgf5TYK^ z-9n+p&Q8Jkt8eSJHQ)8x%@e*{BfP0rb3bW!aYgLayrsJ3F6*t)LGD4v&KYrF_t(WF zSJ*rp20H>K0_V1ft3_WL+U0yVcR8yy46BRs>b1xkI(ypQ3bqR#9Y7ek#-RBy56kIB zsk9Eb1CzzC7a*#P$eOfuaTdf@KX3+>WIp?L?phPfPi|f?WdI3Z^u01Zc>fqNSnW2E zQfSvCkWwhWm?RYbBmQG@i-iQ%YZB-bsN7W8*${AVi2T*3(-=;O*;R;>2f9-1x3;X7 z7a}&J(DbY*Z!1#|mABOR`>iwKtZaO|`tmyvuTDl&$Ffsu4#`=sW{*WqHH8ceGq&)M zcgQpuNv=LPfdMVt5CfQ-c;s4=vMsGVEsC%7b`XzFV~QLQk?C0iF>xLOgR=oEPyLV6 z?V_cYK~x(qL1Us;2{9e4=Tq>lFVBgOG}tImD!jB}&6p8LSaxlPsZLS3S$F?EiNwK&gwR7XBB`A9HQN2>O| z6JV1OvehjjjpHbhwir5zd?Agf6mpD9z<<1s)#+h$Zi456AZbvr9+!P@y(JNnAac4ShcDd@7s%z zUe_vcMG37|C%EU6$nYtR*KrOm&ph`=evah8LW)2WqEM9^1+SFpfOxOVS2tSJ_?;U$)B@zLlVty8`qZAS z{vAebQ#wP!97e_KS~1+FGT9MQ=#_l3_+AG@E)h`zoeQI4tbn7P=sdxsM6{z-nEzh$ zkh02xLjFHRQ2e**0jdVvY>af*Suv6+F^ntT8M*U6j0Suy{^w!rTq*N8+a{|n1NT)0y(XOT=;h5kH>FW8Lt02 zHaA|`XL$Adc#NRv`xrU9Jmm)f;|+gEoBW&}Aw7Ome7=U@8AhlK@|<6bMl3hh~AwytxI` zg+8`HiICMMud7vRiiPRWKBU@2c3rJeHzT&GJcNY;8(uOaEMR)XKJX;Bi}n-F%NOMR zs9m*^FdeT2D8_@GGir%Dfwc3_d9}_CJ#Z0mKq{)yd6#w50ghXvdNGyJu`hFm7->Qr zJw_xEeqIQk*(~fuRBT6plgfVkBW)dI-8MRDvm}WUo1@MZF!Yuhgeu}MbXGfL2JZDfVo7ksa|?w)EV$;RGP0{7HRD0uR^4Hs|z+R(6tpH53b$x{-|n7@*Fho*xNj*H>yS=}CLv6CPz9*voc3LG2t6l4H40 zmHHVP0S8`{l<$d}ROEkCbJt92cg2P_;w z5d&|CPQ%sn_o}s+#WuAcV5L3HFmz;MXghEx(@^i_QpRFudmF=|6CX*AI(3u`U{Mzd zQX>FJTQU?=voFxIaDLo#m^WrF!&Y{h{0T1vG{hbRUQvDU364`l9bRDTu zl_Htqm0|5>k0TfEAr&_E1}6?|U`ELM6mUi& z^$`OH`-U11yHQYTx(2=V#9#^C9NDp1oT?XH7}*~eNg^}2g^MTm%4cw&!#DP#l-kd@ zJbO_PK!>0$xE&WB&&OYZgkQ{_hMgmchR1-y2&lF>uym0l!^`Ec*3RX;_XcYikV9K? N$&2R>&xCrN{{kHy`>g-~ literal 0 HcmV?d00001 diff --git a/.doctrees/data/update_local_data.doctree b/.doctrees/data/update_local_data.doctree new file mode 100644 index 0000000000000000000000000000000000000000..74f6add94b65366252586b28f2e2ec5e57082eed GIT binary patch literal 21847 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 Lg2ZeJkh%8%-|gux literal 0 HcmV?d00001 diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..d26aada9f975f8de1073ade5ef31e05192134424 GIT binary patch literal 659631 zcmdRX378yJwSN*4Ci}iGWRgIbY(0Sx_AMkKgsf!3B8Y8Icg=Kndb)>RvMC}wK^R(% zGKhlu#2xj?)2H&>_g!&)Dt~z*sQ6F>QE@}@f6l$N->U9&>h?^H$@fjydg?5{d(OG% z-n#Yjad(a#HF^~OtIw?TXLH5F38Q#0S1uL%jAC`LKK-Ivu8`U4I&{b2sv8HdAMB_f zm+J2y++ClTDW$7r!^q^ygZ0@ajaoHVNF@7H)odZxJy;)~?5dXc!rtH=aO3FC!TQ*2 zsm~a!A78E&iw4{{_E4#O04}Tm(QK}43}&a+j|0kZNwOPRz+0+)g~9rSg!#bAV0CaG zoUfGA`0VV2j_kzjr0nGEl$FLB2}xF1T*e~eIQRhb$HOIk1wQ(y|q*?2sFkh4%R0XO6gR=NCI0(tKKH} zD}$-}v`VQ~P8&(1m@Z{A&LAP!FR>L@esSr*0i!RqwtZ8%XtZaH_MNFzb!~g9m}%c%>TBOoD&_LPn?obpS#LXN zluL>r)+g43U}d9Vq$*&oQ|seEMX4i$^-*w}*i82HRY8XNp#ECfNLo5d_T&l% zvOHLy`;v00RJ}g&66@UcF99Q5KUiE-Eb4BHNea!0BVC%^l zqbF4>RFmaW!9Y!7Fzbh6Zq006vH z%Q-fnGb*+IeqmetAkdj9I5&?Zt4I2U zZsvjpg{=YneSN58kQq#i4+hI7js9Gr)C*4$djJ}_H&f^d-3r(}*;7ctgKq_8fc8@5 zBLEkv&N2M}@9DCMx|{_FI=L@Z?1%PWN!H2*AV0pCtM=#82aX^ab32*qEtbHs0WY(? zhrlqs08cn^e6iMt-s-mcEV-4e7-`r_W{iGto;ya@rHK=lsu}f~X zpM)ro?GCJTajrKZ4vnj(y3wlR_v5cPG!fj8v922&6nNi>J9CvPs2$JL>Pz}khjV@K zaBxk<6t;zAAypB$eR%f?j z^bgiYC*Zl&LL~{#CD(%rn}mC50BE^dK~vQ#NWK@t5zwlDNvhY?0MDX{xOS5%Qw_&m zw*`cp?LK8T-ilDz1k2q>M?WT?0*`hyo7}ux{_ejLeY%J`;PAjM5bMCe;2wl8FhDgD zcHdV=0z$+Ah;cTgp!8@Q~8U3|x6iN8YZ5NIgA$C-KqBst%9^Kzq+yN*%$C9qb zV_ur8g2l3H>XXD(mg`^5@#0g(t?;Zuu9Agdo4u{i5i4dprBE&R7JC_0Lu8x=T6h!5Ouqqs3(R)_9n5TTrE@4L z#UJzek3uLA=PLb$T-7x1ZRRm-SV@^(*faz@np5FBPVb%G&+lzOVX*$pz@p zI#xp$ep`K}wGTn5WOmYStuM5XI_<8SD#KCX$LCq6Mf0{&cZ z(*rI*o`g;-U_^Kk$l?~sgV=E8Rv&Z%z;6_4eMQjQ0(r1n>Ms}vjRK~4sA233?yk?4 zCso%ZkGo>bm?AjbS+2wA-5~E0dAvLfoiiyvG}^iHkjop|(Q$@6C6Yrk@kbbq?=F=N zz(GLf1Yo{YE|(5f08^99%SBkvkB91k#fAt)?i|Kck35dm08DbHW1EDe09u`s5-)NN zTG88WKG3Osljsvd1BbpD6bjOSD-dt0>pb*|@i_~eLuKQ-8m9I#potr1xX;SI6{Od$ zqt#rW0X}YU#|iGESf;=fZ^ttg0_| zt|Ct6NC3~4X) zY^zla+0)X=TqX%c36VMiX@LGr%(WnF`3_G{CuOE}z&HXx&d9z^8zei>!9#AvRtfyt zSZMo@VYXpJD4?^PfLU;^h*<*kZXw`8e-P5ZDKZNLFhM5`QkKcpY#EZqq$qfSuUMJ} zj5O{=&P(_A%k)X@w9gRd{L;{fFMRb4&mN>zQ!4 zBcD2$lF)2Qb^%n3a{aEpa(60y0LoRBED&1Oe*{W)#iYnqi`PMD!Ol`f)Gf?%&u#S+ z&5N1|u-v@P4Efk9p*!t*Gz{@(PMIH=!r*q^$w^{vgJ)>;&K~LR0KF_&U7HKTE2{F+* z)t4(mbT9Wgb%wdlNpT-!k0O@Tr*+mU<<9P0u``>)it}LI^$09%VCBNRc7}bebppza z4q;Fx)YJ}`j)-5MlnFE9q3VK-zuS9av{z&LwJ{n8rcf8rmMTSqOY!VOgwB_8Fou z1MM7ARfy(CWak5wWL_Z&*ySCle)Q!IL)>t#uqv3YjC7H8HwcfIhrX#p0Xj_9={`)W zbA1?egijJI!#x6_Fwg);>l2(i>nB<_B7((vXr*>sNXi^?5JnxK(BwP?FNWGv4s0XB z`h1m&S%<2R6AcA2A?p&edI;qkNNvjCN*7vZaz&_uRTAOFxR&O&CXMF0}w^=97%bsg(p5ttupS{33dUCeI z+Po;c+1lKa-D+)av$?qBR_oYyd+SnrYe#mcb$XZm_}%u_p6p&B{bkvG)@5DU{nqB? z*(=1^t9FZ@7udI5oxR4o=7sj7uFbwkT$Z$1d$GNhvajmSrmb67?apolwPdn}`0cT; z?!8qU$YyimH=jKqehc>V`*w`Bh!nFWYxA&8;D~+YQTy0SY!+Ucz23UzW%j`v>)_k7 z?=Uy>ZwBz^-vWOGsds1JV_kFKj^nJ&_uA6G&q2rgEs?YTv162V&fi{FoBKaRgvRZY}g>x(T<-!4YH+QA`+E~VL1 z#Ov*niAb)oT1&Vq`w5BZPi8+Q9{%asewf`Tet#tC z|5*M!B(ME{^5-Y=mWQ+dD=z(M_7U;>GkNyW>|{AyZ4F(&JhyK4f0@b8j z2J>U_%5m^V>`lbIN!H$E+?!(UO@)oy@G7fJfq;e1QU>}>;^t{^fpAUv>98eyQGNz& zPZ?0 zQ=xY)ZdryGEw^r2fqN%fdne)EN^9?A-0QIRR^i@iYi|u~>=-QwuEot0#O6BO949st zuqkEkgsuE~_#=*=3LC4$)&|(Jd%)tzX>dg9W23!wI&9_7fIs4jv+d*OSX=d3706v6 zMaF8ST{f02Dt|8CeV%pqCfvKo+S`nKTdcjUup#-q7>{qWj$Z;BlBezV6_?@_JMfQ; z{`sA_y~}lAH*8z*%wJ5s=$y_I)gZ~zZmk`~-MeeTPOt~2#HPDXC_TFih}pJ1PX zTqa)<6ka|CbEtej?BuV*KjwilZdY6fs<6G=JnQZPL6-%J4H+2ehv;Fs`gL-0gGH?7 zx;KB&y>ke5ZnG{s>^kG_d{v;%C;Qrvu1WsfohH#yh5;x0+%#KGDEEkHGR0!7{SxRl z3|d4MITu%gmU`_--kuYqm5p&i2$uXUY$9d6&@IxvXa zce)O|9=Gpu9e4w7ztMHzZrHY;aF2WEO|WA%j9RU`K1EjI#h@5;!l4W~%X35)ZE)1$ zcqkZS$7y$Vb$zNip~(v+POI43H5e)htfp$i40rZ^`;_6n`;Y4*bU zct~Vz?NFIC8FU_KL0lY%Sl zTd}BzRfOp-%AMGHq1#}Qhk_>d>1Vnx=}p1NA{<=gIan@1MG6XdFerk<`}JkEgtCSV z!YN#h!?`(d?Kngd{7$p)fgVdHRda(&APxrKs`%)+idHe|;|T#bEcg`7f~5(!88+!2 zNXwFa{ZNTnXh{kF9CT*xnKvx8P72coT`|usKb9Dcau3Y0gs`I+U21iPMbf3FwgXU% z1Um?w(&go@nRN8Is+FUXH=llGsnKg)wJM- zHk1Mel(68^p9>;wx+2$<&H8wY7=Xw)oWjyEkeX+SVkymPxX0?#MR5*lZCGg$k^Xvc zIc-?o6Z1wV>@8JthxfuROdPFGw#bWFdN;%5&-`B?1IYgq{y^=zKj$2O);>PjLbG%7 zA^Rj~*`-J4ir?B-Ofs2v&V9>1Hy#1xocM};q778*9RIz2e6pn!=j31QlM_Uz)j9J! z`wUDmbR3y;!8hy+CYiu+&OK?Ln`~L!Ir)rzay;V3Iq{TzVzM<4*E#uT`=mQ0IOl(8 zpPyu6$2s>$``iT4jGZ$-v(HSiUvJI&?E#ih3($i8k}n!n&UKpNm#2|~`rU-Mo(-F2~ix*+)n?^W1D{EpZm`D5?J zi^H6xbH^jzJEpm!t#i?ry%$ZkoSk#UkH?oT1tN$=!b z_q6xAS>DLxQr{1}7tU4VutW6Q-fO41f`fC>&#jAGslY@TFP)2iWL=c+MI1nqCXxm# z5pgd3oA<&cp}B-}%Y)uqrr2)Zx#TzAOQyT?2cOx^Z(C# zey$qcoNIsOy>@~~37pdpTc@pzZ;lduor`~IU7Y_n)b<=DFLW;bs&%O^^BIq^)Vb^@ z)@AttqzKcqWy0iK@ju=xCd%~1Isd=j^Rs%rnT&JcPrVnmLE`M3{Ji(%G*>?0T=ax> zQ9!;u5neZd(CS?L3+v+in^Cgym^eCTzwbGlza1_SPUzR3ccJJUHWlL zIFSl&2}f}dw}b~cf?J}kzZADbOTGcOM5Db4w?vD)1-C?lyA8KQn|c*)iMDeLw?r$s z1Ghvocs*_j%)b%01hC(PTLQIj#Vvu*x8s(;o86YRH| ztiy760j^)*qvgyOKsILi&f-+Q!5w4jb9~3;c>dsyvC8xDZ4|h{&sL?Hfy3FoJ1(r% zXPX1`I1UThteoo#Qx0Z&j>Eh@c=Z5YiUB3ybYiUPcEE5x^gVI*i20gCeGJSIs810S zo}mMtk}oKY#o=q{`r&XgOjE%ZLtq*?DD$@Z9PkIJ127F9X2>LA5(~bj0V)5j^~wG4 z5(j!;G4zj9PUXBvI9y3cd2y~Dya+ZGuXN3$fwAy%Pug|wO6y+CwlQOX`B#aYQSA`~ zz^im(1s5sdeI80vb4AY-)hvh%H;B4g@-S8~P*FI43DRKi(HYjPrixMM!P%iWVRvFS z1#k0+S$jAEY_1sZhvXclzF?OX2H#)`K?cO1<$m`-miTZCT-2+w$7OfHY-MYl4U7go zy6g&g7YE;LfMi0x+E4>8UMPqWXtb4Zl>==(C(KRdR~;|h%s|^q4=oUT=xPSqlJggd zJ#;q%Z8xNsh&^;U18vVvTPpU@?F_VyAGcEMq3aoFJNi+%hwf*fZNco5#W{3A18r~0 ztrC0ah6dUOj;;}V=!yo~#{O-s*h6`-wBe9=f)H zw#l2%6np622HFyL$~|;(18v*yKU4+CFjMTyYLv z-ay-)hvXiHoPoAuzmt3D1P9vMr=KUTL`OK#mOCu>FeDAM-FN*3;v9yhfwp&iOzvT5 z8fd%jt8x#+(?Hv!&&xdwQ3Gw|>n;@cVVD|d+mhZS_ApcpwB2#9+{17MDEOY-!;m%5 z_O_?x9=c+%?dvWQ_n|u;Xj^^vX0eAZd7y3O!YyJC-SR-&O>4G^J#@_jZ5-xrbqKpzY(IlzZsf2ikt|Te*ks zeW2|XM|X<*(8a@jZH|MPMW zL+(J^w*T9Y=W3YD;S^jb4B}gIb?CMi3ec`)nQW3dQ3Gb^R1nvW1Np-@^kP1u*uT(ps@X;wf_38B)z9M529IiBcSzhj0eoPknt-nDVEsfl>%N|Mr_2HIaVy-H z*?MyKq4BC+Jf^$?!~91O*sc2dOwUuH>H`lsCekgm#~ROBs~+a+h1=aVBMPX%hI@O}+2;?cOHN~h9*VRNv)uT{^5cb9NVzSJGYh(@|o zYZJ&zu=U-g2D~annJoszF_BQC3|H!CD4=XVg@XihzM&BPY+id6ug~MuT+yT&%Vd@ph5j%}MfStOL$HeryIQUP zqT)^tw4%R=iC2av4VUrM;SHAJ4W3G;Yuaoh#}(Y%{n4B6WsZrm#86zEBD`Te`tsIi9ggTyMqS}ggx*FLrQFz6J zOWm!_9QW{M<(}KH!;ZHt3A)W3RuSzI`|^09C$L-eoiPx!v6hWIfx@D1{<=E^$3&?V zISNsr#~oUP!pC=z@geXc$3z{MrnqCG(%V2Jk5jQk@(eBsQ(^f8sU(7I8aB!#?!;0H z-WiAnbGQi=6?oo_7Oc`x2n~V8gAv+iz>Cclc*8|_kySyO2^cOzSzF$L9GadXR>Dx@ zi-SayqkF={SR+%e6Z31_UH4;R2m!A<$xTmOrw;F-nu45Mz|HC~qTmXvbNI9kyzo+z z$z`ao3}7Ib`w$;;K98MzrBw9#+90hQ69Zx>?TC%i9=36c3|jbHo-%MS04h*9mCqQ+EQO2SNiGf1zpv;*B#CEgSHA{`I}>67#VMv>-JpMyem`#Ge3c)jB4(PocM``f#kl5f!R2x-kJQ=zBabnJkz&H*8HF#7g!}h!wv;^TfIJkt* zVY*IO&JhOG1^kz}weJ?joPZ<5!BMM*iuUkL(XW;426P1K1eWTa8ia>!-@G8fKaR5@ z|DIx>`!1X$ges>QCRo5@Vtxfa#)BmHW8Bk?^dE;Kg!nj*U$iEGBKaY4Z8#E%PrZ;A ztubR2gKToyS)pxix@3{4)L>*zQ1J9y#QauIx^_%V9zt&CyJ0S>HaIMZG>(aBMR<*; zi0H2-cwGq&vf?eCWZHj=IaN$N1IJyWlzXZ(FSvhb75(R5tm@v38)jK=}!}VvK*IqiE>2e73 zy{+I9F#)WWC9bY&1xZIxcKvY7VTJ%M2L!cL zfmLRr=^Zg?d4K6@o-E!03z&RS>lZ7nbc()=m?hB(s}moR-I*4{bZCapVWt-JU~p~d z%wYZ}I8E`V@CRp<)Th9zfw&w}s&FWEqyq2L)#oO0U0__F5GSI+GDEo1ZPvgg%;w8w z1@VM>a(o{wLxqJB^AQijBVZP_oX{ekb-b9sCMNcY$zo!vo1Au1#HDcHB_MGH%yuys zaGy|49jb`cC-L3F@#!oqvkr?!;Y78cjYabN0d+WEX37?LFsuzO-`#`BGPnSI{dk;H z2(K{Ze-0N{x?!a}*CJFnz3{l4SYZmL)Z=^PzyYjGHBP=+2wUS}^M8jwz;ym;_{I5k&%iIx`h)y=R{s21{`^(^)bh{4uf>v>-rIzw%is;g zBkk@!X*<02)z_YCM@!=DK@Uq4#_6$y6aVsIEOkgVwReeSMB5>bc^Lx_cgQe`?H-Qi z3XbHRZI|S__HNp@IrM@F?P4)7d?QpML@HX+Fd{2j%$W|8O0u?MpXbF$TtjZ_rY?}L zY?x3u>ecibO-+m0+l_fz8qAYDJ;S4;Gd20a862UOmpba$X21smaG|$?(23bn4yFpQ zGNOc~tm$|d+p5VJ&M9reSlh0>SG4!!s-EZW(|j(@UTyN+Sv$qsOzrL(numv^CJ$oj zeq)d<-YehJM4ttqHCtGFfFTN+%;5BmCJG5*29hXzh1A`ok7zQ3lQEhwGtJw4ywATy z^Z7VOxykbvZ82XCvf4~o9Jxc27xCgoW0XwV58VP-BvZW4?6$*OHJ^=B0-ESyl7-1l zd$)Tq@E@Ab#)0Z4&z^2Q+nQGEVc_GM42ZXj8Y_OvX7}sCo~M6B^XcM^rp8a7wRz9J zuI)QE0Rrt67(6`uK$8a?rEg+_sTL0x;fr71R`{sq<8kc2$>Ueb49a4{T7p4jFJW4F zN|P<|u2f^otlA7&eHC+ycAF(|-xix;oIR(>nRs`rF=sO@9`@R+E4UrT_~Z35O!3ZG zV-99p9F&UfUC_1bgOy~xv3-sv6F3o}32r)|;lle*)gY6!hcdQYlQEp<(1bC&J?)bV zYPgNlsrh)E9ns|R3&A3g6I&+2UPybY(tgR7i#K{a%ek7Yh<64X<7A4(#N|*>^*WaA znoq~c2u&2R>~j3Dgw<7)(+6-*ysIU8XC8fAp~;bWbF#5MPS|1&)wVlJw1=^i)?^3g zMKn>+nL3&T{@r9};jLzJOOCq&* z$xm3o*Ug|r;%4D`O%`zcy$K7`w#v0m+Rd?M&+`W~pD$i%ZVa83R~iLasM~0-mfEeg z!XA718!O(`DwlcKx=WKSe1WZrS|)FIEnDJw_&YQoj_=Dgd-#q`U7I&;*{ZhX4{AOf zU(aju@R_nP$kvfc<4Qap`9H160=^U2goQ=Ba|g0Uj}wC1ds68fEE0~d$GO|bH#B*{ z5%MOy%(Ot+zR&ssori@VYqEeN@J(1))n(_<*wKb%w!yRE>JKn+#wr&D^tykk$(eXN zzH#H7=i&^L}L)X}2aX zs}5*^CZ{-$pouZJ1ab>Z2rY)?90trha5+Rb4mM~qit`zoXm|0>(xG)?6#!sNtda($W{7q8#ZWIZ z7iuyi)*orCwHf;{4|A^&=26EkO%CuS?vMA`Dnu2>Hy|&1tCDSHA$kqas-xy?DMjAqb6%&t(V5=ULL@jqc`-y zUY1_1$r8>vX`-#u_IsgZ+jFzEd{Q&L-J{8*SP!SM-WG_GF?c0&6_}9L_#RD8aDj#< z>e?8lE@v`EGktwTlS`cD(S*zK`>j=2-Ld5JnhzGsLNzwj{LSJ+#ZA2CxAhpQ!AI;$ z@X=mePuiIvAja+G&^iu=%LS`&3|cN&h2yqz!73arl?ztkIHg>$3I_(|f>k(FCl{>3 z0W-N^6^>TP1*>qVNG@1~gEn%(DjYJA3s&I(hFtm!hZE$|Us%_dOMhXFT`v8Fm2SDP z6&9W4!d6)4l?z*8T~#h@h4oFjuoV^=<-%52)sqWbVS!C9Y=!kLxv&-1n&hHlSmTjP zTw!@dE^&qR3%Sr3mJ#GaW7wgW3yonPS}rt(9a_2281^pZLSxv;lM9Vu7fUWQhCLm* z&=~eCaIBbd_?EE%ZlnkuCHGa*-`;b8>+*Yy@(FGeltxK7tJ2{jrxM zk~2jnb=P3I75TAGdwz*;mWG&8G66panuLjyeIb|Og45!|qX{U3ne$d)l~!243ce)@ zIdw{`D;;vPWM+cB22|K(V!}w^q!u}4;rAdYZ*B-q0g@k%g4Lgn2L@{8oLrq2X2pn) z1B&@9*^TBTlHZ|HpTbu6TU2V4c__cJN&HHX$Uh1{LGxoe@{fm{$v+u(;+e1$LUr?Z zi4WCRAnk;%bglxO9kD*m*`Bm&27L5-NVHg=zXG~1HSlHYa>aGXfVDu*prYQXz=WoH zCq*UkOHiUT@_0ca|7$n^lbhtkF9)3FG$wOWlbB?bfEySyX5>@;0&%Y12GvlpEc&&B z9r(F7dj%ZV8s)dZhv3|cfZH$NSg*puD*n5}mWKALGpI!K85B|9f|8&70_#{1i8Bl(}{L+8I zKbTjSl3x(tT_20DcEJjD$7gdHSOg24&=iva^8hUUCqE?#lN8~LBe zBA^2saPhF-oiVs$eEoQHdSLyu&MXv|JLRn(|LF#Qgb83j zv)hmKa1ls2P4F=w7ReDH7uFQSFc%x@VLPI_SnhPjmjOar;cUN-KBP&=dI>x$k}92$ zby$!Xo{%LHk2drBn2y&Cm_xb(3yx)&L5fXTt__Ue+=YR`WT~eICM#DuR(V3)+t^w+ z1JqmLM%g;v%vNS_uAvyNe&GtMWhU%a>6*oqXez84P4DJ2JF9X4KZ`0$?Mdl_25&Xh z-~i$-Hf589)4~S@iO{APp(Wl66oWD*g>*M6FYz8j+G?Oppf?cTiAgM*b5wEe{jAi;~&R2*#A z!GTw11r+Uku8E*n!ltZvj)j86@I{%9Cg|C|JGpb~?&OyJ9_(}hmzuF=FI!hs>}=D+ zjw7*xoLzjLiO9K>O*wYtoZJ{W;>EN~)t98aTpu{svsFa}&K51;m;$Sr%27VUMARH& zQ;r=q=QT!6#!6$%uLt7FEbw+8d@3CVfPGl{4}C1Xm#si5maf*qQbRSU2zxhQ3?jnb z!KNHL!Y-g9%zT~D+XeSw?EmRw>_==BQZe?z7GW$<5h}`lz!!vwvhT7f$BwcKwNU0S z^t4UX&Zou#iJ{5GuN_L5RaBgf=1W4v+4KK;INPp=vn0HT9TYoH(+Ausd@}`(VyczJ zo*@OCtr8V^3BE`~fN^Pm z#+K4Y-HX_Yq(;+jE!2_Jp(5@YzBok0UB#vxg1897V$R5#ER#hb5ntVXS;p>z1SUql z4DoJ#Oy9*e6&2IxH^FohQB}MS@>wO~^|fru3SNhMgk}~jE77p`@D+V*e37jdDmK

my(XTN_lLaB>p_STd=$zl6^d(e_)}ltXMEAvJZfTRF`r0tqL(t+7X_ zO+n0gV`81SVVpO{TyySKY+whY62)vbZ)_kcCY)(PuM{LgNA*L8Wm`X?WBO)i-Fl&O z&-m;8Y_*!GaVCbnpRFyTW$J-Bgd>eL2{@rhX!7Vx-?)#@Bhi1ntFfV5I;Xwy^o<36 zH6-ABgSkr9mo+}5Z}A`UwHa8jQ`%xZu$xJ+xGAa{IKIzkm1y|yuqi8n<6DA6s4r;w zL_m1q)Sf{vTtNcA+?{p~`bQIvpRAov9tR{^kx!~vxg;o?aAXPf4vNq!YDV#yCZgsa z|9YsItD>fO#OG8t=mTXvU*|-pa!zER6pyIbSjXp+h>g{3%CUQt0BjTrK5V>L9~;-Q zHA77?qGO{_P_c0}pHCt-u4Ge=9UF^OzX2~^8ZZaP2as3k17v`$9x6ZrUrr!J8Bl*py>O$zla1SltRLZhc%ICJ(UnLxstvs4>QtR>jGO`P>q5@Si!N+^fY3MSlUS!eV(VN52FKYrBPvYMN}9y zR)LDBEMEj7q6{|W*b#NIf+!iYlK4R$Yo46n9o?gkqc^ZsMa9w1s5lA|Tt&~Fe8!3B zc^#W_?C4pqpvULW8^Y+T`Y`$uTW3@lT^GOOEh#&OLDnzjSiZ5?YDoM9 zpKT&8{+mr%35g#OB!+M54y-S(0;mCOo&x?f*H!rqTT4`j(PT{3>o6?XxP?{0@_&40 ziD3C9n{w=6agTje68-Yit-)g-i>7JgWIm8+MZ&GRmnM@ld^qvSsX}B9pHCu0X0j>A z4v}SEf6^=pU7`<@t!yPx-AUk*fNpo$L{=3l7x8%|LgfNByzVYZYyr>+TxkUexp7Tc_!Lf-_1*v8lF`DdN#O&LoLeLY z3x@=WP=yZX@WQ;U_yzLKpjofZJ?i~;wtCHW;EXi9iLEuFg+g8rRX*&K2ouy~)#+Hh zkLS@fb(~J?uj`1Et_%( zjv{0nPSPS>T?7(N(sG9oBoxh2vWv!xCAf!3nnc9T8QS<=3nW_6*;CzM;7ap2r0jC; zu&}0k2tGhuB`&VwGfaf+NIAY8>1UyOW#J~*!6>zWuN1DEyY zf+I{3YP{^?3ql0VUN&XL&+QTUN-7n9nPIQa;aYFB8w$JE;`jc#fQ9&I%Si=mc zj@(LQ{TQEfB8WdKD2GPY;d6Z#HgtWqZo&eKFTy^dkCw;zIwwY0gV=r0(})^sf6kYP zh@zjdDJ!ny`ap98nA7YC9AvAAnln+05Df)Z z(Nf_vOhijRn{o(RB19-B$Vq<|fkce?{;bU~gk+R=r7D%+F!v#Spx)264i%_p6T@7P zkV>F?Kc7t^Jns{fLo@kdjBgzQnrI&39@fXeLww~DBOJMdrvg1da@A}7kk2_07T;%6 zR=n1C1c~8`am$+E#~0-$%+ii>#{-F>$&oLP?mXPUQ4w<-pJgIqMzJY}ASObPa^jqH zXAwxm80QvmItYsp_8QwU+Et8n6$Vj)1KvgYn7x2)CThS7o;|9j^9`j{BHy`ueu;oR zOHdvOk?)j7Dsi`GczH9RlULA3MUJm!Vh9Xg*@=gW02Qd7t%olH5h!UkWyQ0-SdbXL zSh%hsqAErKyiBra94h3L6>{GQtZMfDUe8t-)yM23#zltsDw6Ktvrk0QF*fB8Bt-~t zPK=a}F9L}eW8}=Og+i{svNO{Y92vi-kJ@jujYCE4Swz$Z$f(4_Z}Pb$g7a&F@<@n> zC##AG2m!u){_pw-_$yzx#3&fN5|kPRNrI~$>rZ^fiJo`ljuZCE!<79F$pA>5#o+0gf*$pqa)u4>cUd4G!R9HH%;@l%hL`bGuKmB;Im`%UM z(yCYK9vy#ytz)w}I`89rmaRIXnd(8G;Ig6OpMu;_WRq#<&74p1nI<~8k4J?;%V!U) zZ=@1Wc5UFBTfVUOTYY5wny=)*`5y6)V$`Nv@mIu*un=8f> zL(+gIZu{)dMZZMkF+1@ zBkc!l-BFR&-D0E#s6+K>-{p%#1lfaZ%CUp&9D+~Fz>8dE_^y+Y#QJLp&c@Ew_GqJl z#L#pdg5J~#?T|*+hzhmm*?^!fob?==a_mr}gijyT%0`b-Hi~J(m#m$l54OaRfvwfy zGfXEc+}7}AB6_wCHsuhwMd)xkeOB4;h(IF7KI@w1?!tno^Z8d7(zOuD} z+tGjt8>bYU;mbh8bV^VT?ZpmXzhWx`B4J%OpMxCK2hVHyiYNAFOG5;nFx{w*^3{CV zh@iTiO<8f2w?-x5I7$iae=SEj7he#w`#Hgr%Dx4v(d;&VovmG}PYhamH8jZ#5ms@3 zU*WS$MCum>axa(aQyWvXTjh01c?V>>0iUM1(xW zrmXm~-v|=J7fMfT4kcftJaL}3OIZdahNj=j8Y5^fx(c2X_^cDbvxrSO1UwO=jcV$Yq){%H%9ZPUsCiT$H9uwRiHaIc zU*i{D1aax44zX%z%zBew#%6WBt}4Dt-2f&Jhtd6c*gTtCxT}jn{w>n zSr(+h{%kG;Ip^pj=S;SesBR}{jjW6{mD@k-xry8=Y&P=wCc@@aHs#o1v(T@;3}Plz zUGEE1S$(`1Z0%6-67&iX884Q=Dp0!l3=@HpWK$loKsm(+lsol-@;bJ5h7%~Ks6crQ zpJ5_U>TJp*7AU9sfbw~LpnQg{o#6z^sVY!D$!C}dl#j6~hX5r)9nUER%A!vM5;2wn z=ldey=2W?ARB|crn|ROZqxCOr6AcGi9dS)SIMV{2+c2Skx(357iRtDRl<`N zXm`Gr1Bs#Oe6c2vFm#~$w55C*h$vairmXn11%kxzl?zu=ROt(Z`+!Hyy5SzSrl_tZ z=qq3uVpq&|E$+6Y0%#|nc_M(evnhuFC_+SYf}(VG5lF-s6#d;o+msu;pM}3&AG^1* zjYP$6(0Y<=?1I2bV7!^nG7+&i3CbfOFm{G{vJG3@%{h2+zK`g`;zN8L69>>bEZ7vrojv zxopac-#SZ>7{1`Q!mq^~E_|I5Yd$5@wems#`&VUPP&4k8*lME2y`VMzL*rgk$yMkS z_?#1=lVej3flh>Y<%B%x+#-;OG2~6XI9Ijfov$DGK7Fvhhiw=tSc5)F5(-wIkV?RN zC!b9sGT$aBkA#4?!m9*NybD~6{eSe$|2@85iLs95tC~u#`l@g9IVU3Gn{3L8ulkxG zF??Zeakv6~`O%m~+VSn5Z2eGO2CH-wF0u-izw=opg5|Gl%CUoGl}~f&Qn6Akryw&* z7E9&6R3Ui~7R4-;eaPw5N6uOxF*Mz)E>3lcD8CA$Reb)5Fj~o`96O8__|zy?(CEqe zmvelfK5SmVRu0wS1bs(_n4=^tc~zKP!RMCBft@s3rc4n?#F$3U+Gq5Z zjY=i-dq;Qbrioe0mr=sNovBtnPu=AKCeWK)&=E}kWhC7Xrg&m{TY2Ae3GwR zVph$nAkoBE{ny9%>=Uu^Q8s18fBlyrF?^}@vL;&eWl2v0dz$s5C)i4&x)Ih4? zCE|3kpga;n--&^CPwd)sRdW0Ot@}3Z-@a#emuFF?J^C=%$yY2f?6KxUkwjM#qV0U< ziKw`kOb9k zkccsZnzR{5i8H%$hjZR{6CTq?>LYBcP?35D$Je)CId`M6p3E9$omj)8m zT%VE57=_dkpKF@DL_4@m01`u!D6^Jm3l>-PN5}KoCEETtHf6;hjS?h=FDF{=)>=80 zfw@PJ1i=RqGw@;Kl)94dS-_uWE_6CuOH}_5^pVie!gn*lRp4ykGfo7~dN$<{;6#W* zP9T%6D*}la1K9#;#(=cM(+@1`!?wh>5f!#UA1Q4D+aP(BAXngXOvGzWP#y_Et|Qd` zjmiRV(uczv`N}1h1z0^gviJ%*Ue6bRh>knhlofAwOpqA9FqjC}W7G1$*ML{ekoaY` z#;CsKDt^iw;9E!~f-mreAOh;MY|60%>SPk2e7X3a^pW%jwyLN|x~%0$QZuaI@wq2L z=(lXjArOj?9yuA7jGGZi#F$|%3PrMS$fffHZ9ljcNDNI+lC@@GBZ-wbx{A*;5wj}= z<<Ot!|)^MtRl?^dWHtU%kXU>xz~*GC>C5g~iolohYGOOP18Oly53 zC^gNsZUJsJbFF`4>x>#9S)WnnsX+~uFXxLv1l9Fy%CUoL6;YeMeCxmT(e$5eWl_<@ zn*2+YUxm?s@cAdg=)G*pAux)NE;$*OjG+-okTb59e9$S3s? z`vluARK%Xi38-!%RaidGXOalZpR*||ux#=j?Un;#_Mud{m@D=sOU1$wSOL0h_}}kb zuv9xN&IJ-flX{=efrTon3XWNPR*B%4&ZZm!jtCCN@mcqX@3coC;rOgK2okCM(_=@C zx_+=D{|x+IJDC52{CQUX{8|3|Rs5KOAQ!dn{Fld!8Wq~{2u&8Fd_n#RczV5Kn^A4A zOHD_)`;HYIyPm+dlUtU&<57}(1IT;#n<9sZU90d zXZSOYcLPV7J+61K^+E;1DNVqjN~hxCUOsn3JiLWXId(kE^l8lR8h)UUhVQbqLPbL- z4-H3DEIi2PjfjPBuqnrmg}Ih1O_j?z2*pX9L*(m0k8aoY4$reSL&d{}CU^*vPsPM@ zeEx`-_zRnI?3h?qhACv#+(Dd6W(E#7I{d*Sp%0HWK%y1>5+%v22lY$bnM4y&Rit$A zStTOnBsS&PkuskIkZbe-aur)QRR6KDiT?W^#`2SX5L zX;!d$CaU3`g4I)kL}_n2bW%)D`s|; zD%HK^Qg^DmU|fNf!R^Jaekfj)YkeLq&t0b7Cz%B#T9I@rhN=gxnA!uvCHwjhCYniU zHch80Ii1fZ(QixB*HV)nqS>GgPn*`askNJZn}z^K8u#oqj#& z{c#?Me8Q`M>g6*}1XPAiId(w75_1is5H!qc0EX_?$IxADWl=E{v{o1cLqc8^HiLYA ziLiMsn{o(jA|#_uJ}aYR1QJd@J29#t4i_>%)8gVcQL{udtA1>Fv+7wpVRSfEYsZ%p z%eihC@hf>>U;ZU%mFKU68w$$REW>^*ss)`4`w>B6BxG5W`!hYs14g-M_}89qTh3Lf z+2Wkh;ITlW73s8MmHLSRwU~myNWu|F^-rVu3=#d)^HD+Jc!uXBC?1E21A#rFC&NxW z6Lz9;=W2?hDgSphPt&*kDSTB2=FqC`Pomg9;KP{-K1W33uVGVGf>RUYx4vsVxhoB8 zD|aE5AXI7{0FXG!GyS=R8RGZ(xR( zGnw)@0sbRwl~CLHDk2gu|r_C2LeWaC0Fq0&iXibjI9?c4uYor znTcMYU;j=~r!^3RKv4dfzM`y4sP&MUo2{Tt{yM$>#VrX*ywM3U7#ZrJUna>yz z2ouk34BPt}`s1J$Pvvos-#HqwU z;TBE-#T|V1h@d#eraZzx(NilFl9^H;d}PPtC%&u?iZ8Hr(`rz-g;PNBSw4G2P<)C_ zId)LY^LPp@Cd&7=Jec@{J|=$0Rt*&sL9dYnbuL`8DUkRrpF1KXe$A#l0wEFLCfZNb z?qn@4A zwT;gm5foe4lw$|Q3@<4BU^uD|hC^(nP{Ba0Ocr`n5LEeG5kYVrn{w(iTpILE%n{o(LBFt)aCdSH{ zI1xz1HwkYpOleJ*;hlQ;`bP0!sUW7d`XD-}57F1M?L&oVg8}*=(Ns{rn$H>$l((}f zE1;Cq@**J00i~Sl8-aua%7>#)E;VOs|7pyyuIjZI-quUw*QsGCuToF@CAqG>oAzxE zTFLACY-9(+5(R8FZTmY>(cnzm{+1vy5@z~M*|cSIa{nd!wsu{zXXh4A#r;{fPEFK1 z)4G1oRu$1K^`KX#`z2bEa;3L~S2B|~XCCL%eBOxe;z>4T#a%ohNDSZnz6tyHZQr(S z>%Qcv9tbR7sof7+3M5*Q@+vK}z9t~2@j<|mN-_UpK3_!hFJMz1Ip#mjWBxt*=HJOy z2Gs*F%zv7iENtiVMKu4#Y|32ow|)-)6f@9nRoBRTsXhjdur)%(03ix^B~#qMK|XIp z98?75kr3lodvuU6eI)eoWT1p)Q=sRN>sQ`|dzZfH-_BQW;0%A&`v-lh&y>tc02pE` zxOgj{aUw3>%%-gPhr0!d;mZzI1!^)0ugN7V@Y0WgHIZ7O>MxjmAK27$n z_U73GQED}~e2dRD5j7A>#{JL6AwpN(zQGrg!Iths>314N;v=&`P70G-kD< zk*F$6_VZaK!sIeG<=A0zl2>qn0=w+7MIhl6*qhYtTHkY@ZDMyjhC?G0(1HJ~K2$%& zHV+l5r;}r$S3uMJPBr)Ad=`n=d_Yhh3H^A>PkB^fb?42b+UKW!t#ABa@ij~A!qfd! zBZ*Z%^$R}7L@YeYrmXm>p9&Jg*LOcF$U!80DP>N257`^@q}EnOJ+DK%Pc|D!3{6J; zf@ofZpam6NGx$;v!8MglIRso0BA62drMrtjf*b@}zE0yDPyTjguA1GsefNIPNXA}$ z`0iqxhZ+RWAj4ONcUwXw3SP?RkqFLhY|08ao8(3`xU$CGGNDlE?C4!{NrW`v+7An4@RIBb6^+}Hdd9OZ1-p$qy6(T{i`}!Ny zB(V`VVk!W62cJA0gSMwjcN;{_>4J3vpr@k;kQsNa=@hi`>%~>Y` zC$FO+tbYUQ+d!IV?<5t0}(gq+1hh)YHV8f*Am5~0z-rW`voIzph) z*qgjaA1l|ebw!Ol+%Yc)E2_{6c&_5JO$5*7Y|32lw7w!d-9*opR5i69KXu~CV{g|- z$*pXqP*D=}W?OK6;s~dp;buO2L^RwaD363n@FKsB6IHZyQha>cosND)-`pSK>yudj zJ&znfY;(KiR4ji#pHrgc-_NG3_<{QbiQ%jJu2mpnwWMa#wjKjcHK%Po!qyknMbM}H zIhY9*T&?at%x9bkp@-O%Lm(8PH0xA%r3;HdBEIUbRiUx%>Es5U$hK&;Hf-kuiJ|FD z(JM4TVk(|)4xdpXOlPtwD==+R=WTt)Gu3o;R~o5m*0=uXCHkn?%2o;0nFYPHZ8r<|1qm1NnIj_M0zo-6+Znz{w!mv%cM9N6b;|mdF7cH~Om%|3+Skz1ZYdR`7x;V< zjhyD9^&YlT6L+ zIL=DK@n6eXSs7Coyjfo`yx(=1x<=bYO#%`_lSk7tCQCF0kK_5w5%D-qP#yt}$;y~a z9k`pP+Z~;$Z|RMEWfI*HJ!1-xQZf3ed_IXr?_^U}oY2~+BpfFsq4%%lgshCow4W=P zaD((ZP>yECRAlS7^%;{Yq=L}{d^U*~%?ipRz%f}FlcJ3<7j=)m_20l(E73*KGp2^} zDnPiC&oL1QuVYhIoYiZhl5m`rgkuYwRRj_a7jg}r2qc_R=+~nz^nzT}y7Nzuh~<>z z>u{c0>f>N!p3@EXm?&Vg<&=IN6;RG{NJ1WB8mA9o9dig2QQ~f0y7Gwy)u~1(|=NzWGn( zD>*QZspbz_h}2McLPS)6@ligL zL}2_En{w>Hn1Nc`x#!9dOgy2FiO1PWp<-e~^R!WwPJzSE`TP;#@G~~$*x@h}6?Vz? zZI^`LVeUHZZp17gF*MzX(`b0`iKhT!I-fxzAf~V>#}0@&N()ME-@e_`wcMDB!+K%V!i^9N;LxuKp*r3h-C@wUd9PPVrY69jbVOv>@6m_HJK4IS z!XrwMv4m8>@iso2L~#5&n{o&^B20sEX41&~Hv$RrAbsn5Llbuysp7@CLe=-a*rWQW z{3+WgR8+2Q9@t!BDLDKIpD`j1e=I1Eh#rumfJBclZ}7sXlRC9i-0?snwiGu^O!bxK zaeOw3Rv*KrtazV)O5hCJ(90H#R`K*%?%Y-Nbi5OGj zDY*2+J|k00D_?^9hCWcg%C-v?sEs}XXadzMnQ3t6;{jjd^F~DD=LO}FkQguV=pa!> zJHz))#7eim?B`j1YyY0FQR3)8qeY{FtnHOl^+ZqeIVIZuNj7E06FnhF4Bzm;30{z7 z;B)fjJ{UbprfbUA{g$uS?m;aD5<}C2YP4u}AWFQVsxVp1XO#$(1#HT(!(@>cCaFv& z*$;o4=lj$Ve7}gg>K+ zK*HfdzUdW#gu})EMt!9Sxqz4UelWZ*?M>Tfq)Ww0wJg&zZw>u!cKZr$94J$>_w??H z3Pa~Ty+J`DLN?U;`tNL)TDNv>3HWZ-C)v6+o1OE<-pAM~BbuikG_A7i1xg}NLX$@) z_x&iJN21^Quc+2;`IkV}2B`uPL%U%)pEC9Zu*da5@N>R`15;t8jn;PsRCioL<-lzO zf*@FOHKhHF&p8nq|I4PVgtY%BNDNV5!Ss1Km?*t(*IqM#3{v%QdzTE))Ue6ESu zIfG3(cI=!Kh@Jkj(Vr?CNhrAX*Q&no)u#`fJX=vz;9MNl^LRy8QPaz3nTVPUn{w=^ zSrdpF{Qe`BJkr%tIav~)rtv$SyY;bi7h7Fa>;x?XPI5Xyf~yD``(D@=;PgLjxt=dF_jz?k@GoRygOvKEm*_30)OmL4&YS5=_US zK6ajA>x+t=$UUw=$yE$J#pj%eq2I76hhQi|?ae9Q$&x?>5>EN}FF|9NLbkBpin(Q96_kt>wkgg)TgI<@#!cRMp4? z)W45`c6e(5nhJL6->+gTm>P(KW&!x}3U}$#FQ?+i2Kby3ar#O&Wd*0h9`f7}fx(f@ zrCc$c%NWJ9?={j-=|kk>Z1oHgMEr6p5P5*lDG?$c7L-Fn-7qd+d8*4d_!JU6Xy8lU zf29wIU+~pT40m1ZaOVbou>5Modz8;V5hg!nQ&v35PXvkK%bhk5@#Ksj_y9F~gLV*_ z0VIYdq2Av*KsgFf5jB-B01;7>*py>Olsl?7@=!s;D4X=bbUs^S)Nr+@bzlk^OgV?o zI}t}`vMI-oBVSqE1&J6-4~9cmu&zPn6{|PDGHwrW`wh&S((ZaFn4^ zP2psKWHkpfXnR8{<@e~L=?!evQPFgjo=XZ>f{Ls=`9ctp^*T1?*pbyJ3lA(L`;w-w z>VxV_Y^_m2rJ02X%CF+-^L+k^c=`;RatNLx6pfs^lk74^AQ59B-8YWtjy$dsv-{gW zqfgV${-0-?iwfkRcPq=zl)`}7cOep+_;8Bq&+&OCg7+_ia%iPt_&SCg!-J=T1z&a9 z=jGPugQEjT3{BVY3a!u?ssh!~ox~S`h?V7R%8H{~8kL0O=pOiY%LKjQV&|KNWvrOf=5CMrbf2U@EId| ziBGaAD_-Jbg2eFUOVe}3gGRYxBm-gad*DVhhCI#I2^9uGUj+z&fmc8k4o~tKB*Nhd zHs#piFu73b4Ti$fjoMIH3?y2S6)Qfv9`yC*04O-ZsW4c;XO0Mixopa@!(fi|21#6) z5}bp0`N$U`cIx9{J6kbS*ATRlRS+IT=<`Ua0^?#nmqcJ}W>bzG7;{Zvq;utTAtY!V z(MQHXwq~fv2wHzL92p)lRcKWBY!ac-&!!wZG-e(?lJw}y=P=%-4~w_6wL*nO(8uWl zVBr^0g~VI=ED|B{W;W&6A+Z1gF2-EH+I-0PzCJR(!&VLz89@^Q1CS9SsS1#9@i`>| z)j@sWw7X8FjjL{`n8Kf~X(~ngJgUk|1eSp!|)`EfFYxW>XFUN`y+3Q_PYj zkO(B4V%FVJJ6L8h>*vE;%$l@6*Jre6j6yZ#U2Ww8HnxL-iSjfnUY!fi;&sAI<2%Kx zvjmCI;#FwzqV=!P%-CBl!Q9~rDt3#i*A!c?rmRjC>qTsJ5ls`=XN4&p2E0Ct07ysN4JtUkZ)l$U_OozeuMO~WnWf!;WgWy)ao&%>2EA6u$ z^rnnU6cq%`gjeIp&3xvGAi0T6S&1Vz2oj+lqvb26=5IZi$O%#{cOsyBW$ILu%4W7Q*zc`5R`tY52eT0nxaA} zXsEU^lvH_D%sj&9mx!5%*_30)Ooxh@pyecdfooAzyP-?VqTXIj$(>?Ri6K2V-!m7xzu zg`iUz`k){YS{WL~vcXhLCsO^nBz~vZ7xo@vE7fdkPFd)OY+VuUQeWuuTm89&TMX47 zeV@+;(I0(>OgD4nCl7`VX@;LpA+!wVnILQGNCY z`RouO@BudE*dee8A#f00)5yU3Uodh~uI5sOB<}dq@L%ZT;8C`Es5m%T#X+DEbL?`b4@^D^|-nf15~)Ba@;M>` z;Q*U*>_C`l1EEl>;A<&91l+5SfVZ%4V@eY{gJPuq@aO zxTH}5@GPGjA^?8RrW`u}7OMaVaRwb{YbOLJ0g0i>?mL>{z!FM@!*V`TL^v#EQ;r=D zc1~cfiRaG=F4qUaKDJh<&LAWwutZT!zlYBX(eyjnlw&u&ofBBgAqMvgZqi4<4Q%C5 z5fG9S_#{$+@KQcUL?9etQ;r=7^R19jG@x6MNfu?P$JaZ!UmpkWXX}QFgA;?pfma|E z2KVt9BEsNZY|632z{w2c@~D;Mpc;;UTtus89&Y3>2YMIQ)>$6cG;J zXH$+H4ofYsV1-i&heJlHnl=2Z9Zfh#J6Aj&NDNJ`xF*;+1j?m?;y6BEL{N-kQ;r=J z3oTHjoez(QH^+P);&gpHY+!4L>LFGJ_Oh(?!+;DFuaPb9V!??JcC~(6$%4< zmWWVzC7W{WP?&B7iCRCtM&k1ZpV9}w$Jsie0$_1)Xpn-aW`BUs2+`~xW>XF^dxU8Q z&P)Y4f*pZGoHG@=WTx+#sqiO#(EWjJ5i00>GZifUO@lfUTYtyrfQYu=3d$p4rov=X z`b4hSQ}URw{ao!X#u6YgG+hkeI|m*i6gw{Dvq7}uJT_&;Ys?lThHrMl3`IUUcZm_4?ZW=<~EA|MP5}P;Kw)Cwc`@&Hfyp5u(}u!loR%*=JhXDkhDC zMzQLja*)tB{2CxJG>N`%%7I@L)$|>FR*0rQiA{Orm_D1T1Pv@+qi_1F*jk~s`4H1v zqNt|7oX-l;^!wP9V>i7W?NMLBgNV24TmNRZVyM;+iS{mOQ~=z>=Y|M?8`zXb4giGH zPgcvRw7)d`5q$uBh^-h+0Jx-40dPN`8zKPS&!!wZ0POCbsWNqF;4yvsKf=}v)&3#f zJx3VT{15Y)A)5aoHs#pOKiA5Y`fCOFT2j`?^=7NSoPXN++ByGZATczlpYO%yAaPU( zOyILaguwA^%CSRWzE@}XZJge6s^9~`x%wbDi>(`~7w}Cq3>HX*!RdU4h%nf|rW`vA z?2>=#Xs)kT&HC)0)3<*QTPalghm`zHNmRq9`J509|6(@f*bQ$Ne2yALm|E(y`|I`X zeg|78RJ(^1e54?%*^luVA)5VFY|62leU{}VyHn*-AC!9ivq!(6Z~4!%)k3wr@9lF% z7S;Hl;`2f@{>RyrV>iCt@2?tt{RVt@wpR9c`+lcy{@=0{Lp6U$zuzT|3V>hpxgi4J zS8U3$1Hf+mMghin%B5m1?frJkk_)tx{)IqdXp;UA^Sfm+HSEmOnaAgbX#Ux3%CVc@ z>Gj*@_r?87_3gintru$Z59{^Y!lhdZ@UCYT=Xdq({vcZ?RJ(_?cv}#q#eaj(3eoUiWmAsb@OFzg_2p~v z&+A+MIkr-$mJez1rX*^M{|lcJqT!!qQ;yy6b{DU=zmhDJ(&95s-e$k%LhT&C14s-_ zj=v&!BA-_prR|@@=Z6S^cC3|~ebvaMmzgge-H?eg>HGW9kw*^t!{tbLqh=zYDn{w=ix8uI4 zFJH6&5J;ri?C)nQg=+bbxNl0Lw)pq+IUySUJ~rjp4L{GSg;(SocgaHPNU7#a_#e?X z|HEw6P|fdKJ}68crTss|=ZFY{AF?UO4g-5s-wOku8<@OF+YL+r5<`;#hK%Za1ya4i z@qC7eFgT7)Id&K zT5ErMiZqih;^yeVtpSB<_N~Lc9!T)AW-2O9Y33*t=~Qft<8w#E#uzr`*s-zFgN^i&Lavx8=hE;c zS6BP;RW#1jN61FDrl<%xqZvX%WK?l-DxXIpPCD6?W5>w}9-I^ksRsBk^zqTn)({mR zoz3v!lTF1%lFu6v7cXQ}jvW_HZxqwCbg5iazu5RXeLTE|tr;pFTpxfA%QJ*bDh}#= zo`^WOjZHZO2N8;fPTf(KJR*>Adc?~_vJ~1QZheKT&8%R1sv+Od$KO}k7NO$LwI;8P zKT8PHs!o0DOMEtnko&x#9HC0t^7@uNQ7dCDx9BnEv--yTJztB&(pFGS!x~d@#8J%p zG@l`&S)XK6Ry@fQf<$N=Zn^#Kh4(^=TFbX+_fM7riJ|GAxF%`)TXTb&)?z+CMEfsb zQ;yyKi>(Hu)_r{akUjcH*vZxp)vvpz=L905Sw(9*pEDvRE@o4X9TUsEm`D}+vyD0+ zFVzRe5w?=3z&JIa1JXo1HTOKoXOD=E3Y&85=vd%ZUwGN#K7CZYi>(|gDpof^g-a|I z4R7bOMMT3}*_2~P!%1#5$Z}vafAK?oWPG2kC@L~eZ-R^v5ml6YhtDDrCEsFGjvXay z+$eFE1e;;yxUJgh=O`dCH0kHLO|a5XP!%!%VB57$M9kmVlw(KC5;tOeMM7UxK*?L1V2AL{m|*n$H>$6(_SP$Bv4Xmg->0B%LfLQ^icOKbuSTl**ysi?~)F9#^w9 zMGZGW<0ljuRh(SO=aGn${cOsy<7By4hX9eI4KXsHkC9ihwM50ph6Z6qwgXi@6(6tQ z^GC$Tjcm%X<72G{A6OiKMM;b@yq1*gOI0cjM%y0HN6LrU`l2G`yk5Ar!B zV&(&E%CTc+l?O9q!2CiVFpsj8MFq^+%>WZFrizxI^4TP!)A!vy(yylG1$w8Y4 zBw`$)n{-jCVr(`)L3i^YPK?e!HFngf{E~~cJ5~#U#L#rCTx&1b)m*nArgfc>x_Nw7 zh|rrYD364ZxytQU=Xzf<$h2O;R3Ed6&lu6r z=d&p*KIR-jV)(}H*7y-&duua|NmY|2Sa>B@^dY1QjB3tQzmBagYD@~Ms*nX$5mV$d zN<_>7Hs#n6Guxv`xk86`O`d!8q45^BUZ~IrnmrUKkrE*8;qyd9!5i3=V@JUPx6W|f z7otctSMqy_2lb)w4YqQqPzV~q2@y;6318*2MMT4w*py>OL%UyX-m!9D=y*;a6n|ms zhzg3J`Ra|OQ?cHJ2p;IwbyLKrem9SZgCQj7@Cen(C8jPL=`2=`79Dq zvXo6Zc9bmftI#!k?sFfP>!V{ITR~L!5j0lQKr|Hr#I&nyu+?_yJq9XZSV%4|Ga;9-5NJj7NK6)Qor6`P2sqT`2r_K4{CKAUpv=$Bqh5ZX#4idKLF{eS~aaD~swo zn&l=9#8lC;p3f!`E$i5nV@Hdp7wnsHVV2JP>wl#6k@8};qNqq|)(Z|1QANqMd=`l) zxtdKmc9g7l2Wp|hhO;evDeN(Qz`TmBGb&&O zyT60a4AJiQvMI-I_c>kg>6n6Ht&J9B{~zhw{|9WvQ0?ClkeLLFq~PGYe5Qyvc#usw zb{x!?O51;^)CdY=FV#*`M+1qWNm7H>TMd;;LBsQGn^E5sevVB!b~Ma3n@}#*S1M+L zoWd#kNJtDB5`yNm21=x$U=5!qqEF~xQ;r=4)69=p1oi`7qz`~=*ean$g`j?bUl_&q zSMk{)+WvAj<=AaMvn!o5pz5_ZRX(se;9aNN_04}PTPsxayFNGRbOuy;6a?JN=ZJ`a zo7j|NN5E9G!R&^zXQ_O^(qjUcIyFf70jCHgoEqeq zs2>eLF5vrHza0ZF$UX|&fgcijJnRJj(?jA5LsK@FiaojBT3Nh<<8fUl?%;M|f}w{3 zHT(9~GI$oRuVY%@`S#WcQAs$aTNIUqX}WJkGF_CFk%jGMZQir5Yx|B(?Uh_#4IB}? zMCE;*ZcmFWh;lWv;LfPJb1b-BkO;+oM=RfL6$+ecDR5UQQ!98st5qB--PPx>=o61y zS4s85+9_ot0ZXY@at8uFfOJ4#soAI`oMvH2yM(!($oL%(z6XM*??cS59WupFSdq3K zsH8Qoj;baHzPC#?g}Uy}@wQJlzY1r5Bknm|5+MO+^H0MTemw3O_=T^={XzabD}Vkh zfBq_e#5xMX;hY6`UOU*ayFS&#QD=9dls-@yyk&5AeV%p9{7qh0Gs-zbo?K>~>@{F1 zfB29TF6xg+OqLEB<%2onkf1Tcx~xA{uIADO^X}Q!;p-~3ZtG5Q!&1+gO0`sWC}&dD zl(@*|7C!xzG0NiDLhHtmd!|_DYsDPE=9WPtf4P)C{}IrB{sH{+G5qrh{PQXN^BMf} zIsEel{PQLFW8|-dyDt4F{L5bjTf6fwfWNopuZF+3=C2XkFND84M&+*+J1>I2*FrY* zVm!DkpMszIhR$rM&*&`IilDnrO#C~o2JLKQO6g9M=R~8_fdsFW5zSFw?CLj5hnbKrHvxjEou(;# zMu?rJiEPSBr>RYlXk}{E*w)8iTq^gas-B+4g}?)^;V8yFkF5!+v6qG#+muAfCC=va zLbUf8Y|31FM@i-y8+^jPTJaJY;@!@&Pv7Qwwl=6Xch^R|4crk%F?%nc9irJYg7Qf4 z)Jtvo6V+@keV}N-dWF?eGHc{|vwk0bm%fPy`8o|;3Q7s7b@yusAtnwIQT6Vx<+DgM z`>WZMmDYZ{ATfO2-GvVc2?U3Y6km-0A~2`v_CLo~5!D4y@DU)QijPn8StR1)6Ku*M z_=u3eJADA@oFb5L`T$LGkk-efNm~y>-60?<{X-v;e`8yP3Q6}Dr@Su9EsheG{>*2H z2*5uI$|E5zEp}-jkxgaFrD77QY(^pZ|Ec>DIJv4S{jh}u60(qlBy0tNkN{nQ5Oz?S z?#@D1(t)sAsjhn6{VLT}O)XhaM$}P3OGRni_hr;k|2jJAxDRfqxX<7SilQijIw&eC z>d61x`(D+3_uczmopWzhy~yuJRjRxCyWctIyXWrr70Y|2zUFD0t&`3v0MVU+#krAv z%~<=Cke@_nhz$7&WMn1h9Lphk*Crhw>AP|0v`FIE0n{v8q$|k|!dCz27Af99MIBq{ z6p`xKNJdUv9Sefa%fWX3I$XsqiQ;+oqWCAWU$CMGK6)&&O@IXk-!4T9&!#g&YGEH4 zIYJ8tT?^4W@tP-%$*hlEVg&SEnp;rnmzxpB(%rqwe|tNi|$V31bOhmPtgGmS*L{iRdjyH zaKD0#tkm@ehv?l*#6n3IlYYII>in00lI0A<=gE%2*7@Kya50i-8K$V=b98D*HGGkeYamjGVY8jtOg`REPa` zb$MIwiCe96#Bl)8o$i6X(-cK4p_4-@Vi6fRaYZZ%yDc~FRGiZ8@*b((*krGX z4P@tF(?sxM+4wXej8jyxmQD|;iUBfm;;N8)nAuu+!p&t$^@)+t-1UBYS?nQu2P+F? z4^y^I(M6Tc52=euGIHX&m?vcm<~b=#{ENLD-a&Q>Rt~|3>cnITZj_>ex6)}LRq!S< za)b&D79qqshBvr1fJkl~WA;F^rBY@#er&J9ACkj@)nW7ur)-d-!TafykQ)3R8ClU_ zuU9pW@OH=UfSFAx181*`>bx#c{ANl0Ait zN<%X(?w|Q=p0-U(hAC;|ZaOt&+W2gIY&&|SKK>Zc!k`P%qi)Hqj)(R=JYgT?$LXHb zE{7>quc6tR8y95XLUr-`S9FHRSU*ZeR+@;PbBM?q-|?+aCrF~m7K@p{RTd$2oN%S} zz~NYc=)}N5RY&kq1OD7atU5xbsxnzjr;3!xLNapVGFc$Wr0O{N@FN8_+KXd7*)Q1k zVU0Sjh!qDnP?f|Gogh*Ymy?kbm&7rWB-mrb-O^||lrr|&tD;VJ4OSKB6IIc)Q58mo z&Jih$G8s8>VJwk^!SXD-+hmMgc@kV!f0w;9-cEK7RvH%*r6F1AM?l=#{}wt=q&(h8 zMowHFOBH!cwl1{^>f^ii`uG;vJ6L^OVxSLUrXrB9(}^Ml@>Mc&;sR0gNA_m8UadAR z=Z~lD_3<~dbFlg_$sa8%6?r^G=ZTcZAIZpx%VV*UKW=v5E~=0^&fIQ2R#^!U-5IL{ zAJvH+t2B*N#Ic-C6Df{mWaPxfAvZ43L)mNX<#9FHJJ{qwl}Er#wQD*|r-_uuHZpSJ z@>nM4jy+ko$hL&DeV^G02acVFN3}1q*U1aWZo=whfZ7Ss*sBWWRytp#U~Y*+zU!cA z2Tf!D6?B&^Ca#?D>jK%sD0I-ovJ_{pz}lu2be%A+0vM!7s%{k>+b3i z0MVW9DpepsJ5_-kPUndf$f0E9#07GkltCt)3an~R@HNZ*q1NRhdxe}&_766NP^UvA zLsf~ap%X<)ghUK>V2Di|-kPuhgxJLKDbuA!!NS{hV8!B%HY{K($v1num1N}r z+;m-YQrS|fwT+}a+S*zY97hFbB40?Zdir|9tZlcOvv-p{>Q_UtndF^hM3A{F#iLxGd&QRveg#b28<64K9HTsUmH!iZcMB z6GJ4WA#Z4=Y@<~no2iOo1)U~R6sMAr6Bosz9PhJbYR<$Y%&oAw+FE$q;`R2@xQ6T* zY{Ixqou!SIhR#@3AXm}JA_cOYjGVYYPMCncypRXncAa;sHMhi{#udsTx7iEjg=7z5 zg|eO^lsKbR!91T%8Y!6Pl93Y^%#nQSr)CS|NA1<|VX`~0>d;K!N2igNg{l-jNN0$Y z!u!d{iA&+wNEe0@$4~90@nf=ku+kW!B#uanRjK@t&KN0``^m_OOJ({*R=FW?&Q;a} zm01AMoi3^78koq~r#DOr=IlTn?M?!7JB-xq1#>FJ(1ldQ( zcr;RKo6*{znr6nR*`PotgUkkFWMm~9^{kYQ

N7syUK7tHdk3ot%{kd< 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

OpC2cAmXN&LMjSo7Ey_vD;)duu##(S#*v_UG#C} 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 ad}nlYC6wfZeGt6T3>W4OPwa+E_x~@=QVP5P literal 0 HcmV?d00001 diff --git a/.doctrees/esd.doctree b/.doctrees/esd.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ee6cb716e461de2970ec9c4114c6b41e00e79efe GIT binary patch literal 72241 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 literal 0 HcmV?d00001 diff --git a/.doctrees/examples.doctree b/.doctrees/examples.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8ea57ec1ed874e6304cc392e2bd88d260fd52419 GIT binary patch literal 28737 zcmeHQYiu0Xb=Hd%xss?yY{7{wWo%dFBiyAZSxzFGjvZS{6~>GoOwGh~R>PgUoFQjt zHZ!v#>Bg;-Agu{ZfB@O%0Te9?6iu2UKpUV)P#{2o0s#uNKMDl>(MNs+1&S63P@qK$ zw14`YbLZZDh%4{gV? z1NvwCo3XGQJF#olOWbap*imAwdx>k=)E>TMU13G3p~Mx|ioh6c-}3Fvu#?c!xYKYo z8Ps;xAEtw9v@91-&CFi5J>~_lNj#v7~_-thmC7?uEk1Sq#>cK% zbJjSkcK6D7<;BIPURcBvJmB_f>W_&_7iS-xwr27FWaZkzGv#G2O;#!u=8HK?Qc?@s zBB(b#UreZur>*hz@yQB^sj2C#Q=JL=z>hQWm5a0E(-uCbEhcQ*LeG;GHRHdSgO@x7 z-uQZ4qOLW#Nk7~#;>dv2%nmG`j&8L4t8v>VWH-`|L@c6P_;Uzik4IbSnCq>$KK>U9q#HQv)Z-F;B*L*0AjBttp2Wv3~ zSXZ?!d;dNgF!cQQ`_~Feg`H7@#9+Rr74!qYWVJUF7uf4@!kqQ6S(hV&g2K=VDxXcu z3u(UkVHsb!-*W%hT*-S3aqe7_bV6$iW_c>377gyq4KyG!aKtZwtRXCK*nz^WS=V6) zGi)lyh+R&IzIK@h**;pj@tj;f6plk*Ofxw>U7(QQQNtuj9wb=uy?5v|8$$3SQwU&| zM?|ab+OZd#hHi-0MRD?BERxZ}kIfd!;nF{WUw;JAIh+2$+kcUB_|P*)x!NoP>1Pee z)QV#1$wLPYJn_U6)&*kS?V7$ad-39h&pv#c|9y55B6iifQoD4iQr6ibwt9j#&DKN< zh63W>z(yUC1#N)cb~1UjVp-RL8LWq9J^_;x&p7ri&ym~aU-4di?x`1^o{7U|vW^{o z@Ai3jWA@Or)abJprwQ>t-U^+LFP=b8meek%5ZK)k3u zWL>bRMbi9}m0z{}j<^;@VRV)D&-_b{@JLD8ek5#X)1uZ$L0ZrG!bVU1_LoWFU0%`) zc$b&<%}W|~{A@4S;eLB79r0n*I}oLAIxJ;4JA=7{Up38#_kZGP150h{+3iZF*L zzX3%^;$hn79G{SwKtoCsPO`O=+;DaFMoyC>O91dpV`nU4i?;S_0r}E^J!;k`Gq@lH zjC$cFGwdP&58xXErhq3aYYzTL!ZksLN`mpka_w7yEschNJC6{DYDFUy!*>Sk$}pm4 z-GEyowit?aV$tmQRF`x=)mOc(3DM3Qq@|pe00|ue)ld~Lh}-bj=A{Tg*}j&B;7PHnrJkG z$p^#=<(%8gj0JfiWusJAayqXd z4Gu)$|E9MgDaX{ZhR$a|`YY-C&6`yZex;DT3fVpa7;fpk?;ALe1&%15RXBNA@~~0+bfNa1Xqo$C!2D5Dylzht41%@|=Tmw(!%|?>U=CG1 zqu#><4Fq1&d>|uA1dZm3Wb}uzFBqmpW9;<2#=KQ;2aK)8vsW=?8CM^}Q1>#9=AL}q zpei?b6bf0?dfAE*i$i=!S*wOC0K>_PYv{Ka3XXz7(3u{TV+cP8ZAoEBSc~4gX}Zgs z*m9G*G*gParH@3?i2`iC9glyr;SqrDC8sOF*j@vW>1Np`Y!e89{c1vOl0y)R6M8n& ziTh)1I(}4VFhaHsr02b)aLgO1UEVKE`S) zu5yE=0vt1j;?kNR{ZJf;8|n!H1To9fAj?e@#QsSkK`xlO6I^DN>TFIM36VjL=jm+k8S2)RnUc*-b9HyB{^8{CdSrj zNZCfJG_z^-LSZtE-O9;AOKLTaWt0~{eYMb1Icw9hP~Xhj+me~Kk(E#IPAh`snbn7M z_nZj!7#h|pY3XNRTO)P~m7=_&*h1d&!j8@j&<uGuF$4Mx!Mp9nDx(Q8dJyYt*gppP-vEsB5I8 z5YOL9{?DykafszQRUz~_L$_iMOS}u`cl0i>?uiZO!d}I4f?pkIUX^d*Lm+rvF1X%N zEX_jtf4+SSHnJ-#lAJHWZqWJLx_gGs*U+$r&gn<4dpHv0Z%)HfA!|#5+?aA0DCmwjKB2JKdlg9& z*$y4qm%@vHoN*w404pKrJdyVLooUaQy}#Au4|1&KBbY@sa12gmpS! z#rSt(QZ4gfm9%R3N045o8j1 z%i~^LmwaWw$lixJG5<3VF$y#;fSCVA%^pqg5(3ax{Fx3ocVdInQ!S)ra*%stYU&bB zy|g3bVNKw~%B5-R@?`ckt1&x?!*H_lrTov!llhUBH?4iGUq%j>>z6zb^7x?8qjybm zpg~cNo{YSFYI93O(BhH7poP-aI8?GN(D6-HeVJyHSp)EIX!XSI6Weceu&RM!&s-qI+GH(f zAI)vxAH6f^HEisIV5I(iu4?c2e6NV-HugFNc-YmZ*+?B%lk;7fwJuqg@%e})12R(5 zGI^SP6jF5Q%A?Bq-l^ua+|2ADH$}VrV(&n6yG#iQd?W=2wK)O%LpY%V4;GjuGl4dF z0FaX|y5Y+zE-GR4%Nx|MEx;Tf2@!7 z=+HoSpIrTvhe zj0U$6W~O*%BBw|imfwxqUmA#<9)5hX zu&M(KvOz}4Aj%GNt^WT0$*;Vr%lu~p5!SUS!a`6h zC9wH^ZCmS5yLHJrl)Z1D=+ZJdsed!jY$#CuGD!Vv)a(J(ukHz|%lF?Bn&p_AQm=Z! zK@PTe!QKC#Bxs27515#;t$z;9=l2cGcUt!nq@J%=&WeQ8uiQDL{=|(Y8Fv+Z%^*8M ztBADPK5~xP_OA$e^h0dWF%-l`aRwdPN;!a@yRBvnz4f01F}9MyPxs1Tj%zRK#HAA1 zGqJ5w?1NX-jCAlwIU^OZ>dju_HC9dMKa7(!8S}+niAOUY%3e zkleu*^*Wy$aGjgI!!_1f2JKhE(7`C^{-p+X#Ua*v-QI+AEpy}2lIMVJo8O$H40%q~ zRR4_{3;DjnLK^P%_w3%c5}LCLI`$H0w12tKemPnv(@GRET0bf?E^0<=MQU>`S!S?T zd)6VZlb*#4SG{JH0uxmVNNkIUJWOk_t2yi^J_299(c^oXbVpN_{MS{wqNz%1mjfVi zrs63(>3%M?%S}$((vz~g&ic81>G;#~4l=&AOD$sW!yIyadZ4AF44{{F4JIbQGM0pf zYR{-^&v2BJLKq$7`{2Zi%+%ovj>yGL>4V6?(N|avS}h+?sLAUmOhE(kbqyZSXG|Qm z^n*7gqP=+I;|nk1x}TT%9-b=~FVl@YkG^t8uL|0gp=F#JKg)9&Di&DCv+pz4p5x(E zmX0}Pt4R5FxLb$^DLbPAh<|k2bTQIQe8CyV@%pSZXZ2G7P$bJ3iEnvzDzRH^ovT5T zBopm;vC-Xy#MGBv8};^INNu8DgTVHO>8}rp>D7HWb+B5UHI~e&DS`8`p+b7hfWCpN z$_-UB)mP=HJjA7HSE2eiRhCs>p17)OTKy@_qO~aMXi{kKd$<*L(ExSMTcO{=}K|{EWG-`e0R_v$RdOn&q>r)?oVxoX=>hm!g!(V>rM9ZInmT)G4>n?xPl?&07XVm_!XHL6L6 z0_Xdyoa@%V(weeg-TIfh2J6<>dUWf@5uwi<63`I?-hs*CMs+!6P2O{iSV7jFF)?KG zcE2(6=MW*k<#Nu*ntLrw`z|H`r2rBOWos|wynOA&XP!31h%LjU#_yZquz7UP zKXkjYZF?2Vt=LbsP3qT*{kyKgR*Wuo*6!w|vD}KOi<>he)ZX;%WlHgA`w88tjP$cM z#!{DKspHapJqoGfq!&VN2caQJa%)i-CN*g#RWAXt4CvbV=2l4L;rPNXRWV0>i#&N@I8{`l*)X)azPG~x< zm(k`c#?Lgh^m8NZ1PP6T4omFpK)!uHl)htI543C*)g9M&Im5ln8JU*KAWRm0fPVhp zzHP|B@#5Wd%wA^Wiy%vBx*oG}o?5I*Sx1ZkZwY|C$aR-tAh@K`Ks)H_y-Wc#s}bKg zPKS0w#8K$AAVx3QbND6XbK@-+bi&#UVIXQ?GIvnB$Gh>hBHT4+>^(ct~^ ziNMJKdQzwObX~o_2mNIgvKRVbS|UMjQK^zMsct&jNt)FURAUc+KhXPQ zUC_n7bzEKU__*^PY(TNN1aCKzGjFsq#I1DGbA?|DO{^{q;kJ%3*=|mQs{KIk4~5F< zDOwirUhHCue7^qwgt~$iGw$FX)-nSfkmq#M6Hcequ4|UW#PS2a*AxeisKJx`gqfXIKY!GYMF;0_@R|aY zI)y9|T%BAuYciKKlKL$VH!?HJo+R`{$xj$aM&(f@DiFKl7z_^X2P}7J^h8#SUt+

ndKGT6z$C#*h@pt*Pj+dL* zcxef}Ve1@j@25Nj5lMN&Eb|ni_FAV+FPs2%{Eo0p4QzpX!iE<#!2_9II75me?kpFI zc`aNYjJ|9sjP&ZSwJul&IsXnMcoP)3LL}(pUfkDfuhj(t@qQf_FOc44s!vnPq>W?Y zH>FP7N)LI3xgP5Ssl`go3hc$Pli zO@+_W$5-gamP z_Nq*$gdczEeqr^y2)po=a;v{fjnDz`)%%g$#ix2!e@cIGDq?!VWM!V*6Ae$sXGwhI z6Vh0!oLoioi7W@k1?#t#Ltje=7rm$OP?sLnBb%9YOav=8GGC3uZWdT+6<>=$4F z=u_Uxkl{Fn4Vo{x6c+X9)3n9G^RIw)R(}oiK0g$HvHJpa1YRfyZ3AYD>4JKay)#<9 g_B=kOA2Vkk%aVd1Nh?$fTT@toOj#1l=`7d&59UF0_5c6? literal 0 HcmV?d00001 diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..db14864b4e5fd8f7f39dd5e96276943c919f9479 GIT binary patch literal 6189 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 HioN%5zi2A$ literal 0 HcmV?d00001 diff --git a/.doctrees/installation.doctree b/.doctrees/installation.doctree new file mode 100644 index 0000000000000000000000000000000000000000..dce928bc520d38ff8c51c09dbf45004499e6e92f GIT binary patch literal 32023 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 literal 0 HcmV?d00001 diff --git a/.doctrees/kascade.doctree b/.doctrees/kascade.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ed2e468b2cebe40427455f753e3c7368a5147dab GIT binary patch literal 24596 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 literal 0 HcmV?d00001 diff --git a/.doctrees/qsub.doctree b/.doctrees/qsub.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3d3ee9e2f237fc8373aac1f98f5580053335c1c9 GIT binary patch literal 16055 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 anSdOq)w*6I?pL;L^?%m$t9Cl<;#Y zE7*&6>f+8Au(RQay+vROFCnca>v2x&B{UUTDW*qz!E41ch!yTj6~?tE55OO-=2YW5Q>!ZaQ^=R-=%J$ literal 0 HcmV?d00001 diff --git a/.doctrees/simulations/detector.doctree b/.doctrees/simulations/detector.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e6ee2e6c6b284343a48fc1cd0c24a84aeeca8693 GIT binary patch literal 80319 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 literal 0 HcmV?d00001 diff --git a/.doctrees/simulations/groundparticles.doctree b/.doctrees/simulations/groundparticles.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3bd6c1f7863b9ec837f5d17d83e5ffbc4d9653a9 GIT binary patch literal 100055 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 literal 0 HcmV?d00001 diff --git a/.doctrees/simulations/ldf.doctree b/.doctrees/simulations/ldf.doctree new file mode 100644 index 0000000000000000000000000000000000000000..520e761c3427338dfc14ee60f4ad20339b340472 GIT binary patch literal 104553 zcmeHw378z!buL1uhfN&ENuHPIyu5eLUFzPt zed|_Lch8LY{P;db)m3*n_uO;OJ^wkUZrwTX&~e8tI1c{{R(Xw5xi+1%i^W>K=y>g5 zX|Y~tRh^pOez3jiZSC9Iqrp(qKJ3+7&4SYoj)M|~Qn^xWI<@wJcCZqQ`{jz4WA&GK zPQfqNYhm@$KxweFn-whzrOzRsCOy8G1Xy=^-F!G;Z^_1mS@ z!B9SAPiavw$hfjMSX?RBoc7+A?t2+q1AWQ93RdDA$V4v@{WPj!LHk#ib3v%roKtv*G`Z z@c$;H9vILp6PibZ#SOdMYzH_st%`H8#RbF|!jGfbvnBLb>4uJIE`Y1~Ue7GXxWCPc`jEN#aQ0UZasUYqC`%^6i0; z+P+n=Yu1EgwNP*;>rIPu0D6W-L4qsJaM7uGWgnPl*)>{fvh4dvoL{$!wr}UC0FTUR zmrS~W>$|CF?IrB6V`Ts*>9W%L(xo6p3;1LK|6WDaL}?&cb>*~OZB&pQ_LQ@8Cm+_z z=>4|ndSCXg7fW3a1uH6Lq7d>Em3rZzG<|RKLB(Bq>7`b=+Nd{u%eN;gjyF7vwa^s!FjKStv#~5tWmNbTIE`}5>@@YsU2*N)7`m_2HV=L zgeo=I@fL%1Q;_rnH%g8J69%5ZYK6_#Z#5&<$?H3M>0E*G>VxZWb&Xk@?dFsR|7<>Z z7_aEc7zJ8Zksj?@t?m=cM@HHOmTFk=C=|SxHXaM;Nq4qY-z8E6+q4|LkYpgkHxcb zG*||*Hx4V1^c}1~QpiM--;T^-&b&Vm%q#sqZpUO0Lu3%@2v&E@=Rz&uA$OwED0~YyhrGZ`LF7Iok?sz7tco1x#vXVE!Y{ZnNVizd5B^hh zcEH$K3`b};sX1aU7`y@;9ez2Fo`QU+m*6MpzN5G!KHaG*r510s5tD;E0Yt7H45I?B zPq^S~X-9U5V2~p2c5q7E&IRrVYA2KigQb(LN`>gU(i6dO-me#sG~a8xZ$pMXabFu; z9(b3PK|1dS^N?&hK<}Nn0HqzYP_Oy2??^a*1WJ5`z*u1Y0Wh{JQnL<>;WzN@ zG*k=nEy1|o%fdMKLs)v9`$7C?eQ6Ag4P1F46%+O1Ob3)UreDB0gGK9M&$ zD6_lw;R|6<+m|$s;sT_rXr226p*7w@fpYHW=&(Lbin^bNfB1I51YFGU)xvBU6Wct_ z^6No4;4Gulj1QSQE^u1GMLg`$ImelGZs4=(eo5*sV&|~wlMN-oh<`_tiHkLbAIxR* z_Cq?rNRJD~_$~xjqWuL6`_#T{422`o*+;9o?@=d-I98cKP-a{9DH04(+e?)cPKX!TENQB;B^Y>T4*0b2AoQ?&YCT9j`KrS;5N(Uq^IbR>Ag6fO^N zTIcD)5LSjay2%=ivj;kHG3v=uy$Jr7E7MoX#rGa{&4l}4IN&>?+F`VG55Ey~5@+a# zIUh$$pAGA;HBp68qmjT=M2PEKjH_w1^w*`QB8C`;>HvV<8^gN6ug{aK!@xC+3ZVnx zZ$qXnUBwo##dfw3CV(5UoO5#2ylK=ioCG0Orv9^56GD9-ql~Xaqi!WO^sy?xz~;L{ zHcKHX=QR+N16u(Da~PSr=8D%qfVnb5?h#{=bJHq&R@13ChwPf4vtH*9L$nqG;TY$G z+SJm3cwGUauQY&!_iuCnz?8!H-5m8MCh(!G6X>?F#%X&NMHuG3uR|`~-|o0I>V887HhGusWcI$q$951hYDjA1SSl-$~IbvpV={ z;Y(j=Y&G_eq`Vy_LDFRUN~6KT#!MSL5X5>={Sw7`)h^fC?stI3U;&@4ain;=E4|@@4W|O>~)=+Z+t(aeB5Jf zQA*}04~0o~T6{x%n_FurB9`KkMIfoMIL>UREeh+-pPgnHWQU!$&cI^AwNWWP0BelO zA?2s=ohlDTa5b`$f~}{8tkJ?_ZE(O{3zbYtj+>F-QFcd2S&81&9Uw*}Jgx-9WIF4L zp`72%P_}0tO1whFVY`PxqjI;eD+JG7gVd=u^nZbpoK+jzAa&G+z5&S6+t7xp1{*rQ z7GMuZsnubSs-FBd%1^78l}^XO!?g@EEq4PaYOLnH#6~oIYxg2D(M~C_(a~H!3n<{ zGU$qsD3qUu+*jEJf7VVCsM>k+?V%frdGoy-=fcf&B@YElm@8juzL|=z#@t*8 zvXMvBK>h->6D)xn#31Iux?maHai$xUa-j?XLs9_JifV8<1PQM!>gN(Y4YX3uwIQm9 zP5TfmcKmj*HlB~Dbls2RNY?X}HUNX-(?upTmr>+|5bBNrg;Pv?`z zCvtO8=A4vc5;UoeB+t!@grMkZQE89Njj>7Yh<_kOs|*sOicJZLZ%xrEgT#DSNhPEl z5_7{uU&#cC-50^CbGI*sKi|Wv9eDNq@aiSFI_my2`TGO%_g~20ACkZSO8))`|Kf`2 zD|Fotx*}g|RY@uUX0UsC$S=md1YvBq==HUs?vb<~z9pdbuo?*H0l;3<31H1*<%3Rz zVb>em;udE@DX}iE0eO%YcXYj(k?d>3y1_&97jZC7q8fCVLoizixsw6R=An{ldzZoN zO{DBxfZ4ZpGnB)bhZ3*AJHf1wJ@-bWP6e}0gUeGyxY2ZrBQI*qP_QTGXGD=jSiCo;5X3-U?| zVWImKY*j{r{{dCAAVK$8Xu(C*=6(&XAZGp?HklIj{V@)j`d2v9$&{Smr2q-F!kgo2 zC4M*I=+Aw9sr9i7ITxv$X%k66AV+^W3|X8p?|Nfco+TzMJP_H>S12Q4GAE=N<|> z2;MbcAksW9JatXPkxxsiKsWuQVq))lIAnqjE1FTbV4(XhY(|B=3mVi~7cX(~J0d#E z@4%Zx4M|)+W+W@-eU^_xrL++CLn+EegP7XU3f=GC0xk9r_ifF(h8ghtGEkufen}$1 zk>B>L9ZS%UO93n{59mk*{VqZ1r!(3iFc+HpQ{_Vr#_71qh9^W@b2QjnBVsi?$EfD} zouYFzFWnr=nggcct6~~D5#nfa5?pGC_)-?maftXLRx&|EDQdgDfuK(n01V$U;epo_ zg}}gxHtg7uXiU)kJ?xSy$%w)^Zjj1rs+s4Ji~oei^tLNLQEb=oY_toZRNE3dN0Z7% zf=fRmbQy)0XW!uzm^Mtb)LG8|3#4eW%%n)1+?>aI*SSh8nj5gu5ntGMX1_|rG zp(DQ&$iZb8(hYkcqhvYM6E?2SzZuW6UB z?%18*ScZ35TK<*IX1(d9J9XrO^dKeDdK8lIBfHpJJ%*QDZZs3!hcib6Z0YCuB5nY4 z9?{~7prx(UP;{^!v|u-;r7nY(`@;@`d*%tWC^A8<{yz+Xqv601w(%ND2<7_GaG-i% z@@J*TBI}hi3C<321(V#5U^A3N2}PL&l3SIhB@`3Helmer)7w*eV#V7^y`L5$@R#P* zUNR>FkHwWR9|Yol*~owxy!IuiWZDh+lw$tu7fD$u*({h_@Y#a@XBqAQv0yG&1A@l_C7}52j7|Poa%oXY4G7DYTm`Ofi>@I#0ApPBh@& z4dU4c=gA;>i_(1zTBC9BGO&XDypO)`NUp)kChsuvy#dtAy=+Y-=3k$GT?t;KV_rB& zaI}hbc!v&7I^*{o%OR%N7C1=LY5MR^5FU-mx0G(Hi^;8-Cs*U5ICks=VDv#oJ}hzZ zV(6b1=K<A5`-D#-xTVjhs;KP?MIPsodW6s#H3Q@<0d#z@pz0?`QFFliSUFYY zI|`%C17!2|JRP8Xs*1Y^GF{pFj~uJ=qds*IIb)7>B%ib*G|PW=-=i*t8wab1Vo%4a zsO=?--ais{n`b5>dd4PsJpW@UT4kO*)MzGnFS%HMBSovslgD?Lo?S{Mb4W2;Ks@3b zu+-@I4P82(_{q8CU^$u(4uS!4=#rfDgf@I zfn6@?(VIf9Kgt^A8=;~~Isvi!8ms{#3>1Ahq{vu}=fm*;-4I@|Ggp}xJ7fX$5VzYoA_jYiWX@?LW6#Ggzf~Ug~kgIM+(1)Pd zx$1W$(uKh`#abh3dr<=;ec)?@+R$jsnfbF6zj_g-Ct`dj?#utG)KFH1eqY9J)O8?B zp1d!AH|!udG&jbXItM(duI~}6fuSh3qr4j}nIcw#E$(7$MvYh<-#H4J#M1ddXvPy0 z2r}*XdV)k$YLz0%L`%!(v1E=JY%)@7bdjG8Rnx}|E--c!V{p(eqKZ-{;~1;jK*#Z;Nrni-YMnG5&BcOWdA9<|qDR$1_sH~hdBeN5Lm7KRf@ zxare<140?x1%r_Hf~aR=ZVj!eg^j5!3d5-3JlKiEbjAnW@U!^0M?*>eL>jl zy3aq9g-Gr`{~%WSMRT8jJ`<;y8}`#sN$)<#C-PDOzh++#C0E-QIxWt9{urUvxMaEe z{83W$<>5a6p2BGJ0NK2~KnIx0eg2a^b&%eDzIZq)I~j(gbD!g26;bTTeXh2bEPCH2 z>^2XBxzDNS8Jpzp^G8y&%G~Fu(M;$bRu<^M0 zDv%9|{9lV#1o@MzdBV-RRZtQ2-lzJ4-TA3Obfoca5p~W;@*Kl!TUqO+M0j0RYADM} z53jKs(*ls;^?|U1;O_Z>*UB_gAlrAWeS0`gy))Z{wFQsd+prlGYp*xT7`Mq2N(sX| zNFddO!u6!iCJO(cky<0@{4J=O9)*9x*ij7Nq+P`CFnlQ>3V#nJr&kpIq>)Y|L;gZ# zNFoY<&e&NDQ)o9?m|`v)Md4Zz6b-m<0+RcO!ha1~qbU5xc!fVX3dd`X!uh&|X}%F| zqlJ`+!Y`6hxVpp%2tQ0;rJxCXJfBbc5J3+u2zBstMlZJ^lr5k$Tyg9ua^Ut)LvBm{ zjXr_$;bl=BR4lDhlf%1zoaf*Sv^PrL*l;aZx3H23} ztL+OF7YE9>6IzW@%0c-SQuO5k$|n>?n+M3|?JabGsX%$7PaUKO<+pX;qYjkgU=>m9 z36!htC5zrogx%(uVW6Cfp0P;|%EwZ)%0M}4G!rI~K=~;tT4kV|D{;OznyF^NY;FMP zD?j6F(k|k)E|+(N*C$ePdWF}! zjdU6rvP)%1BD~&b>@0>Uw3{qUF_(?PYpn>12Ha<0!SoMaF98NncwNUU{K?@pUUPWO zS1C;MSJ}Exgx8nI@H!#LE!Mjd=$i=I1 zeZtmvXJv?c7uKNIS`aq7*!tltL~?B1#!A0v*!qt%af)HI{|1%x*czY6%cb7|Z?%1) z-{P?K9}rrN%a&v7kC37-4{ZGnh0*2#vU&SD9bhVK{k=YQkRDtAxceS;*cu0`h+QP2O>%7gp%kq$Y>gVtggPW_{mvAvGHlJ2xE>}eTOtp5^W9%x zDG^&=v;vF_^6`(Ictx-^xtb?zeWfrw_J^M+iUcgvWsdL61hgX^bc?#TCz3wL5PUz( zXk?)#LhzfE8p;yWLvZZIv=}%fK?uGt>>zmi{6TPKx@Rc>-U!E<9ghn>xpizt#p4?i zWsL{HQqf$0NKH9b=Qps}MEP)fUq-+B15K%^c}a(YGT zj~nSUGUQQ}A&E%+Nn>X*OrhOmVT!qI6sc=PP&D9P4J7vusox2$QKbGNUg1xU)bW}l zb-sRKny-P|sE`wp`Ysu%>y~<|V0e$M2(|D7MmM)Hlx;y15I?4rJ8=H{A?N!K-2XEx zcif+24GP=^VY3U|k6#(J1&mY3f%^)q^os`EUzv$h3;=F~N_yaqPa;NGpEK3f_Jz8O z1MX)LTFnB$(9;G|^yLBEuTvOp9w3{yH_!p50`3!i>L5LEuXo?04!GlB6;bR7xU20Y zi{9%AyUjBb5j|s*9JrsBqE!amQKOl#iUiz;Q?$x}J6Ga-e>79gg5um5&{s+X?tcvA zQQ-avUJ>9T~*=&}QF!5Q~OY(@p(Cu#>mD2)1c~;ZF-vXl7g_}i5O6QhSF;LLaD_;>E9%@Mz=&Y zPRH=fdq~lj2bBJ@!f5jV*}Q#;4losz{zjiVNDrl7?7l}Gl*Yj-qSzCZR@+M!y}u;v zHqT5%^o&h%DE)AXRvDB=jb_3b5|q9>MXL--b0yAEaVf{YT2dM$$A_GLTYI#$;Xqqm zlED(E<~Q*i_XAMiNO0|xQ*)ZO@8rEw{jk%_!?(TQj2GW&ddBlo`ED=6Sg2O27dN$o ztFl1VTs#F)6dP`-;h+sCjc(NtXy^$}`9rpimc+4@YfW@f1Y;^9td|Rpk1m3!Fq-pv zcZ79=_Pila1K&6(70_xSV`V8$0y)-r8jK_{Joic*DS?k-1-d!7*}IWU%wh69g&>zr zEZBLJHvk!d7On;+5#R?1)+m{ra>Ijc}_ zI##0&9|@LT3C&tf$akJm#+PMOzLkBRq^KUdq701w<&e>m;lB4Z>^lt(y6^Bq$#AHZ zHBt9VR7cUkQC;n z=h{hMiFxS=LCHrZhkGknUgIB~&Pp-Og(^EsC*AEn4Kjrv&IJg%rB6d=H zxdtCs_u)e>^=9|R(bXA^BLfjV*hhQy8=;}IQ9krBww5GQvD125Z{!}&x=JV|*3oky z6*7>B?lEQ?>hHq3!Nc=uLm7D6X-2IxaGRN`l82TTrhF9#l`oAx7zxA;!P_5%{L%UU zW1OeogGwef#jQN_D8E3;N?*KN-GMb!!sAN7$NM_#ilGdwHi=2hP!>R?Y(t4xi8$=2 zA6Q7A`(0$TYT|wwZuZs0-IjS}Gb{IO;6sd+o3Ku~p}Qk<*V5_goI4;ePa~t!B!F$g zPp;$VvtmBGZinC1;u>CjR??0=hxJeKa8FFW9pY@;T*T~ zUWJuRc3$=mXI;$|A%1%O3bu!nkFOmrl?$ceI2k%zu2ifE`gyiywOn(G)IN-Ui(OKy z?Ce&Zo_$LuUNCpzjZjJN=EW!Smgs(B(Q(IdFHmsS&O*iZyq!1S9-144O3OpPPL7ZN zX0j;UN2Pjh6I-R;jitO?TdV|M=~UT=-6x=}fP6P#X=7%bkPtQZi1`YIKn5FRXwepA zv=|IFoylUo(00Fqtqzf2Rrm~H+r1sC220?EKhtp90XwKLSO#~T=|-hoDEsZBq`+aj zS!*A4pM@4&RB-Os@QQ@Xp2Jqx#=Em40cQ^l1idGpWMBSMZ z6YfgUD#L_)yWo>!rkY_wzKiQCC1b+x1AP<|zJyl<6OyZ*F<~n5d4SwVe*6)sKMkq> zSx7y(>W2D0d|Kp{EPS6X*~|*nBKvp~xKg}ar8t>m%|xMR`VWZ=vHGFIeU?5La>5D9 z`cKRvTdUMi7O_5y47)KcHx7d^i)>}sK~S9=92(9QP0Q;0*`-^;5$TYl`8y$k8*UDp zQ8UMugv3*8B>XMZ^R9&MO&Ma^?uA}(hoJ4=VHy7orBrHDG2Qq!l=@KjeVq);(`;J^YBW zx53(7Ic(2(;8*us&6;P~;WNN}HHdG_SoKM3Yv|JLvbNxzla+UF5o=JxQ5sOU(b~%j zcBRm&V7L}^asH59X*otuBwIvQ7@9pdNwMcNT|||AI5S*=N`^S>g^U7Sv!l&1tCokD zNWpKy_Ofelz2<;(k^I}~Q9Myg7*!71XJXp!H%^<`dw5S+H+b8eYHc0IG=4$@4+*@J zzhtzasruRY9r%)AQ-XQ#4+pJN>@j|{_d=z#ezb>4S;-}MyebHcc;U-jCY7MW7zrZx z#C(6U8}c6^B)J7#9HVkp2*T ze$Citu%hTp+VHh`suS9_3>*ht z1(yaxvAh93#Zh)Aqu5JfcofB6hF1i|lB;fTAl-US9Kfp;jQ+?APxo90 zaUPJ-XS-<-27 zOwTMj&GI1|lm0yLA~=p!sZUMR>jzns3L-%J`b>?a0#8?F4-no`r`jmlUfGi|-Wu%) zxR{)%8J^V1CZ!Xjh`1ZE^g0(QBe6;=kxxPx)#1de3?_{3Y1kWebO}k&Bo~bKF}vWZ zO#Ju|Koj7{6vLO(ij72BGZUi6!a}n2{crySBe^a z>Hv)==4y_ZQMYy9zAlW5Lz9&vlsP%n6bhGx^s2Rzq<5Wr6JeowJ+Zj$n@CY}O#Mti zATwK0BqTK!rrgI%MXdezVTBK7N|{`IkW!jTF8-uX9T3Zq2}aaNe4_gvbdrICQzT=p zf!RVh)QZW%@qWTbGs`mwM~>L8V_+Ie0%A|YzE~_b!50o27)nUfE|zTwx{_t4(RFV_d?rns9FP2QSQyxMU|rg>wV@24Mz-}ZzKE3Cj zkotQ=>d93%)b}C1XEXf{WV-C0(_>w?w3VobHhprBMXQfWkveTqcb0N~ehX$IqT)qp zZGjb9tCj?)KCIMGl(jzR2fHz?K^`o_oS*lE9R!uRar5#SoTZeXPlW^0d2r1sKY|(V zfN2C3J2|_|bPR-djE;PH3t9CApOQ8mfNYIHZ_p=r^EJ%4p~h zjO`nvp{$qm(a@ip`|2VZN=b;<=X|MQT>9&TDbhS;j7y(164f4xE_g8#$VIQmH=xtw zp;F43IK$Y!aVA(V>1SfAxvwr}f|8JBCd_4{acS-16b-l!!QA%lW#-v{8Iu-Vlvs~cA-$xv4RJ&19Pu;rb9gCQWuTZV zF%A&BK4R%ok!g}HX_uP8B4>9;0$h_4ZNd(s5H8fn;b06YyBE;@b*;`>#_sZyqmmny zE^}(l(y(rD=Uieg9m6`aYSwj?u=~*U?>>(F7v?3#WbU3B4qk`PV(`T2P|4(glFjUO zq^x9S_Z1FZ+zt5`5Ry_QhrZ6(zR?J0y`(q7-)Qcu3nQG85U)Os^OO+|HH_592vQ~e zOx$j4-#8Pjm-I6cnEUEtCMXG6X2M)H3WtOSbJrs2YSPUjxY;`#BEW~H>8_1e`7Gb& zW6)*5Ju>Db-BaTmld^31z`zt6VAGR`uB0p)Oc}u=xX3Fo98APM7v{~QtS`P1MmH86 zf;u+#5Ma|If=!)gHuN*C;;Ae=;;80Htkhprb4n9!Y9)IpHlc#O+oHV5@=uw@!Yt}< zLnS>>!6%AEeWH#)A#iGqcs;<8$@8RlqhNAm@{gpb8JVcqPy+`sB8Cf!#>%vSC4vLZ z*l^V;Q68B`!dSixD(P8{PZXA)kzx#D2Gj5jS|mhJ^9g5WiUx#qcILGXiE$)rN1Ao!{LRJ!m@S4=gtHgC4Z zx6=g-4gqr^F|BuGp_X`0ZcQ<*YyxmpnI^z20Suk<&5-Zo=1MH)%MA^ErR0$HM_?#4 zWc^XRA|Y#X)lJZsV)9bvPS{-_YN#0`M@BmcG z#?yE;hS)xe5``GMe~XM$QQ~88v#%)ecy&E9Y`6)ADX^imT=~lvC#V%A9LPxrfb%If z{d0i>x0~lP8VDefwE0vOz??0N;7Cku|5fEf5LdLLAPJO*i2sa{FvBPE77PYw0v1+l#A`c_h0CP(=;p3C zX*d?1Bt?%gEc|YTN9K_*mbb}BbOAklqOd$07FHWbo`H7~V$5_iESzQr`h8AD_N`SxEh>Lh8v?H`MnbeLJ_u_6l~yP#6aWa5t)+c!qfSug3M=Z~8E>LPkhNr>0;eA!`I_pcMCNWP|wc??e* zsgIe7r%0!%GD^N_Y~MH&te5mN@shc(E@py~kYy&!WuqP{?cx*-xNm^*^zNbJY2Eih zYc#EU`8v45pFFJ_uMtvWS~u5KAY0eMZQNxN9ZnlCt$WYz{g>~);!3MpFP10Ea2N$9 zG^;7yDM|{(w;Je_cR6Lx(m0{!XXgP{tz@J|+)qmKHuE_scg1k6tiyFr#~Re-BM8vA ze3EfW>Xhztvk=KWKHIR839V%J_^4s~{lcX;J1O1!G7X$T>OD|N?;XM?vTTDpBU?(h z+JMj-aVg!eCBzsP5qB0{Ns5}CMcGoiW5f2-3M0()F~0hQKAj5)pD27y%;{F^B(w4s z(!ZHh=JlbhG&ady6|YXwDnrV+qD+=Kf@+r2olDUwL&{uQ%)eYf4>V0s7{1OcW9=JX|pyfc-eRfcy^IiW2D0gl5OXj~b_o%$^a8@56?=4a~kaY(W#3J>t~LeuSp#))CQq@S1{n)~WvVkik+PRw$7PwAMMCG07mn(()n zo292kw*^JX>kn9443$zYnh|6B#<^j=q@SC!%zbq+H^Y@PcHuC zIVyOK{x!@|;Wim;kT<|>G^P_h@Vm&-gHlS0NK~1GucK6)h7VsxA#VdQU2Rt^+ncGv zw_%&%#~gZWMJSj*G0K7BEF>>j&5L0U9R4FlX~c!EB(Wr=w)}b4(Yjy28q{qr2++9A zll?rYQ(L~Cg-Gr-e-RC_psxW2)@ml+M+ff)JQTUpe+M?D;X5~qwe>17fb52=l zY?8ZrUq~@Q%+rV~%H+2|rzA^lc_u}x%+tt~2=}^mo!YWH>v4slt3c$qoS*Ci)1Q_X zNp|TNk|EjU+K>ue!KN0wlip-iQTZQh;~%`%(*g7 zSU0$Pj(t};UUGky@YL++g1gK(mcAjH_S@ulhV0O}y<&{zTN4(&?2?!!WhIw{_+q2* zM2LGGUvYeQHw3nOA+WE$txt4A{vQ(ZQ@Kz+Yi!>LMp!TD!N}j3`|1LWP!i&|1fw7= zlax&dI^@nQrcn4#p+jCU4kkwMzmoz*}#$HCQIz8-a^~6f`lPnR&XgNhvpvj}UO{1Y56(o`K!sITyppqUj;u8fiCLBSc)`(X$JlE|g={>qZDZ`De=D%_K5j{s|#bm&AroR9@cf_-jBOew9336sF_lFKkB4tvI8_l zqT4AOqMSA}fF-)E!Ad42I$Mcuo3c<#65Y;$8YvUqa8#Klz$^jG{lvFJ?tU^?Vu^0t zg3(t>PIS8#hC&nF_Tv>vbR$>Yq>9lvK(FU1br)TPW+zxF ztQ*YCwG&L@I?a<3uCFnT>noOV-TS=m4o9EC=XD2EGU)`_Rq<9*wtJt~d%Gd<;a&)g zWcCxO6VAELXR+_PJ<<)~AMb^5?$}Xij@%vz_)oEVp6Z6uzv_k3Fo#DWHF|#}2!9J= zztat|&-X%XnCT+KAiOmaM3Y~B-VJp>>5V#;`XN&nlMQm>874Iu<4alvm9j1N_#GM* zL)670w6A*vd8fKq3UITpE|wEDn-p`b?0}I*94pdZ!w;NYqp2=AQTP}D#yd@4viNtluEgw%-?8WQa1Fn^H; zzfy<}C%@Em@FNtFw~st)w7E4jJuK*IFJ#_n=bK^6TK!s#NNS!`CHW z4x|bR*^^a5+^ew$O(T(}YA9H8*lyO!wW;=l;^efOF++%aFvr@qEw}w#{@D*_y3uqz zuUxO~w5qLo4W_Yal|8FotIS~ea&Z_ug*(CgvvyhIx%1En#4Bri?tC(F&8_fr$5zJl zSMiT01as8k$Q*Pe<|yCo94&?AbQ4rIscDS;zZpAN&u4Z?WD(A?uW=^J*toCp5TUm; z24VVa}QdppxF#h)-nnlKft+S|fhP<-W#WCA~*+QH-zg z9i-@7`5Hg14Bkv4?b5_OI*e4_GF+BZUns91GsjbvW_De2uzDD!ls;pLqB8edR& zWF84)`L|+Oj!zVpXY)0x4J6ONfA8-MoJRc-_)Rc&MPgH-u%IEPyb{h)6tmIzPa#$- z&x~><6_badl3qvP6NSkqX=xP{s8y2Lx`cFZrZj_K^Q0%_E6abP2AYYnA>?D64S$P) zU7+y7OfZw*9kHy%CkkuV=*bl%sCANgyS2Z(T@NM`u$3FSQOi~v?}^2%H!I^$#m--j zWhXvS*qP$RdbL(EL*LwQhHlTy&={C~RN+7>hTa>?P<)b|p=zyUhTfHxp~fb80O#!~ zR5c6Wpt+Yae&CU!eF@-vUSY3!wpak?GgxUp0yxiPp_T-2zLH{E*#zLIGEIP40$2ct zqemV>Fjry$9PT~QS4s}x{BIZv4dDD7uSfugT+LqqXP-!aMt4TOSoXlhP;m0#p@9D( z876CB=ZX}8oy1Oi2>4tioMDOGj82bPGh@~?cwA<-b_RMjBsRb^g;JCh`}9d?MRjL% zahn4}$A@);cg}TSCG~Jz%RK|BQ(gbd;AUT4|F6uTu2@LmL7*WL5=fzac&I=e z?;^eI5Ucsy=&8XsG&wK8JGTPalI9IfDMUa#<$P=5Iy3gU5Rmt=zW9b4)s%{>h=dT1 zQKblc`;CxqQXWkUebf=|peGvBRynt<`Xv4B_)fux3|4UZ<8ubGu)+6V7Pg z%sy>hsyE9=Fj`Qt>Jy&RJY@Ue@3tBhyXI_WNDMqx`}*9yw6_01nL2m$B;hCx&Q3)r zmy|P8j7sYI5v6OR)VLdgE|?yqmv}iAeF2B{yuh2BNSrBXW5VaOr`-d zwD1+IWI_ws{n)2XkIf)nEpl0H)V(qhJp5X-&H>;Sk^A(>oyd;=&zXkA+$k?YC2+}q zNpi`%ix!Fw#-y43S-(2CLmGi>7z~~b9fO`srMuk72y{MV9Gl!6lsP$$&q9H!wUXp_ zo%;gep?S$LciXoqyFV|nn|?rCQgCO2Z9TJ9a$*o=mnav+jA3#SwP+m5&%%0bE--AvvaBzxbtd({Lc(Ea}2!(K{6_bTyBjIBP;V?GIy)nqF+lPa7;9i-8nq3>G8#@h4h78B+hHka}{}4fWzgOF{Z*>5||I z4^Din5UbW3pRhfrI9{)fgJBHzuwMpG#W;Mo$fn;>(}cUY(3<6m7Fs1< z+u;XLMB1}Rdyo%;hBj{xkC%b=&>V;MEY=<|(?xrBY2$%*Y109Mn}$p4VD~2$0Ld0u zXmUmbgI>MWEWoR0W5G#&)2?}RaQQ~FK85Kj?c3U;!GK=}lfJzN4!!4PoFe>eq4l{S zSXpQ_n@-Kov$pmI%lVy3x#qO@21`B1_aRTlYX_@~^#ZV=;^jcc)O@E_YzKok*p-&! zg;_MgV7=uxT7G+PY1Q6fXv(Pp69I%kOG8EADEJDi4fwIFS+Dy*sxw)hZU+mtw1Z`o zggo?n5DE;lpRHyEey#B9h5UqFIEYVylmVa_&g2PBn1p6(b>ER5-XE;+0QkTe+4*Tm z%c-{S4_4w7Hu8l!oaIyVJ!o(pz2j6IawmVd?3eO|itTwY80e2x2yZNJI*oeM&sUs7 z4zP1!FkG@L;m?6!wKH7?F8a3L@_3 zfMVlQDT|on{eQNZ9QaLyt#{jbDL2??PMG(kf1%Sq>mObSF$BXcLp;K!I zCpI0h&9cFV8l#jRjr8N_Wxu~lv4Ly-i= zk{e}^#%9f~;MA=mcZjg#?2B6s&uJCw`ROVO)bWthRrj2{T$4yi!OtHmgZV>5b`^TJ z?THEwgi*PKFBMpJ%V97cEDoYnpwShqSbnlxfx#VU2P1d|odBRl{Q+}>trcO)mo@Ff z;m;R!;FOZ@H@ux& zw!m#K*O>83^;)jpoPrg#21^nGpk&^6sxUo1Ovh5VKYsSsbAg{Lo0A2ldAuWes^UFT)pQ?eQAU*X$xi$$h!1Tfis3^SFgi@?rMcJ*?ZMqm26O{xa zQ=M>%u!3iRf|BF-(8rnrlscGqs&=`Ow~Iy8yM*f1*fP$z=Ts)CPCFVba%zX#ds`F1 zQmRd0`GO>tYsE6G4L|SO%_#@86UfbKAPOYQC%Xk{JBls#&}K-q&muYEu4E$)@)pfMXba}shON3Ou;xg0l7@X6d-y4SrPV7z-H z{`oKbvuF|gxqLDFc`g3AWdQyh!asKp!k_!`&lOAI&(-+ndHnNT{PU(^_;UdNJhKe` zJcoa-UIBmh;h#TW34fl%Ke^-K&kp?aW&HDZ_-E(@__GrK+<|}Y!9V*>gg@8epNH1K zpZDOOMJL0brTFKuQ{c~M@eh9ak$h3t#n0oo_zfL$(jGae*~K^ZU3{(I#l&(Kv(MdS zfL>g5Mz?|$^1>scu%b|g<%{wN;z94Ae&yw;%*l6XIgmtHsMU#jC0xs-=t;`Wu=G%* z#Ub7+sdPf5eb_3Sej60u8nrF<1S}TN{)KuAbvu{`1;|^bYYO)NC6}}N55fYtw|y;W wvWDFRod`?9gT+fb3^#$u?PcL@vi_EpYlTXyi0gd{m)>v@_bH~*sXXQWA6Q|ti2wiq literal 0 HcmV?d00001 diff --git a/.doctrees/simulations/showerfront.doctree b/.doctrees/simulations/showerfront.doctree new file mode 100644 index 0000000000000000000000000000000000000000..94cd1e75453deeef4b12a912a77e0a459461b196 GIT binary patch literal 52441 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 literal 0 HcmV?d00001 diff --git a/.doctrees/tests.doctree b/.doctrees/tests.doctree new file mode 100644 index 0000000000000000000000000000000000000000..29f1c78aab281d95ca2cf09f95da7a20ad9017ef GIT binary patch literal 6149 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 literal 0 HcmV?d00001 diff --git a/.doctrees/time_util.doctree b/.doctrees/time_util.doctree new file mode 100644 index 0000000000000000000000000000000000000000..28066531eb35e01a1923bea352ebdc59d02f0d1f GIT binary patch literal 12328 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 literal 0 HcmV?d00001 diff --git a/.doctrees/transformations.doctree b/.doctrees/transformations.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fae1a1ff7ca3649e39a07484d734d38f6ffe2142 GIT binary patch literal 9150 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 literal 0 HcmV?d00001 diff --git a/.doctrees/transformations/angles.doctree b/.doctrees/transformations/angles.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f76256f15221e0b47affd4f68139538635b1460f GIT binary patch literal 14157 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 E2jIX$^#A|> literal 0 HcmV?d00001 diff --git a/.doctrees/transformations/axes.doctree b/.doctrees/transformations/axes.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e977d51cf487f63cd47d4c3f924d6ab893ef0c06 GIT binary patch literal 42566 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 literal 0 HcmV?d00001 diff --git a/.doctrees/transformations/celestial.doctree b/.doctrees/transformations/celestial.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a5e6c10a825d96c390a688fe71d296c4b72e8c18 GIT binary patch literal 58318 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 Q@!>RA7$sOhrIwrhKflsFVE_OC literal 0 HcmV?d00001 diff --git a/.doctrees/transformations/clock.doctree b/.doctrees/transformations/clock.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c840231247d1bb6424385bfd6399f0d53b153787 GIT binary patch literal 75044 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 SAAT#l0;~eY0(c?5Gy1P{>y#t_ literal 0 HcmV?d00001 diff --git a/.doctrees/transformations/geographic.doctree b/.doctrees/transformations/geographic.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c31f980ce3edee912579bfffe41cb372a1e560ad GIT binary patch literal 37091 zcmdU23y>T~dDiPry3@;&?IS^!86$&EM)%PBVIgpA%Mi;lI5H*>*D||1cQbRlJIln*Qt1rb|U z_iCM{)e56`M!O!2-V}|q5#Kx;cpblHMQjCX)NH3w_pMfRf5bLX_0VYqlX3gCfmI6~ zuaz{nhwNc{?fucXJ;H`UCu~^SEq36vZ?=LN&u^O4Dln>6c-FF7#;oPd`X;EW88y%I z>rTrIEhCr@LaP}>)FJv?bJ{vbgbv!x!;#={xNU-;FtWF>kxC)}do>%5`98(gG@O%Ze&DxxA%}|{VTN|3Q zbSttq+uQ67_I37ZdpkQZWqVC)%I~yVmOpjY^XH}lvkgi3mbw6uQ(;ahSxFz=;Y{GtI?R4 zYk6l|1__`8eV>#pUeqy^Ozti(lhv9`CZ$YDt%2bH$^+nHNAA1h*ADN$%?vwDW1KH{ z!+~t#<(ac2c13KmK($HLf7Eqd2wlLUUIVnQX<8{kb_F0AcPfDcXbC%h3T-#2?#FlW zi5o{(n|TAX)$&3P!dkCv?`x0k2m!K3jh&p`oyT_@$K(K&pl#NyqefE2*m?XoFodK1 z7#rd(A~kpO`rKjQgi_IwKJH3G>J_e34-e@*q*nx6c{Vb27^7wJAf|r4Q?+`o9X4{V z**MDifMsj@R$%#Otccp4McY7(#~!(iXq3_ktZs`-8?hY)rUhPu zSTXi6TQ}2bG&ptklWepSdbJ8{Q3%iHbM}*uL~v86D6T-Vd_4>Rmm%nGkq9(3sd=qX z_vn;MrcA{4+pHO<<&YCbRx-3LgG=0~6WB?S_o=03;U9a?g02ZfIZW5GT3-<0mtz4c z@qFO44QMdxiI4&VE~62ebMRGXe6KlbhhaN7IyGgrCeJ!^PTQ(G=A`G(PSLNaJ1n@@ zp#xmz9xM#2)o`pc&)7tXcT&WVA$pv%b4|Amf@YTe434>5qd@w!x;fU zol5381vSt2p?AUzkK1GHhQ5?)c=}C!n#kdSZ)#x)!`0U?Wug>sQddg0Qo8efov1X( z>$<~+L2So&BKyBdjlPR{`zDlrjNNk)q^qb)iA;lpj1wJew*3v@8aW_Rr3P|9Y?~c3 zjqw5)q8SS#2~*&FOqXjrX=dCHPQJZ8c0ZbFFKXQOWdYM%4C;it0)LU*T`7t%Nw`X6 z>OObniWR*lecb*V`;#eLl?DVL?T#gF*`v$DN)zA0n4L=)A33=1(BVD%4oyzSGI?`y ztGlb?P9%JF_5UC1=Igk-(1-*7HQb28E>+r{RxRu-aO_sTSguoCshN0j?x<{Kdx4MT z-b_ul$)Wr5buxDZJD0C9rpZweOWcz#{9x)V-$Zv?BKnMDtpBIpKWUirhESPwqqMzgymf*lak@ z*0wx(xk(mJ(8j`ibe?U9Z_3|WP$TwIf~3;smM6<(J?e?Z3#>4N?TpS7lMO!i1hEpI z1_s%gOA4|xO98UzBnz^lh(LBmTiWl7RY*!HZCUd{_T5R_WdpKcG7GZTPESrx@7s4^ z@8Lbu2M_K)g#RC&K2Q{JpG&1l_t143XFq@vjc%BFICmBLx~w=uB$Ed6d_G+Er<7E`x_#lD5kR55Z&>54RlLci`Zm z1A8a;?b*L~|A9S+jugeh@r1t;Sa>5E6~w}Wx&7y2p%|q<7T%USL=P;CJ0D|RM5l0& zYL&-9r8Djh>L81Q8&J6P{wCDof?Gw`X&ihGN;nSIa3OI}k_8;xgyI2lP&Qoz4*D2f z;9x*k90&Q;<-$ShlHwp92&SHi4HSH%lPnI3BEmsS!$B5LwVbaqIQVGNcG=({n9Snf z)$j`s?>W5Z$ett9hxhM2xOdO~!btf3gu@a@_#QMWh=d=@?LQX@#VGxe@RPYi^gzP6 z^D)*{cnS-tUU@83dgH#EI>=(-LnvH&EQD%YaQ_8er?K!clyEHkS6oOelw<)5A4c(j zSSXvywKafG_#KQcu<*Nd#j%iIT_!BN#cKObb8&!ppyY0(7;;cl+@c;GP0F4!&^WA> z10Us2rRJ+wr`5a+Nd6+$A3W!H+cMdql7- z9x$^NjS3>=jk*2jBBdCmKT__^9U_+nXbnfotnicy5fSB)QYnwSg*wP0A`=d3vRj zUtU@S@$*K^fPb7UCwwxyDfixF7L0lxHJ#V#IG!L@8Vyrr7zQ#eMm@S&$`ly)Jmyvh zf&Q5E_DqYk<>`S*G)!LFi~bzs;bZ{z#N{+kc@rgl`ahHteNppV+z%%r>E`s0+ka+% zB(;L2IFZoeDsj3WqHctVRgXZg%jXl02~0_TC1q1S-iOe<2dCW$UBR~UM~9U8*t9~+ zZ#c*$)sg|WE?hI*LrC(ul9mNq@k}AgR}<+hMTQz<-KbDv`EssU*vi(zr*B|sG1Z$FXb=`N}dCGz1lLN5x7+#RA8JQ=1tb1!%~rJtD%=M9#D^d=*n zN^OYzx`d5_wH3kF3`+2DdNxMb=!|1E>S6&aw2Gg`<0S`vTLVAolq4;A+Ma63MqeRO zA%3%AELEg}3jZ|{dRSh8Gta3_D z-qdhlgv>?-8T=SUBe<&#pgm96&wTT6M=3GhF2r~X{(<wza@4o-6XZ*H&Iw(fpGT|gJ+qND6b~wvLHtW;$?uTl z`D;eq9osyA@sXr0d*5=66QoqK`&x&N6`4)7PZ(R9<3;zr-kZp#n_PPYY41X#f_qc23$*hKpdUGYscel^H`l)$~krsv(8xP;@oian6cLr??Zt?kv39Q~_Bz#*?I_2O4g zxMv?+wwRen6}v3--eZnQ+E+{pww zC0h$rcfW`6^lcF}mF^azGz;)Q!Bj69z`wAVe$#X0qadaq$ZL8{K+ndDb&q#5r8$r+ z1Ji#N>vWfADr$#d^0a&@Jbryk(;|9T1@81+J&_*o94d4aO5T?X`5pZ5qE?giVY2A>bVJQOm3F z2m)2d!ZoRduyB8su$147 zf;P!MES%_J01Nj8j3+GIGjzo*9KTwOg-fUz+`_@Mk%a>~E;kFOD7z9ZoKF4XES&18 zkA+he6APymDGT@QSoOQFn|urRt)%TTws0EP0=6$x0Qd7mSfwr8Ptml5h5Nq()fZSe zHJ9!WiPEfv`x*)_k%iM|?1Fp!Z~+UaH7Q`>RBg?|Nv;9$Unc=9I}5iHf+!cm{aZYd zVClxVah@8<7*4Ve3nzLQz``BJc*4THgs!-S<5!EZa0xX7Te$nA<6pC8me$0bT(Tez zr1i9M0y^^c{tguK?TCGC&tc*2-+E0@(txDOlm&Tpu3qL_kkd(9_9x3eKIId`aq%*l z5HFEdX%jMsrg>{W6C}+RsJ_62sL6C^h|;VHxf_K`WX*V|_ zHx*t=Y9~-K4#<5a$)Kwh(Q~qbk=_Q`9yLxT*)S(nHq0$D6NXZ-jvBY)2rql$R-9&m6q-6RwD|86 z&N-_tg}*eNsR{YhvJ>Kdm|BQDt*-384~aZ+_E|uug~^j3OCN|8pYK{x<^q?L)JEOz zpe0h_*$i}S7Gg&dp;k8-#R;rN&~Rq$urZIcBswY8s;h&rb{3>ldlmAjjIiwQC68lX z*Y^ypMY1Cm;NlOYl;cwwetYjxB!_LepGF(<=WyPZOY-75QP1f$8EUMoY}0%9U64U4 zBIVz8Rm4}{g#%^`eta6`3p%Yf6awd*TIbq05e+G3c-~Q^ava+>>swZUY{-Br1R=82 zOuvp>T8f$>&%aD^3@_dQN-Y0WcnV19^!y}VpQ9+X1XOA8sk+jw6%HN zHL7PF8snI8p1L0FiqXJ5p^cq>4jQxF9^Fjxj*J4_g?87=5 z$>oz8XTI*FMgp%=?~n|l~7^89FR3W%>#Q;@3wZk&!O zF;=>6xs7<1k@Q2mw}`WhavsOl!G{RtExO{NJil5*C?ChMgFcGA&q6GAQFf{qAI58> zU9>P>8>3Gcuho>U%X+;`t%cvhDjmkZ9ZmD# zClkiMtw8k!VZ545ml37eFusGrOBBYZrtE_I6h`hF#_Meggz;K+Z8KOh4#Yo8GAJ3w zFR)VZaWkR4T#e~4zDPs0WdAlMO(J`G$!5$wf1zsmZnA0fz+WSUzd$WS7~hrMy9$QKGVYzl`-+oz%g63iCu?4FYOc|#nf}zC z1N#n6AK1_NrsJmvh`PU;;Z2LWUsz&v3|_RllIyoJWA|2c6#@ST+Qado)IObiV`&bVCx2^<+WmPPTo%!%RN@22M+F9n*Y#nuk7$CBv*A^Qub{W*yIn zB%jn+Wp1WM1y$x~mzM^)io{zqyZ8&M@&&?$%7ZytOc!eM?k>YA5715)pFEOCsmaS# z9T}iW;E?K{+lU8f(!=Q9qJMyP4t$6JZJw@pfX1(uL4bxw?aS>stMoKL+C>l0htSd`a$snxI$A!eBQxX<`YFWDB)d8%dXPN>{$6uI|Ydbr@OcAYC$5+Zy$w~LE;8pbxDH6dotq7Cp8Wd@1{lt zRnf3Gg0}>M)3e=9yK5-ezoMFmS{bT&!1p>XvV89115${)QWKG@1~TB2;3AEDZX+J> zNspy_i~a#010N#bdmCNxfRA5Y&VWz6Izr*hvJ3bWX%{cxQ)BcC_*6~l^Q?zYMNR+- zPYd`yjLFpjFsd(0^D~=)Y_8oBw;;nd|WW0`VCb5+p0T+OR4iJSlOjF9q4jothc)Tp3Z^+~3SGc)_t zQd97nGW2o>|2{6Pe7<4_pZF>@1-S|!9efE964Y}WaR*;osO~NLJNOTQ58>dyg|4`R z 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

3zh9{{?Zw!5dEB=cK77+zTnv+V?Lg{Ml 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 X)i=LoGt)%)6Vgp@#MGY~OX>d~HtpS) literal 0 HcmV?d00001 diff --git a/.doctrees/utils.doctree b/.doctrees/utils.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8c6fa94389313ea0efde812410708d09259a1e0b GIT binary patch literal 44007 zcmdUY3y>Vgc^(eH9dL&?NWi2(ki(a7fbIbTghbGUWC*17APLcYNwP?9=62_9rm;J- z+?mDQp`w_wOclWlm87(mOxjA6L{cS^CsZ{YvMyTZ2X`D+Vyqu~b) zC+x*r8$rF>a{Q?Gq2A&5_1@c?ji)>IY8Z4ob*C3^K#jWVH5(nr?>*UzcT)ApYlaIF zeoN@oBQNk1aCg$3a<@F$n{}t-$;gYEPU=y7-I<`(3Ve&&@S=5Vx$ATAutzWe+5D)p zMz|PiKGPF;PPJ`d74_Ub@pLUA!`&25N$k(Yo132R^v-sd?0CkGqK>!JjX*U~xyfsU zMA4Rd(+)%2M0wJ;TcWhJ(QWICCA)sE<1AC1ZoDP3SLjjC-Q^x|x4SpEo7{u(9gA+z zauz#X-*-BTt3l`7VraL)?T(`hKyp!VuM-0A8}HxPU2-?Xlb+vj)>3Q|9CU92p6<ZGqn_P$ zU+2!J$oQdA$WSdwTH5P(gRl@7`72hioJYXD5&VZ_ry(wTrDM0<6s7U>V_Xx67_I^P z(|4q#f!}Gt=Ciypdmv|soHw}#-8X`_6N)VK{sTg_-O2c_M_tDf9I@(wAK9KCS|LP- zE7HtnN+&JbZ&*@278H8b8_?9eqdYa6Qq(LcYD($JR0#QCG{!gH_wd8ktmi8>C~*pf zIoyl)X74PZey>A zev;ki+)J+J9=V;XE6lU+haz8^$(&MCw*@0q`2&YC}Y@+6FylxZUSnqXo|suPxy zBT5?mPYy;uo>=YKY4H%A9|xWvqRDf?d6MhO{DBVsP}m zto~04LyE86WZOBJ03@ zbCm*$0a3-pCx$;+>~yT6f{m1c|5x{QIzh)eZ#TP6XmvxUVMT!j59`(K2&Uf)$qrhm zvSc@`h8@`pGiMMBan-au3F0kV5gbLwL67ikT^^*6bF;0dy0(wF27bc!nodJO-;ss2 zBdg&=U|G;v3>`m2e`p&6!{TK?@GO$EGJXY>2l&XQTDD(_=Gq$t_y?+7ISM;B_(H;s>g@ zQ{A4YAZxvMG2Sj8s_Q+dAr&!9D(&(Ebx+l!mZ-nbi6W?6?;>e;i*t_RMn#=l$(_4y zd_&#n#dl}NC35Ge{&XWbXv7Ym7i zH%$@2?xAKxpZ`qt8E-qfaO~vCH=I0n=ZU){!-u&TcGiebv6o?Q2M|o|FC;w|J4W_| zx$!UcxiEM})%Z}%nYr;o|EL<@pXHSn4^fuZv8-K5hYm`+;3kU&qe0niXjS-2_a*n` ztbG5t&ojE;zzBLpXwW70EMR&013mYfydXVbq60wSkVG3o`IZujjQn+8bL%5*2d)kt zs_Ct`5gZ;|V7=RIQK@AuT7H;#oRR8kwmqL?o7sFL{bH{r2%dql=Mv=2V6gfLp-BrR zY(LwHj@ZZP&o27&3Hq};DeXb&BHPRVUc>)h%m41NG8EjQEy|Cg$ zh&h*P*Ox04zvMNlntUZ@efzF6V0BD8-=7wvj>x5OtVL8 zTYjRHxJr&isYJryL5>B2$q}YWBEp`2Dlrih-VE-uZ&x7G0C7QFEj=vJQr_KgGExa}J9HL0o91e{+IRkxek?2$~pnnwsGq zv)_ZENcui9x@@FZR#UKvOGvwet*SX;1~-WLP@1k4Q#L8jk*m5t);BcuPZ+6>C;Yw% zHTJ^JRbi>@oZ#yxEr0RzW;_Px|?kc&;qIy42WrscpXAQzSdK zg2(x+N1^`|p7DvSJ;^*|(8egj{7{~}hz@_fD+mXg?J z8n%jBaiMAbu(?aji!a;VW>n)7ZQ1VQYr<~39dx2v*uqrbQ{8|T-6*tXy);&X4Y$m{ zm_eA+iM1&b7sgUpJFtV%tjqg>bTC zTKFN=*Oa`}{r#o6Khu~N{gvdAxq5tk3xmq5(NLv%auKBC5>YxIKr-wu^aQ$Tc7#iu zW=l&Ef}rWx{+xxy%^$Rz5MSuE+Su^Yaj^5k&y2D{=@^5mPvux?#$QV2lLI9~PjZr( zFGqkDLB6fwBKVhOMPO`_y_JYL!0sEN)ia_hS>61?XU=o61yS{NyeeD7Pj=|evO81v z;w=wzF(*DExz>z&iCP?(-{kw34&wI-C~*+%-c+A`CS*m#0g2fVW}IIlMX|)$xg%hcg242{je@6+_I%e1+aPnRZ~anoPTaN_;Yn zm#R*t$+@elt2Bq}j@PVt{wNDH2XYf?Y0%<{wfINIKlhaFb=WHX_37%fJZZ;Jf)5|d z4BhJ?!@-8bJVSRZfxQY`%B{<6Pjf}(h}oNZWZ#z{S~UA(p1IRRvU{nSf|jqfYhG_5nlG^r;fGO~C*M2M`iYe}TF{^* zTRxwDW9FUgY3lbyc z9E_15U-eob2(jw*;e;GB7%l54(!mhXLZxM$&!9)Ktn+hJ;+}|?s(K=gOyxZTN0yP& zc1CnZH{{$=26liys*T?t<+>f_kY1CiKX#AwpQRoZE1}sV{aOMWUj;tpT+)sVUzAVE z-PMEbs|l{2(s=Bt-JfRzc6bp1v}uatqkdR{5l?NG0jsXunF^!JQPX!c4^B(PV)D`n{J+wmOl$UPT( z8*+E`U<(pl%X=kFC-bS9tLT-UF`{iW@$Unu$vWgxrT6mcWAI8Jt&Z{wRZ!L*WhAdu zC`{c3dmK2F_DW9?&6n60@WZGqyi!I(Q(j3a5lr*D32>NKI&939&vvm`|{{E=v(l0W(?dKCWXe^QD2BVMZPj}l}m`=hyfGr*hM zSWNW!a^sMFa5v`iq#X1BpJb0eQ|jw@m{&TOgHV166X&h*Y_a=}RH$NYG&`ohNMPfu z!mM1vv@6FPl`{3+*JE$V zCH&J~UOnrdCN(|TxxCZ^nt&A5G`Ejc$9ka(*4n*{kDJP{=2~O%;ayVhdI=6p4HKBJb?WBm|)^aCkSvKDO!3-ZJ_P7w#Chv^5 zssgHo`7R=C)FncmM*SJlBizglR)S1r zw>6J#PBj~E6rXqCxp4Bw5WjU(&Tr+xiyfC-4>RoLzA4|3a4X@QNVvzcFm%zVE@r>- zOadD(jo%69iSN&OcK25iX;1$HJwARiLAreAqX}jop=JtP%ML!2m57Rb%ao|WA7#yS z`U&i`y41M;tPyvkd-)VVO`|%O{(O>G&$$O8A>R5lN3f9^+jO1Plg{s?N zPXmY2?&U?I`4anM{4gqW_p&#yuPOhc^a=ju#|XAC2}e{U~msu;0$06o$6I+BB zM&g3njQKZ&ooTNPds_k0#$A1P3wuEu#BfLj-=8N#2>D>vSy)*};)=+_30aZdYKMml z_lPO0qIU2}YozJEp%mS6pV)N(D&E0IPtx%S4BOGtbZG4I&FO)fAM6yT(C(dm95rJa zt~Ocj&sjX-=!NV(i%h*7r7{Q@WvdCcdi#Pb+ls+z~h^q}f?xm#B3ZWs

hzCa?5h{lf&O^2v>+hy4LHQ;^*3%E_Q8y_r}m$ZX_I_#%`vx_@Ov z*O^RbVwSovOsp z85WutE$N~>gSM3@(O^DQu%ps^=tWWmJ|FrVm3SP%OI70tjZEeF&_jOEY1M2xoOVb+ zaeXeJ(0~J?iYLY&RiyhI7Fyt>z=SeR-&mrGj~i9a994WQfsL;;Z*rlBapL&pag**j8jzv_{_GL6AxpHmVK1W5(vIb`MDr!~3Vs-sxnsdOnTfXRt?Eh+Fkv4hsG;8F@L4otH@yoE z&fmuWFbirOtAi`Yde3~@o3q-U7)%gJ2?#B=Z%brUPL_?$i@eZJ6NKuWXauHwO%B*v-8M31dU1^ofc5-(v)ds5geSP)apaM(Gn`mGuR6X4HQC>*N;df` zO}18`LH=C%cE5DR4ozjUq7ap=PrwQ_e0Qu}QV6Sgz^v_jCf93Mgm;5|dfPLnXX8o~L%KZN7xc}(o zpb<2*N(zPh@goxViw$})f6@tgW%Q?+D{Gd-^y{1 zzIKD}1!2kD$EQJ3r_UU(iWG3F1gj0ROF^zTrg7A0HMOg%`u1|9W2kRt|#T!o_o1M9U+}Mk%V|FKk;DWr9uya( z3`jDEJxWzA;`f!ooG-cmgVBXS6qXW(SsUb%yK*DSx*LJ`lDmq+iXlc>a{m-45mV)# zrV^ie;H9cl4>GT>y5xT3JpY3vo4%EI+nSGUj~!Y z<}5p&%(L3Rl)zqzurxz;!Q4Xbxtv?b-qoY;za_YqpIgv$vj0lW6wED5CsGl?Y&Hom zvwHrD5mDoG!Pfy=V!GfZUOk8DdO@Z=A#TDOqNG_mvCX79MohnV`Iv6P2#~za%*ae! zP|+Gn8rkcsBfAfvBOX3{$lQzR6kXX%=J4SOK_M~zXo{8-=3XisJ1jaMY~FMG$c5&Z ztM{#l6pkX@2Kzj8qV#mZ{{RrC3mykY7?s6zLB6U`du z`bW`)$xTyoEpseV=n=#EbG+(Ua;$IUc#w?=bLK~ly{{9{h+}V$Jkl6uRq!@RsS2KG zR{!rZc<~JCuQ*f8_)At3{-s!L6f~0=l(Lt_`B09PJcCk>sTg9E4CM*_e_YaqTw$;$p52}}~;@$mKkCKS8>DVxMGo604nA8Oex0vx8{k z+8z9M_Vq<|7Y3Y)8e!XrurY0U5}+o_oePuS&8ue7 zgGBQs_7(gvD)Vev65+*e&5&54W*r5s2iR}8SYC5~bN^>QJNmE5=JzRcMBB`8b z*81k%Ex!DB)eJ2-`0EJ=uW;`4M`gI6;V7K>MZo@*@h_yBT z?K1fDOs+M8pruHN&Qc;V>x9hYl=W7w#R$YRIpr~nAx6pMUH~OxE$l@q@l1}F{+2Si zBQ5)!Q|ma`yn{*5l51fZ*y0@SN=#$sx*hiJ$nH%2*|o7Ovi&M zAB0K3n|~dgeSzqGZzVvf9wv_csz>WpA^i ztRVPjKSK~uG!XmUgjh2ey%VSygLf=M3zgon*tb&|_x)7j#+{d{8h4FM<##M@;b)!< zG3@#C1vpHxL6>_k4DVFz6g~1UO4+TkSldOgv#PayT>^V0UjLVz%Fnw^%KKunOeybX9k-QgkXqlO{?4!&wd*%^Rr{r4W{iqRdqp^Jmpe2m$10z)L zGq#1SNg3PMqS4aE_6LaOODw_O=l>-XMf&-G z1csN=5zd{D1l>;E(eKn@8%6ybeXSRtf?CB3b*)8v@z}|eC+@uC^+y-)IC}i}iQ^|Y z*0a!@tqMBjp`Og)$bJ`ZW+dzXbLus@k^4b6<$yH1oE$2H*`;5MTLDb!#W%&dD)d>thQfj{4k zyrvhe&o6g<9CjY~Vb4(%syddeW9d4!d+5oYd-zFyJk^YQ0D8=I*`0%iZZsKdPYa^V%5z_Q<;MaKY=HTeT_x5Jv$tZ~IX7BzD@roh)4IO^ERM?C6G=e%&5H8@AQ=Bm6H+u2Z<94%)H+0oopYc@Cjqu^> z-dT6o*?4-z@f|U!anYc6dFe1+G`p=61QAemmc6xJJh9k|w+R&RX%qh(D$K~sZl{T> z9Z^unw~FiM=qXT{1kRoHUc7f1&ES*~>~TsSJ{#`{v9;9iwrXqil5FqUcqg6P)vl4G zXrn0_JRt6LtxIq1gY zoSv!&{xZk}N4$no2zM&pX?LTbrfMMzv+-_c4W|mz7YQ^Z*OGcvJMZDR;h;lp)vz8%xjhJxSZ+~61;cJT zhzW7@8XtG4zC%{4EqhH6_hc{LPbG8`IvqYX9iLijK;+vx_9{drF7Ka+_t1EgZ#!WO zw7jVI;O;~5&bHIW%8z`xnuys>cj!a5H5wZ6b;^0*cDT@9N95@*1f3O(sC`tEBY>JU zd^H2&i6D-xxIcgU(L2Gzz5;Y2H ztO({7Z8V%^vgYyL%w5Wt`E9heoLtb`>|TT4-$FM;eAYcYnoP%6_!dss3ZUE+D{R<}AnRcK zLu1d!_$z5}l-p&L$=rzDHUa96(4WuJpU?BljVLYBANoKwqpw)=uYxlAbSVE48>7#) z@ekfG`YI0pHUXm#81UmK8J$td&kJL8s2D$1gVEU={EZn#uhsC~V2rkm@g*Wg>qv~| zFBwg8@{pTRT;7d$q=y0*&W^f=0Y%bkour?nI`lhMViUYom_ z)Sk|?IIVi+KzlRo!+CY09!$}`d|UDfVhGsdI=+gDK?jFj51LJ(8f~G#x ydlDaby+qP{x=~x|gY}@MCwr%^Lo;mY9^E)%oo9F)2i+xw^ z!di8$s#UeF9VRO+0u6})2><{9EhZ``4*&ps3;+NW0RH7OCko;6761UU#7sayR!l$u zPuAYX*v!%h06;V>F$qjjK@DT@!s93k#T~jGV!AY8QXo#-DiB2U8$Jj>B1ZrrZEk3& zu22X8WHe}Ocks6czAC*eya3-C7!+P1BiyRM%(dE9lg4k z4~*&4$FC>=vT!|ir(c!HdrV?ab+15E0kR)OwKzE9c}DiYMe!#?N>P; z#>XI_>_i@60WJ+m6k@>v%&>}QYE;8Sap`L`bO#I^+`wB2PDi(Cm%wcVUB%4Jmnm^Y z7V*xro{8S`O){ED<5R!wKedm7t_P%d%joUDXANF;5;6%jRRyDbH;nEgHFTc%l{!aS z_!O3k+Q@0^*L>RiP;3 z@9GHvb`#1DBq;UUo{F5Ok9FlbzlGoPn0=$79GJq-g@v@ zG!W#9KxX}zX#q$=nK3uPHR0K0sq+b_o5xS&{&lY4h z0C5w^6cl@tzUhm#pY|mHCny0e$hxl`Ekpr6cn=>^C?pvlMl7}AS2bSeScYAQCjop} zMkFX=eoj&FJpqku{i3fW{xAa2lQffThxCrX#{oD3z?0u@ah`$lbm=LfO1s@J1I5XZ?6qvu=7S(WoELQ@11 z_f?M}=U2)$mz64VR%AKG5f8)=@DetdQe=d-@^=<|$?lz^bYyquY5~y-st{?+Zk>FX z1U|I8b@>XK7fv_8s*9HLO_G2FQz5jtYgT_;zd|2JH<&hFl~Ng}G^W1)SvRj*Y_Wb3 z;ndrb;U1v@mLoK?Ys*%g)gS|r8g8)9XdBYb!*0+H)y~CEph?CRK^xe{@1bXK)9rEW z5%QJp74%i>mDW2APiT^u6%Gi(lAk&!!8T!1x=8?yKoT)O>{*ahAB`@oDNI$&l0ci7 zo6s9CPE?)9L!LHFVp+6=D3eHw6grkW-sqRGq06;+O>A4HrbvgNx8yr-j_mEXiUc%q z5+ja$Kl`9-|7$USay|0ySX~Lr*rFuUxF(7#wD_-^Xg(Yq-~eBv_0 zTH$2%+9m488H$~=fs9Jan(VUdN-cuVDYwu^@aP$lKOzgiY83G9hmInr@{xy^NI4bO z6loNR6sr^q)TpX?sRdhpx2!&eSi)JdV?$@7Xa;Y_YBq1au_tg#X#2q_z%A6F_@3}8 z@I(V?4(S-=8e|121?hrZfTV<^g}j3tfs~Gn`^{S}m&}cvnBq*)T*}87UjFpW2-p`CMPBvrjBLpdJ1!ctliVna67y$MNG4c|dsAtPBa0vlt9kQz_X?@m zh8gKe>V@-JoQ0`Lh{>S^vst%XiOKqzy~FdVv-!;FnT3eim6C-LmfXssiOGo>n^_-Y zUOHPkQI;aQCYw;EItEGRRhvZ%5KJ{pyU3ELbF|(8<^j!}w*fB+T8Y!-%cNP#BNqJh zNvRr145=@Yds1&wEa?qt9a<%|jK)Xf`D+rL>1yfuDcDRN=F|q~79C4%Yp?A=aiAl) z%iA5q{nI1%0Y>S2925qnuBE`rF=fT`fb$yV9Oa!$i_74aX_mrPPL>8%4@>teL(8B` ziHll|gNv<8HdPl@AE&xIu}8MUTQVYugNB0!(S#$n$^A4OEtZpFBVk95i(K^I&PJ{CEig0CM`E`-w~f}u)7+$232U#k#;&78%`Zs-iDpBo#dU#@51ju zANK&PT`amPUA22HBW@!azwEN{4qh& z!OcO5!CcTR;Hbea!lJ@uk*1+3;kTib5lBK*QR=8p6zXhgm}@8j5n-XlQK_n1&H4}F zIf?TWP%7M-`JLn@b5V1{r3%VfI)u%^&HIj&B+T^ps;4T(c(uW7@PnZ%s4V05CTDu> zdaX4hOL zq^+CsFnA-`F4&dov|?V-Y#%H@)AuAGu#gLY0`shyJ7Zx-j(&V#Pz;N*wmI>wNRfwQ0u4#4FWNO?zpx z!dHuGukJecI;M5uv_no$$<7wmF2**dXu7k;s&afC+oMz2t^`N1Rf*+7VXe_>W7hlr zy%kIomJwT#L)G(g1phooB%~d-arSUd5vv<#i2eH5v~TJ>>&)A_NU4IV;!Sz56mc$O z)`e-2nGs8YOL-Zb1rk#vrjm2rqi07@BVKG~%lK)3JAU)$f z-8RC<^x|IMNI<3qdzN-si+v|WQ|Up;#@xw5TZPt9fs0PtxnuiIaBq|Y%b9h} zg&cpC1Qq07j9zF$6hiDg?Y#C%l{OsrULOW7E&^34Sv&z7 zdm}t1YDQ{W0&Yk=JUmW&Lt}P%LE-;Y|NO^AVCv{-%T7b%;^IQ>!a!|fZ$d-I#>PfN zOHV^jPxbi*m4lnLqn<03wFBXwjr`S)ppk=ty_v0}nT<8x?{@X{ZJZpr2nc?6^nbrU z$7$qh_TQeY9sVQMr+_rSOK9k*X=(ngnxmQV|Bq_FOa83(hg^Sl$N9T4c3Cr5BTF?w zGbI9{?W}pO8z_0ztvRzZ%sN{TKd0N{aexBs{S4dyNtb=(WjPv>w=q( zlja|J|9PL2=C`8$rno<6<&WIYY2k+Cr1`%o=7t0^S``EU-~|v9te;eV5#L?{60okS6XD)K+d01>jY$31*OME{Yf@qv(L zX>!JOmHt^K>g&&b@z0I`5t;(QWo0`9*#ngD|D`zjSWs3`F;J`3*(_^!*RUwYzPr17 zxlkYkMi$q^(f9#;s zg8p3vB|@@1cH1B*l&ZcwAFqh1si}MVcUM>4N-A1G92aefdU|?$1NEe`&|i>{knk88 zk*KMuJ?ZMeFm`_Hkrx_H7Pv4dC`eRHj89t|2ZPyC6*!+(;=kG|dI32$GBQF|X-GX5 zvRrR-Q*Ci9CZXi`9#dLMAsmGfiHjS9LZ#j{Hde0AbcYgj>Hmjz zyQqPNYsh(ca6@3Q`3((!YMG&h{Y~v%-+A+yj!nihx@#x6Bbu66N3hP?&HACc^DS>jn2{DnsFP!R4pEWpN>ol+K`6j^;K) zwl$DXz*d?WKF{OX6>yVTgHHKemSBIWoOg}j^0anhv-P5bPg%L)o9hIy^qs5>Ol-bW zxZp-95)3pjFr$#IogG(T2xzVv1Cvp!YOc7ZS~OR#lL_bRuN@}Hfi0zt+S=NyQHBY{ zh}eooNr+c+nM4;QET$u+92GnD>+%$MgZ}}!W*SIB?0Y|I*4Aos83M)WO+PD*_|T2L zqg_P^fQ%ZN%FkWh1N}#2RD1~(YLz5^Y4PupQ(nzAL1xdEqv+cJE(Xwep=On z^Jb-D2eC&lKe#+DUoJW|W=RPM_|tVNP=Z^}TTZI<`ys8UYt^UP$##Q$RrU=`&Z(yQ!zXLmkb%*prMjT51DI#y&f zo9^q*C_&LWd(O{TCO*|~`MQ)-cDr9aY_6KxsI|GN1u7Tg(6_;jk zk$5~KYi5u}3+V)EtW#RryNAE6ep8;<_HvVt^LA1omuj3|iH@0BdBw?MzDzANJe>YX zhnn=fV*JaB6P*rfvxeld&?5@pn#?Zp?q0T&D4KiY2?);z-0m>{p50Ze&^Iu8d-_Y0 z9`4;xvsbs&#`FDc$ODXb=&Bdg{oSE>S!|7EVq)SPlZhYs?Po2@W)d7q!Q>KW5!z14 z0f`r#5#_`W1wu(@FO7reQPi%tS2?j2)wXP5BUk4vT>>(&A&o-6@}2awC!PE6r3PF#_R0c5X@+A7y++R?C>zSEQ^QwM#z;8g|@oTPYo z2A{8O;x%PPCTfd~UM%!*zV}+{3$`4N!CkvC2DAlMXZgzBq^SA_F&8^IEL3CYgdx%c zx1=nQPG^ zGyA-IwiZyI93A(_L9Eq~WHi`j$P<+??at=6rqrOK?&tY6enS(|@a~{R)vmBUT+V?S zA8}GvC%-4b?w{hHs^Dnt=^s;Q_|mA6kc5Ec;!MHLV!0?w;vyp>b9=GT8QIy6LtZ|d zS68d7e8hUM)tWPMXotpf?!4-)pi>mpuYTVNk9aQYy)#KHyBW@CCROBQu?VpMd!Z=o z+gP~@g*uY^gKXup_hCga!V5kVe8fUX^da&vT#ry#x9<}F5N_YU&#DujPQnY>d^%Gk zC#ij{(Md`<*zMDXW&r>@FKq)y24$|L!=t)q?PT<_qPkTz`cYAK(fw$2j2do2+>>YS_e-K@2gA+SUK1BWn^fd^q#wx#L?pWa@p?NWBPuQ3uryj%$LRU-_Q2eGV(v?Cr-Hjz z_i;@#IfCd#sGd`7iF$svO%ySVyzMCmcumg`o0S^8T3aYb3(Wa!f4>hI+!tS^g={qncxPT|E ze5@b<#2uAJSXRyF^TWY4>+z@lPIzTC-F;OCn878s!DM+gOZa$Z-#IXE>HU_iM9iR! z4vmOr+BE!&L09?CBn5vvNmA2me0r7b99x}5LgZZfwB1SGL*CYssv4sWX!MB0PnA4r zG&*}!CL7k^zz$D+Ay|F6zc9&u54i;`0fISfuA#At-X%xo*h%MW>UGazhrAwu7|=Tp?(uf zt#bkX&XOTq00P=@9Ke@}$uF-h;Z>8z$Xud-8;7` zDOYRok)F?PUv2h+dK7%NIvMuy8^>JRSerwD&xU$F+TZBC#cYD`wfu~1-hJ_LX?ju$ z2CFyMmL8oAa$jSAF%+(hxtd;^O7)T_b~jvX3~FRm@{{n>o;KkBidgYe@CLqm-C5Ya z4Tl{rUg2#rAzmDBy(D_SsExVok135!I1l+Ht!1~C0)e(RgB+pb4JD>N^8Iqz;f8J} zU(D2XpJvp{21nT{6702S>U@~5$!Ht<5JNt0&JQ>=QVwyRX5f_Vqc{4eBUuT<7cCA1 zmq^@DJU2KK>{_iD0jBOe8K^-_S#qJR>b;Z})uym?Mhl4ZQv}1%t4C%|_g;hP@h8>0 z3A9MtJAPALh21ANvrabKsu*=e9~HFYp^x9Lu`W@zWOHJ+cHGNevJS1?wxAlCR51e$ zD(SNW{J4 zPgG;{z!r}noOT<`SsxP45~&^QxKQ29)8gYDLSM6U?-}CC*6#B~)pfeecR z>RzV6bzHfsS08TX^KG0En6ut_53(&XzNe-OkEQlCaK{ggP%xZM43qECJFd%ij3+!8 zjbNDrEE|;rq$97FkH7FJpDr=6Zf#;TE{?+^7j>$(Uz%+@cH{)Jp2Pxgfxcq107BD$ z3@nWJbiw9G(XNik$}CuTWa|_PmW5JvC3>x7A1-1HIS^tvwc;48v>LoMN?hKZ@~=MJ ziXs{1Z$6#}up(jwmFA}FUA&(yR^5OslXr8z`PSh>uRVh#>Dq6O*6S%e;=xyUQg&Zm zf-^$ECIY4gA3D6j2~ewrg{omgnZWnF)L-?zLu*tq7l8K)>x4OQyu;zIfnq;@<<*s= zXSP`munOBc++c+@F=C|9;P%^+Go8W%vq-k-F`KZxMV|#KY^?16ai;-KPas|!{Y#oH z%2>+-pPmbF1*UAUqJVG;e{#-GnU)+PwkuyeJ6qPA#9vzPSuI17WnNym-a*Dn#M6^g zdLON>-L23?PpJ%C%Osj$5T6g5l{mnQV|(u=1plKn9LC_e>ZMwo`i+2tkjMj!nKC^H zT4Q2Mgw9L){TYJuKBt>j$IyWC*)|$q&$aHpRl$1gofsIVmt=X=y@)>9l@hg8mIi;CR&1gPHVCqhRxf?Ww1L^Dihi^Uwif*qkOW&(v zTv$WS@cp~W{sv-JDh)6D&Ulzr)ls~V>hloH>&_b1#d@gyi5wwk(tDU+;>!{})6-;u zQ?LV_S*IB4v=LmvWF^JA`dvE4MM!N~e|#ea3>_v5fJh#l5k1_AC~m6w4#aOaeHP2F zHw4xK%1uSlpFU=z)rE%r(;1Xg4C%QG+9@NhK{4*=S~bb?`f^vjf8Oz8T_ls3A-a%; zqq%#hUq6wC*0Jz#FEq1XzLlO;aaP*lbc2!sXAyW93=M|@7hEg!bO~$o(`@-<2+N6h zr*&BK;pU)R14=~&^Au&aJXQMJO>YUig_|lxY02KA^hGcxX{4ZrT#ZPJi@<3QFe^UP zV-WfQ7HdS&k5a`xK7zw$(A+gn42;aeYJsd39k#;H~6JkYInNGj$4`B5b_YT_1UZZj8u@WRq`y8TWta4zc zyJYY>*xU)11WLICHsbofcoM`GOM=uuYaMFx08C+H==W=*I!1yI@QgHuU3bz9z@BGA zR1#ivz}rl`1GYx*WjB}js<3d<+Ep1ZU#zS{OX%;!68b+kyWZ6-eN|ypKrRY&fE<`x zxc{C=yc3&{;5&0IH@?)#RDnJ%R`>c6XiE4MMXI^-5$t|qpl0J9kL--I2h)YOuqxPe z?UzFN9)ORY=W#+^YZ#!jZU{aa(q2qk{EDsmv@^CXF~$(%kTCEw{@X)94MHB8bf`}r zPVZ!Ks$-9v$|*+`3Y**U*bn~}-fTiYb!j}D80gj#MNId+&e3G*RccsZhXZ-~@5hIY zIx4RBKUfiEV$L8J`YLH9_s&?p+O)lc_t?8^4%tl*Xfu|bz})vK=f!g0&sARPX4zt? zUy+lvA>_>s$Tpm{?2(qufmoEfeK=4_TQfxpyFP>F-ei};AJ0QR;Zq64Z-4-!dPe$u zd6U>b7unv)pUAdaXGRlr;dunD>znlWi0YCWghN=H%8;zjz)eQw7<*#mHC^d&-CW{5 z6}#h4H^o(pJg^15D+0t>?jvp0F)O40mT=~l5P`Kg#CpLA1!ZUz@I<_W-{deJgJxo9 zldqRd=%rXsu3pZFs#%+3v=<&&wfTI%}!oxY-k;tQL0ny>XUC3UU z()c2GlB$8a=r^d}hrWHIH6YB&Y7mA^#ye^8~Jfmp82fCTFW>^yebbk={vBh-+T z%DBFoC_w8=L+5f0cMG#GF2USgeWMBwMO;HDhlz6ceu9n;@+ znZLiI9gE^Fz0Did)4G5EJa+qPfxuv~>Z))e55+az8=F_)FU%aKIa=tsW4)=WPnJ{T zYwgisR-2VJjf8=(eaQ+$9ISRcGuI@YadMcEmz7EIjKXlu(Gz8b6g&ktn*+)aNkHmUqw;VjG|V^WD(; zEzPL3+R};<=TJA)iuL6@7zb-bBY_Xxi+QVeLVs7Lw=&?RuSX@H-^mWda5i4^}b9y+9uhm zt3+nKADYD{sN#9E;71wcV4b4M*Q{5hFVBJaMVqwVTG!b6`YyWjrJb9{urG-kuwJjZ z%WjbtT0tm7l~w9kDx(kZJYX9(=P?`}fw>p$GgB;Hm_HiGicIipJKnq$^C9W!esA`R ze7va!m72}d(J8^-N>wU@mo>DkYQ4zVv?i6D=y@v5v6;3s8&u+X=p1N<$~!3GT(le3 zIXz!#?d_r9v6jCU%8+)Cs07}gI*2;B2$)-wwDs?D*?qvMN%6ooH#ZZbtFkdvHa;~c z7Ad!XZt&?$7Rti1DjqjVb7~_yJ&?yn8rkb(;+h!V8jqkgt!v>gU?O-e2ISrvxGD&m z$C5Ibi)~?|X&%)SN8-20e%>45LXT|o$c>FQ)D9SeSJ*EU&UZ~uy$8Y4~?n8A4`8~xw=q?<0La!gU?aNxU3?Ftl^($*R&jS>hh z3dfe2fxTn8=MAI`?Kn-;Lam!qwpj$~D1Rn5mpb+UIG&?KRyGcZgD&R@n1&6R9;F~_ zu~?G5(BZ5HFk$XYc53`=+u6q#YOs*_g^KMOitCwa1hQp|0FxP=WWRbfvCp*Vya)y^5+rF4}&CL?m? zxk1RmE&4o`EeIOpm#MK{bc5$Lhio zY7XFbJyLHE=m}~`1dxEs*#y1ANfK2Mr)HSzV2R^s$YVJH&f8(7>%;X|cTSc|hH{z% z9ybbQM~pxiXnFXXkYfuCYA_0{!#uJNjA+@`jW)|fF`qx~p{0Ib5YIHUG+_7A6EQF# z>UiBL)kF3s5i7oz(Dzsg<&#CVJS#}2mup{e9*@jhj$s7h(eU7QbO5p@XNJv~(O+hz z$K;WbUD~q6sM76m=%~U9f%bp<-W}^saJzR90aOE|lE}RH<}j5j6hS{18Wz?q#j*yH zZ&ew|VZRGLYaWoFSzjYQX!p9j^c*3Mo~n4?KeNYAMfo-0xv}qK-ZNmK0Ylu$VivW% z%zQ>GhobB)x1x9QJ}bQVIYhOP*r7MEaXrj-Xoa>dE;#F;BPy%DO1SCj*wn4jexRuo zb~|FDvwQR|xCX-sGs>@oa^hqQ_km%597#{zp}Wajv1zepWS7kVGlT1mmICx9=_tFL+XnuyD@Z|?@mZ)) z|7=|=RE!)Q{?cY%OnLYLxw{>V9s2{h+QPt4-`9TJbnU<#gkw&GFM<~EI9XVx{e4mgK}$naxJ*lWNP(?$*@P8Jxoe3v?M_!LJvG1xw$E-7X_P zH*OS!%bItrCk@t)~^u|rNrxbGvTe9+`ZsB{`L8S(-vj>g9aT|ZoH z#*sL=)KFqIIB_xS7~@=zcUXj4X-@n(UqE4S;%kiPT7{r?j6faTm?gLzRjk*B$5wEo zey(!KpGO-x>>B){^V~G#WK?iH$%{O;}*sd4@cQ@L8L2670kdb?k%YFO4) zM4H7bQoDb6S8_TfQh-|5ekK(8c4B8%+kE6<)Ao3AvNeacw~*J?QGyUN+#o7*5N)BO z2~v5P%oHqEW12M|;T=G`N6jdCYEw^XWvI2X~z=)nbpU zj)7H%^B&pyp|bfM&IqMf)E(0=XdcsF51)g>e(h6XF-_|-l9u+iVquyeWD6)c*}%fn*>b>q=aX~JUj=$0Nu z^ea5z=;%Pu?)>Woz|e&H6#}VF&swBItAnA@u7kYQg)cy8?s9{~df)>05?;g>R|QqD z357mzYMx#)#V@|#l)#MSH_(#>RKWHG_Cj9Q{m_9{Z!epsw4teCo{KgH&i3OGRFVCr z5iCg+x_-I{dHJ@}AW!O#wo@b34T6~O;GCZksHRDf*(6%?%(&0MUyjvE18UPF|IaY7 zxY9pK9vWS@YJe)-q`^z9EHg;A81*R zJ#N*wR&dtsa#p`!?lF<5vO-{%GTm1ihiOsTT1u~|mYn8*;z!@*{j{p+#R5NB@3kt$ ztzZ64*+;F}tw$W<%@}Y%A>D|rbx6D;-+>}gdpiZ{^6pKLmj=22x(2*8$tNsp?)_BX zyHdHV66HW0x1*qcV|f3t1mw16z3MiZ?R;-68NNKYv0k!lSAqrs&u_%f7wT0=wT$h6 znqQ-6?DS3O+q|Z-UpJA~XtMY`VR4c5-rgDYS&ddj1Sjd3bwTmBE`QnhkGZEwEI znrn^%NU}~GrolXRj6;Hx($9-^?*mobr7RkQ-<~t?9K@>2hF54r#0-6SczDlhvqR~R z;sCbA+R%&uHD&Uaf>%T%*Z2Xc$!agK$kTZ>$&Jj|_;{+MsR~xRM_j|OW)FdhZIWj;fSdp4at}*VvKnYs}8UQQt1U$ z20U)phOTaITSKH-vmoaShE6wXwZ=J4C-aXFogY!tH=}d8cAxQ95(ET<;Y`=cVOgU& zt%G0+VHjbC58-4{#E4Dg>91>T9Jvxar4%z-1b2o^zav%INpQATe3gEg@awdF$G(PC zW}u~Fe+2JkMZmvN?0*_LuSFDlXGUiFS8JD}S+l=tOMR1U**(~WG|Iz&Eg$DHlH)Ak<>8JZb&B1wOsPHzflLEfMmFsg#xYAkSZ=YAq}sZ$|#q_ z$Qgh$(-`?nd2M!w7*}s{zkR%@l1KkE>7H4Uh?mOD$dof_8YmH3I+t3UKBBvOS+_5wU0Wfb$6Jsl`72H(%i@O2x$8t*1fx>D27~$XJ z*|Wkx3)(D_lB*F_dTZ*t2R{(`R;3a;^ym*(k(Z9pf0Z1Bmz@Hs#g743)F7wS{^B86 zu`q*#iZH@&)^~Mx&#^eDKx4a}#}L|#J!*B6`izU_K`fZtHC0v73W|t~K(4u=(dq(J zH1A{F6csoa&40$tby6zk!l-{fTx@LgY^*~$%(&D~+d4Zl2RV6cvBAke9R2w5BW*7b zcnB@=GayM%$UE~eQr5eq`4({R;iS)CRlZellmceY1oNUCjQvcJ-i$ws)*47r% zbScnxvp=qYFu;rMBxX0u-I-_N{uUQkjONXk+K@mklpObYe=@Oxb*x8iVJbw)T4{4* zsOWrmAB$X8#}auA;SYCdT?DoI%X&p7{s3tnir>}+jd*;L}c zh!%gBCFzsIGyL7)?`r#t-BASi$^J;L@zGYZm;5XE{$I1;1!Cg$ z^>>HnHA?z>=6{}L)jk`gkcd9|U-^DZ@#T}}Qwdl!`u$&IB$wzSrlKmZF-wj9mr~K} zG>BOW6qPYIdXB$<_4iTxi6dkmc@THgq5q2#WO_3;O@d$x0;pZ1nqP%BSo6 zKM?rzBm6(7D=mAN^WOmS{Wk^>u;TxY)xR(x^&10-im9ak5D)-D@%v|^;{FEo|0V^* zZw&a8-~1Z}K6RR{EoLhz{0~mqCkFUFF(4&t^yA;e7yFF?i0Gkz3MiUQ@*4vXC8P2G zB0jm;XQTiBO=1&k8Z{La^wrhXr~TV9nl)c}d3nL3qeJ-keAw^M#r{ig$Mk;g{o7b( zoBLzwrCOp3BPu=aF*sbe62E=>{~J0rJ>XqQ%8wt>v$Kl3yStjZ%T zWk@2QF4KR(%K=VAN=nGVfeDStT*mCz9j%Yv&jQbV_v+aLb9nEeS{ z+bwV;WaRF-Ib@jeq&8b*Low6@-xkzaF1^Z~Hv^htD8!gI7d=)DihjBKIg%ocQc0^j z36A)%+0z?ehRx&i;K}UgqPJ{FyK7aF@%_w@QuD}KOpKuCuFuatRNR1qgzU3;y)-xZ zlM=y(68?l!G9w`5QL^KM=5^xEo5PTcTr;xaM`A?b08pvadmCEXZD68??Z>dgrP&fz z#JLq<>4?d0;pP#lvp!VY)i~7J)Ko2i1oxsZn~3ia?ES!DK?O;Z2?FfSSS4b0ek4;2 zMKG*&SSwgax2M#zfQ7TJyyO?pRVg*q3|BXg?KD7mv< zTfqZHt%MYGfQ0)bV(84qWKC>@B{@75M;l)Q2)rnV7ibWi`}Cf-5m}2pQlh2NIPnl- zzCs5i4^`&IbC!8Nka@N)z<#7XA+$UyBX!;f9^kNrR^$GP%6Vq^N!H<6Wz?)$gRt|{ zMj8#{5HT1xD}tQG`wYK3?SB?6O-Udl;@$`~Ot2B^UrK3`csGtX_IsvEvZz)j;V7j5 z;zY{S40EyPf=OFNuj8l7QFJ;ar3!ft2wRVw^f$9cfJv2+z1P@BkKX19VyY8EiWFJL zc9BD)FsW__RhuuFs#W=H-kw!K`EaDb;5s%7^b6Ojb=;sVs~Gx8>O4#-C`REVt0jmZ zRH;LY_O$4oFs3mJ!C%saD7wNYK6*x3+xN(SwP_tx+dE+?pNscz7f*rHOPJj-dhooj zmYOySR=rKPkDXHI`{wolnHn&bXvj;PqqZI&8mmwW6Z~lve(GYr81?E)R>_k2rS2c6 zi`4=a5(nd%G^xy5(#X|~ABsF9U-dcT7lziAfqJPQg zj=nuBkp2T7%^Two*;rC3A$qAL76&a9y|G@nao~%?Lm9)+f0TyN!nL=nfj;oZw8We*5c1I^JMmf4cyiavHSRnOTF8+V179vQJMslZAFc)? zTXQERmh&~O)yb2nRzlqD2oei2dKe@E=xh?2V=ILyZZ1xLl(Q0dymLM0hLyJ@i79b# z4YwAWn?$Hu{AcB8ssh>G-o9MW@!_+&@c3lBY1;K8AI_Dcx<8zkQ^~sMS@ceuQ~1$z zJo1;eP(RMiJI~&^Q{caKe!NxAkAA!!@T4%9L_1rLbXMFHnZJ}s$yS;RQER%R-eO=y zX&Zy06d2tMYxVQ+?FwE7c$kLL?90k9crB`bjE(gvmAt<2EMy0xX_vi}59aegH@HX?;K*}pGqWFR@)MG^?)&0gji(a; zJs7z1W}@*;6+duHmly%c1uSnnh4x%OSzLdtr>IH3?HEk$%I26wD%x(K zEd(MDI<3xBvx7@&1#eQR{!@7(CwxXR%^X*kbFjJ`%bUGAJVGKn6R+zNxC8AseJ(vA zkGCDsMl*B1GJ5U^@6i(e7NSV(%q&^pX603sl?dAP#Xx<(u+z}8u zuA8NMGmca`?$mNtUf{^J>OQf4rt$qcBp0Ej zjPypUu(zs#IIJL=_}MxO2+`1~JO9fF4I}|j0HyZ|(A|_UpO=`R1fn1puynZTaay7hiRGN`b5**`+EI+lagIHG{bg0a4S zP=^2dhT-biQtg{uc+39FKVt4-IAUhHPC%o|UFoZ_ z&ts`#Hq|s!K9H>IEo!9uBQ{;KWrVktjPBWocGr!b+@q;vUw^S_vAmO2%eC^u_(^4_ zHo5T9h`)omyE$}APp|9M7HMptt!I-l9lJU_ta+7VZ5dRx@c_2#TOlLk*)lZx%KY}- z%S86wanRwe70MYLn>e)z02ezZxlyMdcc zh~EJ0B%F=%2gsfv&jaM>PkPDQyPc0wrPw=wR9Ko7PetLZB9DAYH_>;tmT00H?vu{r zwbl*^lp+8q***7blCRq>#^w}C84=#^-dRlF0KqQbBlT`DY%B{XjO1@YOnXGP-cR^y zKk3^ z9O$2MmN+xl5ytYB*iZLG4iH}dz3I$ZWfr$HN@zF(M` zEG;lCurX^a;6pqeQ4c;ZU}KdYUt?e`{OcWb1{!OaWfoS1N>>>~r@2FnUi|Q5+I;al z>>hW=VBu@Q*XYGK-Gy{EB5N0)q6bl!w1IL{tfu98;TU2XjrjY+I}z%Isn$qink z1FX9>%l~Mh8L&u(Fca>(Lp}W!4rha?NyN%H3f<-X`&+iv|uasKQEp z5-5DyZkPBqQ9Y3;3>v!YrNTh7=P$|M9d_T@ykA+RGg$o$2BXcg?oJlc#Z?Y|U)5u< zSeJSA^z=*?$q^pWNEFXH#uyfR2y&~#Jj2^-MP}r6?#wNG$RKe^?TzPL$}0EIinrOTPG|gE5yr z$PB{4Vuhy$e7xI(s6Zb@B;axn6nEQf-q}s5!zjHZM+AWNea$^HP`$o#Jxyi8Kzwh6 zO@}GSnL$Q|{kEjh(EheiZ=qsng838Y&t*E<=D6}Qq{@9tHJ*P0Njo+YIjbXP3CcU9 zPWd?(_T24QFY-M1nGA|z-5sLyXJb#Sbyp3GcUP=iR+?iBwe<7~Da+Ow+qI?Wn9xCM zp}r+5!;M*ctT>Lrfm8s-^K^#ln_{7@mX+I4ffTAxEw%AF3zyZb<#9F^+cU^kLBXW5 ze+VT2%gIP)3h|MbC+Adcz58W^o0|jO$~_(8=;%$dTx*j;DmX3VJNdVpQ#Hybx&0!{ z9W8_B8biG&;a=#~4i5vVnX?TlB<@l~A=in42_KUj1D8B2m125*LcEtG$u^#>U_9!vArn~)>FwI zF9X__kpT8OJx|m)DgE77VGP>qf32sm=OCwTV|lCE15nh*ecfDCTPXm6m(y!1?sub% zlnbB~CVl8hZdKQ{$6U+XRkePFnfH$6q%-n#aK+~KM?Vp-dnkP{49&*T{9esot0hJC zV;LQS6buHKieUPOm8ZhW3?8M#KJtGIbCwnGEvPlu zKS8$w>getHZe~BXu&_|TY{KPiIX|^!!~5mT^>#|+>hsGCJQfyIp4UrYcE>|si^}$S zdXIQtV*f<;g^hg)>Ap%h5trBKI|9o}9Z<(}r0BXuqSua1&|MJ5L4%yGd+e3!c2^D@ zoZ~2}>)cK)aW*uJPvQYmsBD#XMXz1$1)XI3kz5h+NDs%I@Jt4mD((&F{DpmQjfy}l zk-{8fvKxX243@xFDi59UX{{)#Oy?!@FUjQ?9h6tpP9hKevs$f4|C}gtm_UFTum?MtyHh%9#hua{Fa%nFj?z# z0Jtf;cbcbb&b&2}y-;~ATcB(f%Pt7oII727g*8DKGfN&Hua7%1kC(l$Qb5{A`byl# z-cwrb?su16z_7ZjO?EBGTc#}{kq^=P8U#h9>BX0)e6Jk>&_G2ptn49$dV}wGDQ|t~ zby{?|R56rYYcdn@Fz1mF@yoh1pJ5RK1!|b)c7K#B`(AXd>2yqd+c_*iJtN%kI(r1Ym)wgTTZePB+B<`9_dVC@H7*%egy%#IWzLcZUcR%1g zahjB8zn4+VlYBPBC24<0h<<$uLhxIwwzM3m`2W~@rzp#wb=$YHGAnJ{wr$%sD{Z^d zR;6v*wr$%sXY%B~-L>}K_pI}B-|oYC8?((eTSOaQjF=;O{CW>ofz96#jf6cY`6lJ8 zUx%KzS>T9&?CDt6M7gNwITE$Rz-6%f#gNT0?IaXG3c zoz?bJ*q-4Q-nIQP4XpGDkHUf;#vaLT)t{40j#b0pt5;&I@ zFr%r?U>%S)QONn!^9Bld%H7|V0YE5dL+JmK$n0jp$zcH5zMtlldU`LGfV)HW#<3ev z9@i^vXiR4DdH*JxO--aNm7j$s*IS)jKYvL-I1**&7G z-AxqHw2C=e-pij>WVpHFFmoK2p2(g-ed|gwhM%kUg52)32e#WG<7PfIGA_hH`p`u) zqUZ^9_3bO5C2opP#X;lpQ!-^!XvRhFb0I^1q%% zyk50m3#PV}ziGe}kQYx02?^!)jX9rU-AqwoP2@$27Ekv@3VPU1Xxz3n9SO~yxzb+& zNEkB#Xd91@GNhO8whWctzopq;JP&$rE;s*B7{LI7Vmy99;a#gmVO}#+yFL6uF#HT? zH>Tg!RXMNlDv>}-dcyfVX@AqO2J#q@C&9+Dgl5Z)9rlCdU4tEA>27L|&k;$Axe9gn z2<-};xuf1|YJZ~C>4M7+l?!QVjL_~_+T8V8dcYW<=<9Bo;x2f(amIUWgWKZ6PqndG zY>f9vbM7?h3lxnL>&_n(WGHnNh}72ibO2!`VQCHzFO`UhP||g91V^I*LR% zIII5X90v)_J#zyA+xE?Gm5gNDk>(Y7(KbE$jYQU(L%WGL^A-Xf`=q)`RJ5?G*(B$? zhF;<2wDZ2UwyyK4_KG{IQf=o9_k5}ACV3>Q;VlMriw)4_iFeTM&rUg~i;r>2VoHqy zlkTMKu)2zy`}=+6+TaX&qdVgjytcOIZV*B1Q&0~c3twRMHz~SxI`-R z&arOahdj_t=AV^bQde@7?`7{wX%BQh{GTXnyFo!xHw)W%xz_`Lm)GTh78}F%vIDEQ zB}}6T@ZV@{{8bgdon+dsildkA<^VrB8SdwO!=%aX;$B;r|9DPS2X7E@5h!ylaJ4?PEF3HCcEytz|I)urGxTmAreQ8fPyr~ z?@RQ0Z5S{{_>?2X9ju^3tQE{%x?&39gxoagqKTJ=i@+|gkt`}BJ zZ)Tt3UU1X>liggDx2<1j%Ia9>@b*^c;F(%mn@8<+`}y12zHK7F)UKf<)#~;re5z7d zUv^X|Z$gVgZ6}^nCc71`7Esml)mw#bvGAUjSdodl(xSoTa<*Q(AYNfIaUyUR&|*?N zI?+k|&;dR-y7J+}_zH8LH_0WpRtJpK#TL1jG*Ev$0W8qP2yWycYgQ@>1Gk0W$jh0Wtq&k@Ej$4|!bl8D~(O0eZ zfo4sz2y7X&wwfyLiD?;xvQuGSq}gq8Z=rPYscysBJr?vM6e?3f@W%^vYe5f_vdX3# zr8Q^oojfO8O6kGcL(Hb=SbT&kIh=m;(*RV-J&r~w1_!7TUfVf&r>wCSfmW-`&|Sr^ z?4+~s-T3T2e)nlOO7=*-WUr8v6`YjEGrE>1CXA2SjN~SG=cTIai#A_EW3_w>=eep% zys6=sI^V=~GB_e%k%}bmW~v4L!9mBd0Uh({;Yf^p6~RoZZpcjV{Y=fqniovd(|KlD z9I-OvoQe=AhX=GnuW{$GF|X}+dNX4+E3GET+X%e=Jpl&v`K2-BeMqX`B>t{i9dENC zBT0i-+Vjo(qr-f$#Y$}4zVXmrD)CCq){QL@oMJrN+T+@79H0Uv4b_0hY(1O4$N)lH z*RY{FEuo2kgAIsWgvp!t73s(qLXD~jW884;iC@n5_ll*HbaH7=vaW*9M=3Ts8NCOSDR#A`fM>Ud0mS+%_)1$MZyf9RI9K%(JYem@GfHqd^~ZEMG|9!K|Tc z2y^j;V?=bNil{I#!5Gz-0d4VQl$9%-8E~ETm;HmXZU*o6$B-g|h@S;isT%{=+|jry zPF5UZ`|D%HjGsr(*<5W6F2jVK)^#a654F8>wZZIFxU@q-I>u65+ke8rd?=N0ivG1R z?k5RfQ}nAoDT+}<^{ucxsAqxI%Ho!;(e$;!d|rB1MfYq_XHrhhW*`&+ozYlaLnd7d zqzcKMT-P`T5HF@bJ;HFa(vI#+4$$0C@g{0uCWT3zOBxM2)!ZwoOM7mS6s}iEo4H&r zgVAh+7HbH!R!$Av4t;{jRH(q>9{YBww(!*&ZdnDy(q3Z${)UvN(NWQUw#U@uoEk@7 zxuf9w`^?pqrW`Rr;QCI6bZm|A_p-RjE(%4^d@Zyla-Q}U#z;m~Wps8lj=+A##8KV06Mmv1UqTZjVaVqk?lHL}S`Rf#|F zZP~}m>v=;T0AhT*dfpFZn&0#P8-dkb>y?>I*I@V{v zdK*BEW?iv#+(?JA>{QWw+SybpzAEJ0YavIX=^^M8MUT);6lQ>YVtDSMu*F%Cmh|zV zrx_~QLZTX*X50D^hsnhFrK_~~PcPliW*%0UeuS9eWDCPZr6migC5J<{ zOMAiW37JLL)p2;QPqu@-kJ6pQ5~>N>7QaMF8LQvmv_Bp+SDP;2J6>IfI*vj2zI0E5 zPQ52>*M1rsqxIF8r;d$6%;TL#*Lq`)^Bz9NC02pLjye8%IYHAH8AK;}UQy^UW%g{& z8k>Dtax8__i@+i6&@rZ)p?^5vP=DL8WBlAmjFjQ}YyX|rqvM<~#{I8t;~Wc+g@`sD zyl<;|$Nd!7H@&$4`9AIY834FH-v2gz3}H21eM> zj11}eujsInPX*iXNV{(NHnv2CsY;W3F{Tz9Ba#IwcTXw%Qp#NWpU`Jl;LD||fA67% zPpP3-alv#W`XLV2KjKF!+yDLSp;9U~a^z=jAePuRT+G#O32F?8#Q1T_Men<2J7UX+ zdcDmjKYkDs1WK@3y(~=qIsId@LlsIsFPl=2w}{gny#w5C3I;vusdex+y=N z*E@h&DVqj`Ku6dr=T^SstDm{yZz=NBl&Jm8JPhs7=gj@HOPqO(QL&M9!G@=U+(gDJ z@^7Ddp@dsC!?gtiyL+psbTD+AvZ(Ee!Bx`3ZN9Rqu~yZ*?MKd4&R4N*f0A=mqTlY& zhN@Nleda_acgBxx4jSub^GlUlxkcn9G2i(}a362GXjgDCi~yFQgX`@f{va-1(0dVa zx#W4-<}b8)vF5oumWHN-x1xL1ehQA`@YzGZW4pp|;=a#|YoxKt2zMSBz}oFL3F5Ul zRXhfl- z!hD{D&sC3kNtEz%d>xtUk{C6USsUhBjj_)dG8yU1#h?za&1~_|YxW3vgTAc6Wt-b& zw6&f3&mK{7+TPkqKCOVvjqtFr^ftxX8j%>ip(^fHHx=US5SZ;%s*>CB{@=uvknN4R z7I+3^fW(82qRA_LAfP^ffDov zZ&fPNTxqIf#g6sXXXW`3siyh8Nn(tQJB%a9bziU5OTblk;3h4r2H z3`DcZY{zU)E3{&HRjFutL4fHSpi?u-)5y@;Zj=UoK1#Vel-x-C>o16A3j#=Fjkyfd zC|4t-ldE7ayt=9*PW)OiS9k9>F33U^$g{8vzj~-+NHBE6}LX-y--!R z&C81xcdmD%cH|uk)maWS2C0uGQUgRHP|aJpKVSBX0B1{eG;f)Wk%x#Yzvct450vhF zs*Q2bd;!sCaDH^V=DjbdTZ&(2SI{3hxR2Tji!(sU5iT$eK0NI z6D}aFYW%hI0g_GAFo?lfUz5&Jf%_d$Uh>{~9*q?wVXJLvX)D>xuYo)%p@n=|0PYwf z8km!-%g-T(rf16>f3s=$+U4RKJ+WI>J$S`d^i3tKMITD~qanS7=yCmOlu03-NpGac zGeyRwtv_qk-7&ZNP+AQD*=PA-K;HWUnKqLz)pD;erlab8`ef;X1t-rCY1JgP4FFvZLP#{NG$VAV3 zV`Jmy{eIfgQMuV__2;96v~=K_Sf^MF?%KN{$;^6swO;>Fus`sEfO+Xa&W?4uX%O>~jF2X2?yi$9;Kf9S_T_+kKZs7KaVv`wnvV%-v2ip{<^JG$ zHn9}Q#lg~`6*i6Qf!Op2V^v4h3AiBZdXpvqJ>4C`1O2Fbn8i;6mQuwY(qX*Gi2~+& z+pRtJ$WOQ8V%uz4Zad5~xoUCs0*kzqkCso#^ao)HqAmb4*7OdldfcgU6AOmcrFWpt z%+cFcO<~;7r?{!9SnxfYbhBcJAuf_p;smaDg5VZW4V1GAtKB_{(`IO@rt{G?J)z<$ z@SGOs<}0f;FHm|`)7o7{+rGe!^Bl{Qd-RlHd}KBUOzy3>fJt64bh65#JE`%3RIWy# z8UCfA22zfE!b#r;tZS;{q|7+({2QILfC3^BFO5O0IT7#C{rT!`MAL=1K_-`FMHA|i z4Da`yngsO?M&zjyIm;fi`*|>8?#}cm%0L~VZ3cFc!-c>W?dBQ3ii;C>oq=g=s;&CNq&VyayXbi7X&RiQsWKa-r?ME(x|W-RE*dE z%=L=>^8s>EuTjg#XDuh<`K;oEuO<3F3-s?l=5c@iMq1Kh5GO|h9tMWnx<4bL{~K}k z4`a&jj8O6|-ZaG8(AKD_nWVz~A2`!*;&72wtg|Y>@a@0o$^X9C5ri*!;y6Rgo1+f+ zZ@TiozCWY<#%Y}!O;>6Edkp=%i{ChyzenW-t7_VR{4l5LA4XNpGwJeQ?AZStf{Fi7 zxMMa(h5wW1{C`^fzs>!BznR*KN=lX{gBs@lQ6V72k_eD9l!)>O7^C$6D(Qb;VF1IljSP?e{{!h?K^7HYN)WnR8o^^?&2GbEc5UX-byA&FWLlsW27oASDXb z?cU=_|1TuI$3!US+ZIwK^`^s0zcQmKmt%qX*a4lvn;uQr(zDtR1%vgnHo=mrqY3XfAYX=-2n;G}Z4{TZrRu^H4G&|UdMq7Jh7Y+W$v{Z|4y^fpcMHciBOwCRgkKkCjuIhS`NA2Fb{B!%RFTtDYe&R z+se0$mm|%~|$$4cYmUnJGO?P&) ziQz--UcnXktD|a&Ejq#DHwyRMe==kuwbJedjH`Pb>8g7c_GNm_-BV6E$NQPAJSPrL z01+#XDETu`7a4vg^v|C;5DHNdKM|2zE$#M^z3@D!ZvwwXu@Jn47#SEcB`25644gy+ zQ4qYeKwEM3I+NphBgs>VT=1`J*7257(bv=j$Nf|X6Oys#{p~V);F%rOXrI(|hJTS_ z6H7GU>Qb}dNNoui>jjJDh8W39k8a^^{T_*8?k4e zb5(_!1et+Bz4;908)gr;1Yu3&80&n#Sh>gdl=_lf4*Za(eTLh-7O`6NPgPYn4-X5U z+M_B6f8|1qb~or^6|3ARsTHE1s>--H+rnQQ?cI(cJDQIIo#b^%MIS~IC_}=(7EaV; z+%bg9s?Ro(1Vn}U;yP)02zk|z6}WH3`fBW^*if*DpPuXrvpYxSgyT~!;j=NXX}D1L z#Zw3iJV9ZHI%%+NHAWg~a_TGrEV6Z^k1fb^mpWXA@7^>P7u}3-CWVrIG}L*!c1lXx zfztML-5_&I1=vZZ@8QjSs)0_^J)h`b1H_Rh$8xyg@HkzN*Vf#HP_=E3f{%7a&Wfd$ zBCVsL@7IhS`IVN86Wp^H&GJ+Qo_SwH`wTuC@J`5!>^zuMN1Xvk92OTxF_=0ZOh(lN ze)s!CZmiT&rtTKU3eunKkmpEL_a%E?Ggk!?4KVgZk)0w7b*(k%V4U} zicB%8w!UxEl!vM=I!U#WT7D-_riY-0EwY=+3o0gmyYrybYGSUQuhhpmsmB{IYP)i$ z9e?>OQuU*BZ0FGFCp@KV-`b8 zIKksg4haKVk_WB&1_5}Z0&Q;R>QLX;K*#k zlfDG4f6T?kn8f$sGJz1_SDQl7v03eUaZ zHx${GY0)KcIwCp$%`yJ!La6rb!fXBZ3j~yNX_ruV-|&SGL5p+kWEbG%oGpUzJ)lQd zxWkph78(tv>D9g$zUeEDKcrYwBFJ7;6#lr(i7tw-4u-Kl(F12?>sFUmxHA!!7e~5A zGCJ)$FzSZi;A#-nihxkn4p-h#P{LpXgRAiM#qV6FH1HHd^7SN);YpGO;xdTM{`~Or zG%Ry3Xn$gmj7d{FT6G(W0~YOgBnXa6 zsG6w@2tWcfIn#gQs-fbq|5Mp(aCFF%vsTVB-D`cjU`rmqG^n#QK6_2G#x@rLvdY*h zMR0W1pIy6BX3aKAwh#;NryWOl|${ z%b9(MqJk$~D{S$HiRkJPQpyrYt|O=ZpajhndlI?wt7M*A4P59w{+s5D`DDH3-#Kg) zN5u>(&XgTaa1GAMJp&gc_8i;oo&&mDtgfOCmy=;jpOj8zhgt z+Guz6H-O8^>_X6RkPwlO;Az@psPt6ucK@`2A)QK~GIn7m^k7?N+#TV?zNI9CJ6Y4Tr%(6@towF~Lb`@0&l z3pp>0R5G#2j(5$Sc+<7M$Gcw>>#>lf5lD`x_sqO0Yp;|?xH%)E6&mi~zlZ{EN`yFh z`CM>f9$ZC@)d`s52agMSeN(cdL%Q z6_cxA#No_~p=?Cl-aqlxP`3TK(+}c(ZW3lA@vv@rpmwOg$%ZklWzgtA`$0#iHi3;7 z3N-n6-B7pT!^;M6fBG(3=Dm89n(sbmam9| z0kzQ~+)CaWzF0n;TVTn>yBS}hw4T)O2eIgd#>&F9X-obY6#m+fbbrsp)$9ZBaq-ha4vesgy} z6f*6^4;A2GdlE%Tvx7D}y0@(8Vu(^yWN?@Sg5yYM_<2;oZ>>3MD#0u0%N`O{OXww^ zTHD`)OLO}$a|91bV3PVU!Kx?Nvx7R5Aw5v1wAYKpmwslir09OC4cWC8FL@}O;0KD% zP=Ry=?UbA(a!R4z!Gh$Cdl?9prloP9o+9i1Dmxlqp9$0EVjXRYXC8$r8Iy^q8pK#J z;M@KsRaR=?0C>i$z3mQ(m5~&arD@C6OD_kNpz1B1fnnE14UJXk0@rIq5G!DuB%s#& z8~i5GUeaDH@EgYKjsi*l=VNluH?Qm*F?)uW=@iT$`SihnXh9a}S}GNn0F z>g+@>kdXEeauQ?yce*I>ws!4Lyw6Fufs2h^y@G(OfGeRdAe{rit~Xi1kBY}qu9X=< zjiDlJ4ow)B{Wljgv$FdsIy1lNB9}LC&_ILg>jZDl< z!JD9(5!~6MFCzC?(vxR#IVF?jJ@nyU(MtI~PlKy^Xqx6VZ!C2bE=-BOGe^x=FTY(>9E^rV;; zZ(t;+?HJl`i6=#{8PEQ3P0227wCLZuf=Nb7iA;3rM7{T1Jv2;QFzy41rDTu-(k)`E zbS%&O_tHZ@G%S`jk49W7&xssI;7R0Ed^Be(f^xse=4ZWEBL;)x4Dw80#9;7Y4f>!v zz+o(Cs#StRxj{c7^g|Jw+Z}fm^AWIaaH2)^9TcyPG?{R=7?EBcpRg9m#7+^r`j*S# zEN#X(p8#99)h|7lKbflY<0yV;?9Ml;nYju=COEw3FfbzJUE{Bp znz4!beU@J2$pj*@HqBCL4q0p?$cc) zBTeyiEi1G_@v0;5j=EReFIaOg$Ys6$wILy5hes`DELCegTJ82#1AkC4^Ouw287Fi& z52>$PRdYh7e;YOHub>AOpKIjl&Y$sQM~3Tqz1r6d)~pTXKx%H9Uqh@uRp>j5Kf*>a z+#Kzhr{+B$?nco&S`q`DJkCMDTJz&KorQ(7`VVZCs9k_mhh%6isqn%3U}qO`Mly7_xZ2t$xfGQwEwTERy}1jG_aJN#h%^ZeaO`s*Unc&j{s z%ir7DE;XgQ<%WGqir8eO=^Z^OBgfS8JP<*E)~sAn{CnAo{!Rqt`^u3I58y`=21+iad!VC-v2G z1|~*&^IZrC3hhRSB2=5~kVAOYX`sB|b1EV(kh;C*qNI3>+pFDfE47-K8y}rfSZ!(k z44G3*SX=2SQVw7uBa%QT!5H*qj=E4RpY6H$@}hmh(k?H~3NRP=&QLuwDHNOhg_t)g zGE8<9*H+)`#KmDl^qX!qrjIa=YM*_Od}pQ=FZUsH6`ZOI56`=#Rk(34(!}& zz~RM`0v0si?WN!NdMROP+BY+8wF2G%{cjbFHy~qy_Tl-U1g~mU5W<1d~*+T)ApomkG%PB9}w`413 zSQxutYRE_7X4zni$h90yiow`YU`|51%2cB)XHEY+$cw&~A(}jBsDCe~kN3EsV<`*e z-+3K)yoDT*_sie|+~na_D$R$HNikq{{*9m@ibXcW+{o^EsHhdEpzM9#-jv?O8MDbd z`%i5qS8v4F&<(t=TX9nFwvfGEQWdxh(JSj>(wAi@yQK4Ea}@H1<8g>v+{kNChdyD;2p=!Ff&dXY^<5yc9vid!$NZtkjdkq?FP=C>{G4eYwYQ!Ie22S(t7jZx+{%Mc(R7zH;5 zi6IVsW7~=I;u8|?wqtT#Zuvj^1&cFH60A+(A$x}rnRIUg4?;$Yu)3Z!m|}9K1g;Ha zR!;YW);C8PZ#RF)oH@CRWW)psU5Z&l^b$8X1tP-7;>c9H5y@G8E)4E}wuo=H>K^nR zlxxQkB|;#MhqWa$1T!0z(`9xXP!10D5# zG=^!JzyVMAv?q zQ%HiJp`yh zPS!uji{rQq5=zm67DGL$-y5@{UM#Ltx!hh|MYQC&5ZzR?2-O@g7-nx{Kj_Y^`}3vX zkE+xo@5y2aDbK(^zf-3V32@NzP%Pq}3W{hDqGitwe{6vGZu;9* z0r|L1@xbVn?#6zfx6%{hBWbtywJ}QdU>gD^QG+B3ezh*Hk8V#FH8S^D=$MBOL?>rK z7UX1qwKfIE^g(N&;NQ{~tR#^@%jL?Qi!wL3NecA2)>3aD+(1x(h1je&^DU0a#O(a& zxX6I&E^-+`wAd%+{&YN)kUn3A&Rk<1igX3t14tevtBuOU1R2%`i=o(SBZd(gr5XTl z@Bw&1EUNmuI^d6ySVr13|9q70nXimK`$6-6uI?rd2gTCTmW_2c1@K>MxE^6IXnwQ0 zI9iwjMa%AiuiR00WZ2sMKC7d1kPB=Tm!bsExeV$ql^mcAmi{hqk3BI$SZ3RV3ZosMng{l(5o!h#5_rYkptIxfN`(_IGxj`xOWYRCLT z*ajQY=$rY{ORgrfNZAKa)NxczR#0pf_s}V_+JIA|kdt;6Ud z;%HOYntQXiI`GZ3Lo@Nc?x|H>P#Rk=RF*rDa;ZO%zEgFe#TGR9tCvM`WsSQ8k&4f> z!#ay14375#wup_Neaxuc2^t$3gt1rOfJ>E!_ivid>06$))3DT|FnWf1#0(M3X3?9UPvF((oTO6{r z2izNGtkh!6V(M|T`ru=#Rm?E{fJ2*~D-Wc~u6Czl*j(aM2X{e~2q4i)oC4D1#6l8tT9~3+ z_GIENPe{)d;>43T!B%0K=&(buEvLK`-Bt6dX=^K0z)<P#TZ`7{JlE}}3#T$mHC~V!Iqrm_2?L^DXu_b0{43c)s8sYuG zN;@iB=4=L#V{U3}csp-SU=1+5Arb(MAVAq$kb9Hxen-ogaDxVJJS*-CiHhgK7GJ3% zw}H|UG6G|BMPrZcr`*(p#~qV2A%p?0blWOHz?@ZVXxOTls&cMI0Eb1%Z$m+=EU!V& zno@I?8?!g=BrJG)!u5-LjxVb+Wm+i?Hn>7$LbPM?XVKn~MQRp8m@~(!lR&}~#G;d9 zw$_fEtez4wX0cNbmo+*4I=KhWoxL+uvCB`Kf-C`dYf`|}*SUHWKKMkx_|y-6xthihTs4ezT=krQXa} zdu%=s=#Iy(G)Z;y4S51IV(N$R8V6jjS3JuM?{hiI%$wx})Ic=c4o;_b+Pw8KA& zS&&0NRJA6*Dh@aVrB_Ef7hxzLA`Bd&LB)8=83eM?v~qMDiC~VURP-EB(zIs=<2pMp zd`dyGE8RxXYLfvg!<#pS+B3f$uRO$a^SaTSl9?XEB#|1*DN6JP!7S!^etohbQ2pBm zJ%GI$p_y_|-okiHk~LaF0sq?(ehtiS$iTT zQdp>+KdWYOqhNHjDH6g>R=j3t(c4dexfMr^m>x~7i>1%$J8j)6&05g67&w+4r1Q+> zPb#jP$}XJE5P#}10+IHBOd!&;9e?>B`HjGy+tUn8+!_j$H$i#^-B9!FPVoHNT{mIyRd9^ILMbY{@plFNt=2pRn!n14OFNxmY zw6?w8ZZSH}+`;o`;(2a>u9>J1QDvJ;ZXSOcIx|imZw;H*pk0`bBS_dG@SMaZm)I@U z7gL@&*bmNp9kBOFDN$nz$Re^}9_+xJU8Na4=<-6VVYY6a+<1$W^ze4fUA5(~%;Gvb zqgmUR(~eU!Jq||31W(l0+=(Fvs`CP5G_ywYSrPq1Z#>ZvpLR2^+A}o($OFWP=t=mZ zqE_GiXBTtj?onjGtg3N%VD9#nByyJGyB)a{9z+zkjSRlQ(9|!QMw6n70_0YJB$||B z1>p+JWlrTnYw8LGh^w=3lAwb*d0%1T#58!OQ6?Ea*TX$@875539l7_e$k92 zNqbeBKp&i-1*o)ghB$N+<3#{fl_<6feFLS^QPg~s^E8}Qbkk(!u7y@)DEeW5e&rKJ zDrt!F64i9KzWY7kE$HYif@3GMG3Fk*66j{f63o7$gJ9CnHaaZ7-QXibmC-qMSuz&B zoVzAW&Z&213fJs%6@G~$b%m3BR zwt`1nTqR3dmLVgZJ>U6W^lq7%3x%%g9at(_;d3&F0y&aMt|FQ;0e;PT$G!5xm&l?H_Y$<*tgZCxH>{6GgGBM)n{;bZ9?8#4L*>r9<< zFord<$R_@X0sqxwhJ!E!vvZp$Dv8>cAkm3HXcIZ2ULaWa74m1<=HYc;y+P7i9L=WU=-?OQ0$mExKfV4AyL#O* zObv}OrMc#3ZZ|>QMmcgEK5j9n2IJ0y_Yr);@Zq_cvvH%BXi>1FDADFyV5+rTAV5m&TYWFtZg93^KvvMLUTq7|b3m)I1f<6T zB#CBblvt+HU3^1PA-E&e*RpICPTjaSY8j@)KL6O&o+KQ@JI%nRu{WFw8yy)aUT(7G z1Yoz?tmOiimf$9tpUiOauWRi5;q7lDywK7-{AhfRSJ8@$kUt^2A zcuG{x@U}q!4RIx7F__AZh#Kvt(euvWtiFzU8*3j6mr7ZsGnfSv^n0Bzl)QdG-s zzM;>`zKEGx`t{=FoToiv1!9iJ@i))Ku7;~?Eg|T6ROTvB)lQ}}@Y$S!yLS5-o{x;U zA!k02`Q0c0<~Oueq-8SW?WRbZnAf$Xg!`hg{_C6X4x{s)l{Z~%+x-LbcO%_+#lVY0eK^)Dk5xDs&VS z{PS0GJEc3G3r`-84B08Q|^O_~87c(tChyDE2}oAP>b%>1&zYaHfQcYt3pn(Nj9a z{b1{K<;sX4k7%XiTiU$lyt;N1wW%-iQ$%%Ay&KRh<06OQwePQbl%F_xrc%Y0 z9Dc=<#XphIsb60q(kYGUK5Kc@h542^F*D48Rr* zfO758;&M4(>8x9JO-nqX#79E0_QJKwl6csx1~3*1?gLT6y?6CAPdP45H@E>YsEwM> zdKKd5nI*67;q$xWRcGc;R_~HJtUp&(w_z9cjD82yW%SnH$ON*17TALe7@|2stx1D( zFEA8VZ*e(V$I~Futu$v6XUo3cT68sQLx>vsCfvN}Y-u~+mg=$JJ}!GZOAhFl^MT%E zq9@b&uXe_F0Z((N-Eyu&InxZDTB|nD>1tv>X2vWZW256gx>uNMVjH4G)8%StUJ1^K z)wuAdT!r_T+|=NXZ4}peq?`UX7_IL1dbCN_bCLtdQ{x1gGfB$(S}|9D$k!yP{hNHf z6xx3k$X8~w`=Q<-GD6tHXTl_JK3vC8w#IpOrh_g3l-#k`lxG{z$DvK39S0-Y9cxJ+ zBLB*np1DCc^)Vu%vf1ziUEy2@)Q{F9!%|K2ag?Zjo&YeCp!V{Q=-6n)AWLGLX3I_6 zK^q3gaqemkq-nRlMBR_W8k`_40!D#c?5J(S$h;-E{B<|3tEW&@PZm0Vwdu(WW3DaP zZ1q}QoKV@0cYB?QyT|*?$#XBJwdMI{)&R1399YApML21vCJ5lM%5plzy3+bH@(1=nN;Kph9#0l*Pw58yHl|` zqFaYNJeODFqmtk>H@A$1_P5dMR8|Nf1%9f~Ui7%@Gjs(jrlsV65%-Sql`UKMaL4M{ zw(X>2+qOEkZ9D1Mw$rg~+jhrx-hIxad(ZuUe?RWu+G|zSTvavasyXHuI(AmuxceXv zS?1-`ynq-~z8mTq(&NMD)0y_^N#37r39(E7ZZKapWv*r}>^Ezr1nJgq4JBnE>S}Pt z1%(pM?l~9p3^U;mC1&C?i)_}GU%!G4HD5M6%aScy!B^dl?Ft7U8tT)|T84%@qFA(x z6l8}*3vb2C9~=aFGAn9b%s?U16MXkW9-ZXc1y9M66fDVEoaZHF+3^U*L^#K(64PO0 z8p?gX@?g2Mi5P`u(1M9FZp^{ROrcWg9a0qBud!NC zmDp~iLyEI%3UNWpztlIA8fal?y4BY{`!*bx5#FtRi2nI+5{p25xvuj!Bv z78|aFdAP(sO6jGA$Tn1Ml?dtBF{%jRvNk2!DkdzG)wFHc$k-&x3uil+@xaG}t4T(t z9xAmM0vSd3=$Rnep0{tPdhvID* zGPX0h{xcV8MgPMEaH*|*2l;003yRZAOOo5fXhR`hSE^$9T2}@IwC3xzWzibjddRs% z#0|mnz=-Hz-d;ZR>g;NPWDeF$hqv{rU}G)?13bq)n8B`Uc7EY~*NYLPFJe4Vk`L_f zAGz-8LB7v6hRWl4wNw>tvpIx>MU$2q+qX^ zh)31M%)sCngw@Rw>(ZJw)N7FoHFgOOcD9dVGQ_6R97y6LtTu15imQeyrW`YZyP-HI zudc+LZxIm<5G)&nHD7MTAAP8);%S?AHQU>pe^XN<^(`N3JHo1R<|kgJExjA)C`-?9 z_holcJCLYgcQFFmu-8*v*d=umF1M`|{~cm{e|Be>0yx!Y0IU{IsEx#2UC-a%I7k_~_hVwF>D# zc*&KLsEN(Y%yM^PHrD?F17>zITN*IdahBd%M)EuY3UJOXj-d6we;1v#ivv}3ZMPox zFshO0uW%Z<>CP5?0*W|1(7cBJ`k($^?E{+V0R-l>Bm|-}j^@iGY=E$w#Ljq7$?ne+ z=*C-=CXlYe9a+zT*CB!T+;`3j{F95=KROq!RDX$ z0bW{eGP1rvXEGnZEbqU*!@n9}7b5^rb^kV*>?@K=aRLf=w3k~^*-j*6X9h7(nU7PD zSM|0%{{@wbpf9iq3i)3r5C77Fyf35~3s%SdoD>H@YYI?MR5ISef&LVfWv7%h%JTtY z0{$d&J!62uX-Ena}v!RPH|W6&9MNb@$CV`LEtT&N>YJ%d`JB zL1`4fh6d)*R90k53x}Jhry9b-Addn024r)xw9N!Nq>lqo3{=?$>o=j-r$pJ2d z$StAJCtnu7U>L=OAW!pMC6rm%{$ncppCKTCcmry$6xD43Y;VpT%BP}X%zJ7|y}qNr zNY$HdvNQ-c859}SbRho_Z7LN@_m0zdTbaS42pgT{nj%8zdDWX@gR{+Qp&yzMC>P@Yeh;M~ID+Cl6c=?)!90%=of+k5EC<{sh78Z4QDU%; zBqE;kdL>_}b4&Vo@e(9#!{pgLv^#-fwFrG0`{l{?XuTdfd55P4OkF56i~lSLecDq= z&o>B>L(`9gv?P%Kd6s30>iVu%0=b|r51_#hjfS00DOD=+WA6X=MfXVrESQYIG?>L^ z7~f*hA2J&604QN>*=tW{>z{SnRedhgHyh9%nd?C{i-@wGpBf~3b)uP@qo=rAo<;8M z>_i15EcAu_IAlbfHgY)VuO0`8JG~DyGV)^MESV(f{XBYZ(+XyNXT)iE>9X<|y3c|y zQBvOZGXCmUjZE5p!{29s|F&8t5D^?Fx4oZq?oa23D{E~i3Srp$tOs9CQR+Ln*2W-z z-P}ZY%NsxB7veKGC_-j?Gl7OmaW~q;5dKhT5Ajssjv0W8tv36!DNY?WyziA>Z>BTb zYDN)peNb4bypFjO`LYgAKy~}AspbVZ=lu=2vI3`M=sfDK3T=>bhLZ-OZSEET)ef|b=cH7#19p<$DMUlMphOMP(N+47rgnO z26O_o36(Z*Y0yG1I7H5i;4_;c$mH=vyXv@u%go9u+Q;MZARr_ZfIc-WdL4^08u!6i zTE*(V;EkwIqbDT1`Q^0b_^zeSdd0|+zpGHA3!f`8rEt!d<)<_pL$pi93FU@Uq1O3L zZynrh-j|^oe=P_(EsevO3GE5=IiDf{$Nj!f$>>rfhcM9Y;wcBg{+S~mE+^oc_n?UW zdaCqsXLflkdn&70YP(T61@ejT_ko~8eut{6iDk!`r=cOyT7!8(WSHE)O^LsMuoBu) z8%JR4Jam$sR&}id7Zx4#w-LV7x&($+tdvf!pd1zx3ekYs?tjOpXN<71a$ugfgPppz zF|23GTGH@Wm&kr+ce?YdNC;N&*(Z28gF|kKSJ{3U-P#Qun*FC6lUIY}=v^P~@T)qS z*;>TrMLl#}#HyC*XnZUGV}qH+F)Mj1oAk`?FoE8f{LNBgVNGlp%Jd)8<}XLtCJyki zZO_V_a{sZp0YWKDsM<5nDsQJuyMNguHr#<385uczbytDf00L_#b4BA>awsK#M=bK= zPz#;{Jd~7BhOq*(4C>!hR1(&OJ5HT>^&`UBChCpqy z{np&IR8>PZHngK~IFT+dFPU~cuR785^70%qsOyed0Mf_Yws8J`XVP-Fpw0{rw9i8+ zcS>tgdyQ0ZuBgu8t{&P-2RcC}M>Mvh=9E}l4ESzW)4jVl0CuV`-C z`JLauAyd%NEfw`#YqKl`A<##ithC`0UyzoCUO&LAF_;{gxoze#C1SOLY0v4blQ{#ZU=cJ;w0Uy5mRTz*(usXd8WTL6xSUH`#Ecqc><`ns=DoBa z+&@;j2UF5h0*MG#5&Z2A{nHUkQzA!oS{+0lzwrS`v`vDY{N+o#ARr)wqAFnw2I?vM z;A`YWu2Ww))P9btVCFabMwFrGPG|El9v#xhtM^(T?j{zU_h(`M&$_7St6fCJfX${N zZy?)RMXyMuXK)dXTYTTe|i}QwCdF%OWxHjLJC=6*7W_1E9G^)Js#a@L=0Wy)pUmWmOG#C9@TQ8ShS=(&Up=Qi-#-=)daOVvaW8IzAr7II0+P#`+2=2Jq#;B47|RaAIN9YSF#@X?qw*LlBDhuXrMVD641eNbi^L<6__J?Yn%UI9mgRM1MhL)C6tcojsj2S6_ zPm$^g-0nW8*RsoQwOQoNB6psFalZ{RI_yL1t=%zj-db|=mSL>3cZ25Cp9Lj^7|V5s zglQwn5Yh}1BipOJbLzi$e+D}!f`COA0RRqhZ@);xG+&oH+#Sn;iGI;fsTgsz*|=4& zp&J(yyhuU=2q6@0^y)Ng3u@_ar zUj9V-e3f>LNzclq!KXi$)^9{QzQg* z36zS%1SL?|mxR>{^vB4rDMk$eH3i&&eYfsXeC2^Brbywc&hcAu=RL|AX92j4l%3gy zMIvl=lw0@tqeiAQB@R7zQpC%SY7FVKayMx2`8LbWer8{Gn4 z@N2=3&`kyi(@HlkEi7z~oocSy;lb__1)_ zAGHqNTm?*?;k3_LU~PFWqlwqq4J{L!qB!4-77D{pmWMC}qkUdp=OG~-24_Ep2_lMJ zW9w2s-E7O|Y+B(Il&HU0y1v-(81u7xFhPnZ2EwLfetIa%h3xWS6aRFZ+R|Y#8RGzD zL!4xWm9=+Ii8?#m283SJKV`hA@qC_lEnxl_Q}XSQzGTSVo#2q_lcI@*FUpZQq!}1re1S3bT2QVO#Wt zD(lm7P|Nm&TVJvrs{3gyJj1gCB<=HV5T+qB((QL)sY*ztfoX2F>PnN1Rkctw*2hw9 zI(1*=q54*(s5CI#p5})zl8}(#EV0pOnR2O}Sqc+d&feeGxAW%@HCOF|=bqbPUq#Tu&`@)_Y^Nek13k`|(?F9gyG+oT0W8Y)$NKZn$nJM_n%dno7Fr zPeQv;@F2or%(pMJo^KfYgaXh;BjDBE2G%fqB#pMTtUhbqI{n5l9-DWAr?e9LY5}@| zvS-3G-R??#y*Fzp^oaA=(W>NI#-f+Tr|2doJ-yG;@CGW-!wD10sZ6x44@1Sz+l^AY z&Q$|%`ZA?m#4O@erDu|WQ>4v9-m zuQua$q;z;{(Br#^GYPyI3!+xDuun=Lj9&-vw?bU{V>AP!YVbDnb>%qNVKxH!6`CUithC zTkpox!xv9VenF=vAW96nN8@2EEP+sbsshv?Y}?N>cs{axw~HK(LDeF(u+y-Io2%cu zx%(v9;9?XGNpkU`_TereB;0bq&EIvp%?id)kTVI&t+9n7T8fV#L){n`>mF1DlvKRM z4pw3&%!Z8JpNWhY>AIqv;chY${W*M49fsH z1;EI^gTnB=1H(7|E_pMim{9%Ed2W55HB=6<`Swyt3;z8wbV#J6?&qw>z^cp80p>ho zc?K;J8{J^?wxcrrSp1J%n)Z49r*5_QxXW-TW)maT5j%oQ)5>RsD2C+yo%F-7u~Wae zRYwNzy>HrKYZ1Ozc~cEzeKZnrxMNMqdM4dWFa;hfbIlfvF{yv1nPn;UHc3H);^=;q zF33_nY}`})s@P&iIbXEWE*SI-*5H0)O#fU+C`Op-g=fSpZ=7W$bPBiP3UisLG%uLp zh~D~54WCPpwY5%CXsWbsx+>dWVv%zyn}%aG$x!VBnDLfn>@33R^XJK^F81>6o!cHd~x*DTIP=$3v*lgYtA@G-Ee!0 z;B1oI;lm+=PfL6Q;RO?$6f>X{YgI$-rS2h^3`Rga`^_xcoFD ztI7)z0hi>%iIt&^BwVuY2b=)m8o74WmgIMEmk%${mq5Jan2P|iovP8zL-(#l5RAnU z#7>V!LCmU&&7m4nK%lV)4YgQR2%|qznR1h>E>e-fPA5z!e7+i~+()~R_l`uBLkg(z zeO!+{i7q{yb&?A-;#2f~EK-P%?=%phibpm~D*V<;%ErCZn;q$p7TSX&sV_SUkHp45Ay`tijkR#$9}wg6UmqJScvm;y zyNLA={o3d!+IfI@f`xo;2dA|r(9)+xbRqGWrzc#aw=j0`;fY4!$qiedtLSc>4ZL`B z-?n3+KWWtF;CAh;8C!&PMy_QXeUm6!?li#tj8gW4g>3%|Zd3|OHizQ~IGDR26S|ORlpg1A$<=S)o)nI4 zMTCqOR<+7!s9f@+N(>$X*rT%6bmybrRSv78a8UF*gRHS#^&15!F6)^%cl^r=;yNPE zlcD_uh4KA%_wmJu%lr*_FPR|txIg95E7#jWB4e-OJ~hE%ds9_?ZZp3u$bsr|^D%hP zhpsmqY%&>6GdA7Coj#wRXQ)U-R+tL-cnhaWJ0Xx6y#mhj6+7m+-54LYs?;oX?4~a8 zhALee)Gx&Dw;rr*81xNczThq)zZ#V(kCkbEU_UDX%Xi@#-}2}NI50X2ttktVdYl63bOm<{Pf%Pfs-Pf}TcMA!y8rz{o>JwC zV(rWju|E?>2j1|3yPlft8Xd9LauzZAGV9xNc0oDH%p!@(ON;{UQc?jx2Sxk+U~e!I zA#zZ~cyE9Ia4R=iRC?mIMAX*?i1v?cL3p+7lK8kw&q}v%6y@Z{Y=|i7qc;asjkSbm zclP9@$MQBx4meZ8^M+;o7^Rs&-eeA)pH2?}mbHSGCET@{Y-hEp3cC}HoXE;r;I(&c zO;{~MzenJ83{;=a!n9ue$t`{yC3a2?Q)*M{&y^Y@ZK<`^&u8A z!99fNm3K=Au|%aARb$RDP6xE;^fkh-TU5F$vXQg7B6Sj}(#A+cM?h4v;VNha_6iUR z%LAwzp`zy$IFz2alJ57biF-=2j_#^s{J`Ro5@NJEa&UJYk&?QZT6ilhR5fhK`M#Uq zQR(+-?sSg2C{G)2dQRN;aj_$5T>cKZ2f*F-xU3$rz( zpx|o;%2cod65IVixKTRs^>S?f-eC>FRu$WmU`;!0o#KmWJo&oI`U;n9T1<2rt5@ga z$|1P!JmAlxn<^B+4PfFfb1=w06km?KufBakn(?1&*ly45zVz!vanHCY! zN+_n(iCBIJ{)x0a7{K|Hg@xYxj?vNy#X5(iXkJ}YUL%%IXd9x0&Y?%3W4nTdY&Ol2 zevh77(bH@&7^%J#y53m`Zb5%6vRdW4V1s{Q4sf1)>Dwm?n&Ns?6dg|BkBJM?@M2M4 zL3R3)DMT(VDs)ZaA7X>v{W%t{#?oEgrC@`+LfF`h6KSn4f$rnZq6 zjsxOh@)|UVo?5DgK@9YdN>}S@X+}Rs%gV)Td=Q`wyOXrq!T27lv?pJm$q5U6o@t8d z)q`pECQ<}{Fnj}fR~FEMT4lj0iJ2ChD2wIJojA;*>UIQD$3hEFaT09XYj&20zn5@A8vXl}Pyu5E=y%=&WX1QYp_zwUsOALMm*CgdokIMxVS2s3 zP)}mf%3bU?D^EGZIgwOTqU9aVwR{Pc}nj^ zsFB*In11;$R-_mmk1BJpn8&~Y`8d2rM$1kpC=Cs_C;80~FtP|Du(K9FNq_WgVZLa& z=-;)$-*8)xHho62Uu&Atf$c|xLZp_itTqYqS$q{l!4v30OOKR{>eCm3J#?k6bUZZQs4iEFy zL7}vG5TriirbA!MUNYwJ@SjWe0nQn-jd^U(^Cs1nkqu;}wK$el5@oA?gGyV#oBNqP zwOc;dX-NMRqJ6yhEqOZxS+^rV|FB9IvQhVSHJA3WX&blbMV=! zj^BpFm^U_=y>BuPNmAs$Fsu00iS#FhZlsotdt`V%+@VoL0?`po0oG%t@Y|mbBk(=u!%5#o(@I&O*kOwI+R#jSvOIvK>BN_fB z6>vTsWUn>`p&N@;Y3auzN4)6a;EF4$>OowwrFNc(>(&-24<|%){wpmsdc6BtH91nT)7XarZrSKapZxv z6JQ^?rF}`>YA23xt{BRpzNWp1v4W~kk+TgOmSR39RBG3nzV&ug^!%+3h6d6~`pi6R z$(O2$EL53aSbI-^Dtx^N_AYXI7us3o9^7GB>%phZt-hIXZ^Y*Kv!bTza7wZQlT8>` zP3U#Sji&3KQon)~0ho2%_0mF^Ef9u=w`f`V`HZr{jtuCdqf1Qk8IXCl39*ez zSF^h2nmTpOHp3-TOU7D3g<6sB;}f3tpPXzTTI(@&cf$v!;JxhT(sj?(Lo zH)e4ShBoX<8qA7hBo6AuN<5S=G(&v_$07Wq%Xd||Mzqy>Z=5o7O;I>Xg0!jIl!Z0iikf`2v_6QsHo5g4IQ$eBx&|fu45M>`f5psli>%G8rM3y6d)q> zQ;fwYqyaHDFU?LyDr3N2*nGLWhlhwdpX*C?W*9c9$(m%J_cl4$1!mX_+WH!DgkT{f zWNDr~S{g0~#S@DyaYSW2$;Z5J;9$kt<>I2;M`JqfCR;kh2{Cm9W+=jsm35)duYHGW z5>4vMR8y}OGRgX5b98Ky-!dVIUNRLh-i{}N%ZF@nZJ6ZBNUl@b9vSa6F8HbkQjpmN z<$fquh~|Tb6_AF+^P%T3-A1u)DPTICl|8Ie_EL zn3@YM=vt9mT|E8leuw(k>9H-CGisolM3}V@6BE;c#dS0`dx*MSwfEa2!ZEucw5)Hq zfSgb4i&h^)hcl{P7IwJb2ZMiis^3Y6;?oc+RY#I#+WTPm{z+<&jxhg1!pe$zS+ue0 z<_Dc5HF+@91{LrT=z|t2Td0yN)P{|K4rD)|d0p2Ws^fE2q|&E=*Q%g0m`Jn)>U?{r zR?mz}vYh`$8F>@f0i^ycXpxlg)$Q>9Kma-4YagiM8rR@+9&2xX2SQu04Z(Y>f(Nxp z0Cw@_SChaqZ*;{Is|kYF0x(GRfSxe`Is5#?ogy-g27rZ1Yt=L3Y4!f=**(z+W_HBc zEAan>#Qayn(asaHHrL0q#i8{7k$~(0wFv_tR@j50dH!zZpGnsi9spLSn@5{d`Csyr z|JCf@pc`R8aud66DEpuH{SC0%zysvdxACfRsQzC)^T#IYS^vF>!1g%s?}&uIpVgSf zFChUnP*Yj?{p)S}i)wO;=V=230I*nDTN~3Wim{#h1@@2uIfE<-j5+b0qF(p9vnDn1v#TFP!~+Q z{L{h<=D>grq^~y+!v5pc`T6xVAHZ(T)SZ@=rsx(M8QBlWtNxXo{V|!xYb+a8n4#n- z_im4>`e_lUVap4pr^OTh&b<5V@JC^#5i=l7?mobRv=70cwWZ|*cRQaMFlP|O;X?j7 zh&2&@$Wt!YOJP7lc(&Pg8~QG0aN`h=z&bsO7sIQgsMP!X_@0c@+&ixHv16>#j*D?!6?9GkIi}T{Q0SS7ggpfE1 zaXmCa-l@Wzb?{_Jro{e-!Lfl2W!vOk(TPu0Fn2{;P<#Ald}yl*>@&_sQ-~j&Ki_wR55IEkg-ZlS~{R?^HCF)H1%bHT+o| z#v*dHrnOMLmzsEzWKs>wE6^zltmHu1$k}gg(=X= z4{xbQC@yds^(_XSn3Pf5#BgmmFq&5T0_(u@_c> z@Dys;s9gRAL;lOM;MXA}P<2J8ZdY4|Y(9&)PI?*T#v~8ECnt9uJk!8M(2fh{gqhAo zSVnAP!@_plxSoyVxmg9Z#o@t;J@s^u*VPUico#e<3+x;ueP*q|&=3*Kr58H6r9hgK zx_Lj4RhRzEhbK4eQ$rsaa!5@os^eV`@0_VHuGSfd_i{*ULcZ$wEtyu3{e_L@i?7z} z+1OvXGk*(>!6Wi0NaSMrEvl z+gBjnoSBaG8SCm+r*dv34Rl9{>LgUR$U}bibjb{#n4V0*6|qonDW)b(ma%;=>dION zI31J)>jN4{u8RPB*x6zszkrerxGj>>uhUIT+>CUpuKsi2K=$#*p@6oeB-C_Pm%bt^ zW1oRZGQW@ifU)>OLb4hVDs7nWpPo{phazj$VooWsYd`476xbzXW=6%}a+NpJ;5pK# zy?QMMv z0r`!^3SKqvc))$De@l(&*+(5JD7y9mQ zP8f2cjg_hXVtCXS49F>&Jy`>We&UZ#A~vP zgakF=IXNeoJ~?M7Uw*EnhD5r`l{b}eXJ^Mxi?K#Kh_J5>_Xtlj@6wkQO5I9|fJ#kQ zH~T!iG+fVR{2v~T|AUl36i-K6d*|eY0&H7Lf{2_P0v4Ms5jYhgH%Om0CWLSPnNFuI zD2vN=taD)y&FX7<%e_a$z0mi)I92rC+kl`LI%VleUUbL;TZ zfswJ51U-S-LfSB2z~~B0>m0Qm5*RIUYrKBE`ZLG9xwf6Ab|+sv`=z%1itBEI`OfFb z*fcxM^k^|h1HImmOb6pstwwk7FU=#rZ%VRf{CzR|Zsy(4dJ}(wAyvpeKUYO?lszk@ zL_}e~4{t+w5R*PK6<0|vSA^gmbK4z# zo~@S43YHG4c}f)-d@{%gfsA{k-=EHoY6o*;872n(Vs3I{%r6>ajfFZN&pF8d8FD-X z@ms?>D}2<~Gnsd`xyiOYB3c>#=B$g+X=#sy9pPZ`hmi1teSnb282=9xxh&*HY@RMT zs$r4z4lm@%i~dF^+SJ&8jQ#K3Ts`O;_8D65h~z&l^Ium(09TWDM>PN6SO0&z*Uwp| zk>ZNV{{Be!ytN5)l=Fsl(gyKGKNjJ;84oZ|##5;Ceng7h)fUge@v#uMlmc0TMxnH- z;ujA7(KZ;bxLx`1zsC0xsWz<2oQ z@&W_Y!pg%3|1I1z_;aqpzG#c*)1{Dmc)bX&u#Pm?jog@M8zmDgwe0u4uqzF(ZJd95 zM-#-?3~yr_zRXu#hLmLTv$h>rWWl#yOmiP3Ae~sVKV;B`+DaqK2t>~YAT?pLz@*Fe zT0CU=y{7lxj{a?P)W`D=-BdgJ%y8dEminjz^hqAQ<#MYkzS*lNNa|K{_ryle{PlyR zHr|Kto`e2h=P|z!S&#Q&$os`@BP%FyBh$iF{CGQOUZpaWhEEyE*^UW3_S@}VQ2b}h zQv!!d(=d(-4FF2aUj%xYublUp)6mo?`r@lmgvkNG=>1zsfWL=yuBx|39ouH+jwd~& zP*aI>CHU}bxAp^-u1(+zG6`C3%(W0mF1N;%@W&czNty%ZQ8X#fh0^YbSS!Sm`pfc>ce#N%vh6y zgzW#Jc+c>GE~%HhuYxQG0HyH@WqG_UhZvPzpIORVD?8}dQe!D|H-08^2KqA;r_bZ$ zYD8+u(c9)mEk>M-KWq6`@VcMl*V?SHqwp^mTa`%O-$Cv*7EkR34UuffNcDSi$a zR6orS;!ww&QE8P`c^JqNc!F48BZM=h3x9Yt1%3s7q%7L+g8XkZk$VXxoyq_tA|kR< zZyebW*v8TAEXDI;qTS|ZRjoS35k37Erw*q78s-_*-BKynDkm{}k$ic)k`(&J;=%7G zX0M-`$PjYesBD-mbC9NzPs``fRPk)CiSi>lEpCW0E-u&C_d$Yr{Hm&Gbc!3-266;6 z?{$)rwN_3R9^iDkKVm;YAhcBLz#0#A_+ne`nLv>e_)9c5f1p*$2&ol)@hLv^V*(3$ zGis}Tr|?sieSJBLQMg=m6eoSC^5g**V~*goBLw+Uw}SASxXo(2{Q`PYCDaLMb9CotUY=K0i7r2{ zj`@%P)a-sPm+@}JhZSxegUB4-#x-njARn2Z8%`~4Z4$;2_^GkzG(9)S!}zIrHb&MU zTeGq@%ul{SeDo5%_eGuzzjdl?aHUiZyY3TBj13o)|Ewfw12fqIX<<8A?ME|y z1S0OL_~?vvSXHjXk&N~xf7ky71Ap6-;H^o}r*;vM?Lvsir%eH%WMJ^BMW;J&3%M9| zNX%vI>rdZnjTg9{UzuW!U+m@=@j+v&kri+X@JQ~|P=c4nLXCiQZ3MElHib2XC};oR zv?$MU2|h!mJ~NI40`ampnr8L#?E*zMeNb$lrH-gGvgG#R)goZDt8XlMecf3l4?t9} zI;`qDEI==fpgVa_&GAurN&VmDWTp?AUr+#BJ@ULk5dRlGx)#IVp`s9+YEq}bhxQ9; zmHq6Yeovk6ytPw+X(_l`inGK&*)LUtU9Gu`PHFfk=IC_%6dwYVMa0}7Mpf|BYQbXcOO$s&| z4)udavCxfLricBj8HF9!3vm^CrSk(6QeQ%U`4t{FxGdqV;C=_m>s>2? zcS2eIeAt2q8M zC9gY~^w<}}wxlij{%B1NwyFT#a4$3EeOn+v7b%FaYl%Wua$sbTef;piFs|&o`6_7` z;cD8iUdzxZ%hNE<8n)c#OtrgN6G^V@pwxZLXAfPqp!gdtWQ{7gn^qg^%umX>y*Yaa zAHuHGWn9F6W$ep2ckJC5ove(afQ)^(}M0$b1`}; zXK$w)mnY}>DP~@!E!Fm(U&w+LznG^091{N%8S{4%=5AkAu_x_C0QTKnVtFZ{P3~n^ z9ZDztvv?auO6+@)LL(&y)S!tlhNoe%k?>_w2WQ*Wa@Isi(mmvA!Vec{G9G3D$?>tN z!G}NWamgMKf#7hzz>$4kcOjf&&cn81p9o)stybH>{3p}nN4Fp~(lk~YExC$i(;_k` zo9*?#c!h^56{kJefMh`0FRMv)qEBFf?JAiCZ_6K?x8 zND?797#6EVP$Ji9i^CyOKHin3+rt=ACZ`968s#GcCo$+RC4NaCXtd84R0-K1x_SjWfqOIIB7~UhwDG0rmzkduQlv5^4Zp}>A(3jZKPaR}nb>25-hjl_| z?XmjPLWDl+2~n}hUY5m|o&!Eg;fT{y3`PkjQ}`Vpwdhfa@++jkI*DrRI~!iD%#mB1 z`OYv;>8ev#H=#`7i}wnZ50N_F?qJWoNK5B7_hD+X6xusoVc5qnbhOxf|F0_KA=Izc z`|wrCs2U3S*$A;TE6=9*Pdo2eyU7uwnyg+kX^bzQTb%Z$oMia{OFxw$G-itoNQTrf z0m$(K`;qwYUa0j%>a3YaNGFHQR_1qW$<~T|na;`uaXt4J6%J0W`4FeiFhU_7Mnb$Q zq5ctZ`d~KN4sQ&m-@g?UiCoUn)>o4Z&Y!~-G5bT{dh@?%6JrLoVym+XQ|JUe`CW)) z$`v68y4l|&D4MC=YPM-`@>0_xU5zZ-wcO|}LY#Dq^N*KY-BFP@m1aF=+|pTPdY4TN z>)845)oc%X={5ErcIH64@)X=&=(AfAkAvbE&>PI3fRa&542PQQQd@T*q+w%*VXk0^ zv&LR5fU<2YqhYUNhuKZ<>Kw#?KPy>x*JKBnm`*Y{%Xp{@zo)YsL`4#SliUk!Vw~m& zF_CPcfw%rRI8G$cIt{&%3++8r#~XReU=u@TkrW(Bt(DkzF6_Iww^e(DvhT* zRS`NaPuJUSVB6GHFwt&V?WdthI$J0++T>{zTLb3CfUXR~9e&Evb@caQ0vqZ+I^+tiZxkDlBFBTb3|%SAgMgH z(B{T*=^wp_R`-dd`DN>~l??^Ks?5|um%LRGfTZ0iw2RGl#8g(hq(U{_R2!y2{PEZ# zXr)%OE;U`+>MuG;zsKF&!Y4>4Z!{Ce8cAH|n)B$2FYY5Pv)y46;LULLaMz?q8kHtkR!6m!4)k zdfe_`cOhd6&jDYH=PD&L=dW59p5hNw^U_G;<3Cv#?By&Yj7Br2{f>5>^IB>#o-!9p zK89n2E!7_61IjFCr_wE>o$cwgKV?SGpi3Y8aoa*yPd5hSepR%&h3^Q0zb15Q?zf6R z@Pd8hkim!bFW0{OgfmHi5zNChj=@8qz&sUXsZ~-6O30%_W8~NM!)8I-Cx~IqBdZVm z;c50eZ_&ufOZ#H1y0~1b{9gY#2(mF=7OBV_%!BSq#7)AXhGD8aKw84S_`9=%Cm+$p z;}&e*<Be#ckb`>1$>BnvvDjGUu%@ErMJP zk!ki~{aN*Hpx*J|5XwOGF#Tmyc}zZjnE(w(7s6j(++&oHV*E z=QVILl`3^~_cRQXo1sn?9Nh58?Q!QWtY;IQ#r#qGu`cv{TdXVL!h%h!*53JN@C=tt zlvz!P-OamSTP_aHl1S>2$r{a-uUE)6)JLVvq@hSMST(nT6%)E9D`jIVuubF)+(H`K zf#iR`XJ!Z>E7j}zc78-n!y>)>W#~x6(j+kX4CjN}J*JhJsfEDw=-%oK%TxE$L$tzr zWgbtOYDtCspvKO;UL}vzf#Uz+0?4Rfb!CyGM#o1FO|Dv>d38jMkop;>+ZZuHiJF=QA0P))8=(IT2{tSWR|7@zmu+A$t8S`{m=i#b~T4b5Ae%{{%RAKm6M+9C_}?_n{g5 z#j^dJt*dj%es8tb)2vNy!c<)l*&PijaHFzHFb%nEAq=&xH8-VMV^b)frSaN(y-ogZDO{CE@5K(=zB2jVt=Q5sa*@Au)hmW&6XWq~n&XIMZlpi0GU3O^YdI*PBE|Y&~e3_>f&| z9^8U(Q-?eZ&gyDk!U74DN^n_f_aK<HX2L!t7SWQ@ilntZK+~T~mv7P&ihO^^W2{<8 zg3Z#Z6(A;*>ym%S9+W(9zxYZr(Tly~^G13%2XvH$ZA5v!-``I`OQigNbe&~X9BbCL zgG2BD!QI^*g1fsza1X9QgS)%CyL)g8-Zbv+?g73&XXebzduG0$y}H(_s;3^^`?~MV zXi$u}o~{wv;vBe0+zk>x&dMBqrfOn1n@=LY*4ENWqc_OvPA?okYFqV?wr>62j_W>T z?Sii28F%Se+Z;eSiWRv}wHK=rkHPO6L$OsvG>TdF_23-Nji1xHs=NKI)8mGsuWx`z z*kz01o`E|w<`ZpBo@*FvZ!lc6yYIPHY0GD}syXsTcA%_X@FV^3)id$kHSApcPo0JW zrXK`pu5HQnXy&(lzfhWBq?zd%vD&!QXv$3=?CG%2{ihHFb7oR_gnsJNYMGG-zJsF zrv2F7Hd@ZG%mUb992oVRs^o!|ejaX>qi2WxhmBh&HSf%f40w=Iuq-=Yf#LaRTjgD? z30mG1d=GK}ddJk%bXKLek)okBrE(OuzOK$6|BO*RMab@W`nOTwNk>}^KPQLbPE$^t zj+F(L=92c2b7Hx)Vxk^Rmr1#io|lWMs+uuaL$!gnh>lKlY0Q0VyFy$G#r6DAg;aZ0 z1*I3?YN3{+$`hVgdrS-&sqQ+WNu>?>1vqWRwY$`ppD^E|)r0GYJWdXE!7YJ0#?aq$lpr1<+$?Ug{OGiMPi} z$;sxrVcs5o(##Hu`Bxy$Un1U5=)F4pOZxqGAhHR$BZ z4=%K5A}Am&xZ z42m=6%00*<-2uv7D+09Q1SW6AR29{uNKaPJV(t(DXt1kLlp8a^xJTmWu~==zkL0$O z8sc9dzUVVtI)cE0Klq`FvbV+98XFLXlXv<6llhwt7(iwjzV2jL2+E?$r)` z=&UcliPCVvkxAdPxZ<38NLYOrb*Q~aqzd8g#RK@19B4rAjaV52$HxXP?aAWT2HNE9 zADeLh)jofWHUDKal#|#dp?6JO4OP{^o#7an5;g3TQOcdmIr6mLH--D?NvvrBEL8pZ zG+pUaJ#R2h`F4fpf8D zNy#z4R^wZI+rf2XlA1-Y)%d*jjv*7RCJ(+0DKQr;j|=@h+~9e`y2@u{@t^$*_**`= znqQuktoGEKHr(Y*-oIi!IsS`(@Q0E0dl|FZz#j<1A-6lZm+z<-cY% z&_FEZ{v&+tv-ryCZPdqvnGq0{%RW1(?P6;&lON$1bKeMBtrhPn%UX>6v2+P)RW~WVz}rr8{ghMP+c(diAWDS!sc2(lrBg3$~GR zhdZ07p%9p^uHKR+r&Ot-XgHzA6@SD<2E@PioS^RN=kZ5I;z{YK=Lq*?Ur9~oh%x-u z>LA9xkd(LpvZ%%B@;Qdv-A$fs85Y@6?MwI56#1jVVL0=|1TFE?rN{3Vyy*$O;KLgl zFP<9A<&?th2*PdD1bXO?r%W!Y-(@2JvS!J<+ZlrgbqrCne0t17FAUpT0lo^z!bAR= zzj@d34JHwiIRqHwdi)=f4|bY3NeiFJhljRmDwN~I)oyNX23A!1rnMZm82jt!512t- zXYI4u*^fqMTzK+>MpDFLS)HMr@Y>r6Qa)VP!VG;~Z}Nrex*7VR_%a;eZwf{hftcOe zA`2yo($yD3-AEWWt9*HeR_IA z;T0G&VM$=YdpblznHoh$jLOKcoC=qC|M>LrU(+xc#a9n-m`5kLXvauNe5g`EgH$L9&3%d~wDx2=(cML4GBQ*XaP_MsWNV3})N9x( zFVDR#Z1^?4pF_w5?7Y~<2|W&~4SUO3sp`-DHF!U4csYJP*_}*fts>9-lyLbVvWp>@ zkq!3_rX|lDuY6i)tkhiIiiOz#U-(><88HZNeS`-d=ji5^ zqMtlF>iHkd1nO^sB1E8^P5a~LL4C2bRK5#8f5()4e=J;K1<3Y1jv;p1ML9-ijuEY; zFxuqFlgO_$=hw-klKE#RU%a!;I`E~sO(AC)3Hz`4-IxZC7_g6i>eRRm#TKi&@+x?# z+JA6L04qb9)iJ)SQ%!94FG_l%j9#pYh4s=@*du7DV zmCUVBx*YP)(qSFdR_M5e+1_g$dOZ=~f16T)iVTe8H{A^6FRc6&`&ByUqgC4wlGCxw z#>k=MW~j437b}lR`FMEG_!)-W{eiT<7i=+E>U>ER4ALWI3fR%EtS5VsqOOl9MldPa zFtTv9`?4^;b0o^|m8j!<=M$>D0H@6%qk9xLQgF4dKnu1>KtT5vt{ zfja)klWSUPwy$dnFlZ|48*^^DA&4(!s6>j!VXSKbt@`+0Hv{`vw!`dj6&HhqMmkf){wmc zSN^uYHIN7C)$sI@N6b~@V8JF-qfOWD?zBg{T^}@g>+t1I?GD+iPh8FZexf*`HJdx> zQ)DDGV%DOQ_;=j!uXz~`5`-SGa8!5W?jL8x8{N5yOAB3 zaXr-Pu}xAHArN4!6@{|6iiZCK&@j$%E6J38DzV%oTbQ_7B`mM!Xchnz) zH9nnYz!=I~(0m@y6_rKssC{Y6C&yl5htEf7qU{^j?~S2fC*Pu`7} z??WZAXEageLDC% zIXQW;IS@paLc0aV>1)JuWntJRyNkull=FW1DFNc)1=6pct_ zQ{z@PVmF_vm`*a0r}`1G%;+k7{LP{i4XHiq(Z!|`Y#+zw8r8|tQcn+>)y=_lm#vRA z>}iAEWC+fT>^F-+{Cq$ApvG>dZo7sD6~p5_)}HhM$TkA+Dz*6IgX3YWeeLm!s44T9((69P}6^ zze<-;J{BF-f@YiUVCEg8IM%j{ZKQ_F{2pFK{5IQvZVvx!RY3?+6cm&XSLJl7Df(L7 z&sZ08=>%Eo`;afsn%vbYP~fM}`e1Mp|2H8HMsZn+S{iloQs5e;yCHz&A0C1F#KoWmCE_LM`lChevQbwRfVuR1JlkyRQrRpL>@-SeqDhf90Z&)NO;Y)QJ{b zN7s_`S+wJj1Z4g=9o;1uW1DB&AHG`$@IMopWVO-#y)g)c!25zxngeU8xj^r$$n6hW z#!SmQYU8paG}@H^BOCwM8kR~zWCLfYVh{R?xsKrM8~|F4LF&I|oxd*nN7Ma${q$Aj z)d$Ye=kIs@^SaMuKZDz$4C`tB=f4j!Aok{keB|lBM+E3@nz4T{HG!k$|M!mnM2}V( z!8iaHDMSbV!`lh8QxO8UDb+!tsQ5e8^Jj9-z6Y}MLPN;q$#ySjC=A)zio&^F zLqt`$Mv9!t_*eGu{}5J!YLLeOMFEf7P&O3?1ZTt4h%_hWfO8P=mYE5%Az86|e0|tJ z#lwrl)OQDymzP)83(6w^b$`Qw@jb^;zm#zdn^KKCIY*qo_bX5{v%!M9Se0U8VoI^@ z7!~WbHb-DPq7GbvymjJoa$>%CKj+G2aLmejIyf+YTWcqu_<69mCner)pVCraA0K%K zEtJXlK`gEWFC@>dz)ViNK~?j##DLl5K5A zoN#oY#Y`Q9*RS>*$OQw3iYKPXQ;X6mLGC}q3e%f^@G%UBVNLtn6s5xnA)cCwSJbe=rh<`xtAR1~qPa?5!_>ul#SGn_Toq+G= zOc?=Ltz(L|LBV*mPcAlLrHf-kri=OQ6?1wPX{4taQ^2d?Q%Xbl)**&}+>}7b+m=s! zsiaQhSGY;@!rTvW?q@r`n_-G>)MxwtMUO7N6sOKsGQ@6Y0Sji3#%sR`}Ic6$yhmW69P8XGou%LOU^j@+x1%ZUnx6 zTyh7E)+_^EsQk~sCA(Z(jG?-+Pc`4(3DpPpkK$dk34gRuimHFB9RGB6k{$(%^S}cx zlF9z0%GGm@YZFQfJnC)6LP)#%bR7eg>^M+BkHNT(N)(N$3UZm z$urIv{f{71%xC}Aftywr2r9+6JpF?5@mjmB6fT0_Z0m$e<>K6TK^G-*a|wJzgSqXoQHY%GKpc?rI*qbJi2-cYkb39a8)Csn>BPl{J;;JC3&M zib7tm|08d!EWaWLVEpO|744DqQ>l}PUTarG3P=&ebvvifKR=IgbabTI?o9o5_2k=RRXCNo0w>w!1SYfo66Q1Mr`we# z?y*m9!&|!`NMI2`e9`&AW7$kL?XE0we*=IRcF?>P!P!jgd-V;WpF{dZSlY=J2X-}j zuur4-=l%iv;Rb*JJLO?>+8o`!`m zqFZN2{BhkEn3Y`Z5E(U%1BnI*62J_4SoVukZU7XlJ-j*2X^SvrUV<7n;q zmt)`PbbLRC7}@2mC>Bhn(_ruh#hs%^r|9E?rKq}y_&hp)Byo8Vo}b_Ur`)EL7hHYU zlwH{`hdW`*fXo!7ilr@|{DTH@_kQ+^5AOxZIBAmTv8 z32wxM#Ys%-9F?4iuc>KENdTxHQl_BN!&kg(g7y5;Sey}Gs;&PiNL)k)5n!mjuGxB#NsZ@D8|p{Lpfj0V+IT19#$$~QQ|!zd)B*k#^7ncC+ZuNFh7!BozKOT?NoTR2%ppzf51K_p_-L9x+*t` z^n9{}3^#CQx#aL}0h1G#mq3pq#M5iSNt+N>baWJ$_yy6u1;Jb^2eQu*_&9U>7>wMj zx}`7w)co2BZ-EhbyCdNc!8ex)(Y~1`6@Z}kteUpiY=ihwIK(d<&t6=Ei$rPmG6 zaEQ4Z34rgoI@wo=&pSTF52qad64p%6EXiL-V9f|Yuh-x}Qypp6Tq5FP!4J$Vq=rLX z6=C+cmTV-+c>~O?)KU*3s|-5_1<*mQs8{uu@gApHY)p5jKB_8=-U;lDSe?=$iCZsm zpLSDe3*z2l@goMTV7L2ITMT$^U8^WFk7HI30JIXO$#$snHBKek(N6*y`iH)1O8hWG zSC%KB#1uQGiaeo@^5cEL4T=VNDK(vF2||hR!%KjAxhTE4Lz+K@mLWsd%I0XCvz+tp zbTu;18BdV$l@t|;h#qe{1Iwr~14){R1it|ImwW}xMcjk}$GAgfmj?Q4$A9ef{X-Op zcE)@vH$2gg0NJypw968Ry`iNjCV0OwV8onU&pEv`xIRopg^|%-vjD~HM7#)^KxGpT zuLh_P&WZMqOj|oUjChwSFD-&NChVcrg`R+i%NjaX5fTFYpKJ%y+h~?m^?1(&&zwn` z%Fe5ptR%UrFP4HE(o{K1)Kh=|p0n7aW9{)3qCX5{x6VCYf_DSH(}2w3sx%=(Mp;oY z3OQH4V)%vG^)P-d3;50Q#&Yt}Yv>_}RIWjnCmCY+?ZWW5lu6nb51UtETQUsm(*mRi z-)En;l=SiS5$?poC^cX8^kU(@ZZ%D}P4M_Rr>!mAXi5qN;T#SV7g~_DNhW`B_dCHk z-5X?GFwRlrHGx)$OGXS)RC38^sft*eEF{z?B!WUAD74QmZ|ry_9)9-)!=$oapvn%+ zEVoQRkQW=LLd%c1=HFz;EtLg6@M|g)!u@%a42l48;hiwlwb#k@L4Y)%iDZsG1E}&RM^d)wDG8l#iKHzupN= zy#luk_j)!QE1rEOo?(c4o_EJV&9*Bf zWMq&+LP97RqpxRnzWwbkCuAv4;kBz*2-rg>Zm+>5E2@=x)Dt5SwWk4asjC7X6LP$f zc^Tuu#PiM~iylp1k$#=RlIih~RD; zVAK^njXTrq+@?e9b`^Gd?ou0Vh*il9HcFxh$PWYx?B&G*jUp6NyS}34&WiQCS%9iiP}G9zA(TcTTP7h)LHvPEdZO{zm^Hy2vHle;0`&VzVoeu@+8X_r$!f@ma ze;jTLp#jJ_Dc#3PBBCMAiv_x4F2iVbpk#Wm17Wz7)PCL~767C~cx{K4ytCbCg69j5 z-mbuSiNgh;v6{&bhe}FhF5j~P^%Y|>Wqzb{7S#u8_qoCXwPu@Z-N3^S-vCAnqbtpQ z5x!3!E_(R7g#*quSKtc76-2FVdqm^>ooBRe9BXQk1o+=@$hnC34n2P#G{i8!R}@J) zU;OCBx8DC+R*~W?c!GWOE-7S9I^TPkxjp!<<H!+LOUT{=byXozF$^X+BPnbmTXg&j&9D9g<7-8mCUn zG_F-!tn@>We;4R|=#VFMJ#idRv=N18%#;5}nd}v4eHi0L@sM}lqKd00myQ=U%r z`(k6rY0>oLSSCu%DL4(pIw%zQ=0;K&f7?`d%mzrbciXj@6h?f%D#A9N>83-qPWCd$ z%PFp23GiN6ChXgv?jA77~47noG&S}E|t^L<}dzYoj;}Ov(q|ui#?v^R9!QU z=b^%)jbA+bE9`r%Th-C5tWIpPsWl!gg7Z}=`&mUI&^kh*DQse=zP`S24OFTvi`iz8 zX>_p58P(2rK39{#Z`spRa#R9eozm=jBfsDFm$a5o7Cl7SnOwz#q~Mt z=Wb>kj-GQ7Ujxe4nXfumgM?T6xHCLSw!ghmr<*YCf5US8e!^euUW7;~@SQEv!7SN{ z9ing|y3_0DT1WehE^KqXUJykmy$lhEk@C8a440GVEU~%~lddmRaqR zbfcmiukoH%#m6oNu~$T;SeeL#5p`_g3ZIGP31vmU?YbkJh&61{X#DnJlCKgTO?$Mu@mNi~o7b7M4Z8O|4x0dc$Sgt{{;KSBPc;z=gD9$lW4Pf&6sJ4z zV$_!_sTs%5b*#nBK)>u?Q6`3Byh#?C)r07%z)Ui75rx~bD=?a{RJ*M`DAf4-3lNa4G-TX?4y(xD4lrF@q)x*Tk_w=to%V*<}KHp1@w? z6|Ki$mugQZz>gcvW=@zh$|+#gdrT$=OxC@R9|Y}N1cY$OFcu#p_7#9!`VkRc0X*T2 z9g4tJV;&75-A7K%vhf3f$d^Yf5y>p9{_|CEuIovo%pNUaZv_dZk5JM~NabX|JHLb- zKPYsvw6>9f>bz4n1HRlCAPl- zp~tMZ-{PH*yVM*6#@QYKv1wCz8Jt4M#K=NR=9*3s3<|3e60BQzPi$)uRb)ZN=23%D zjKJ;fJFiCeduagewGe(f%Yf(-N%xoF5WSjqx*i6Xh2e|Yco&wpuG+$HmK1uwGT}*e zuuhCjL~M}U?vB+mdEJoaiscf_mItFR%%`#kK_%d?fI4<@8Mh`!ZO46rnCF*9dL5~@ zoB~{ifWEs>8k!*7Dpt3A)J6IRn5_<{pS}H~hYAd5(#mEFW<1^R9!yB@*Ko;ao#8Pc zsq-D7uiw%U;ZDRx^w&GL<1|;>HtCY#%d?uEd`-(3zhbuK3}1u>@hKszH}b++gz^}y z^dy5`MuAYFAA-L;t3x=fgB0qpyPbB)I{6z{xe|&7w|&Q5zn+w#%VL}bC{ew)l|YVd zP_PM-ZbcU-9xjimcvrKqQ4At`N~$ogRv;l&TcLphP%Vg&q7rz6b#pCDKUJcQo#pt& zo9ru%J%}1qRROQj|o4+tdBjo6T}u#SKc&SGCuuXR;P#>1F<*XZ9oT&)?nA#A*;@ z6#rg2D_b5;5Da_lzohp5s_I?t-4fT^5$;;wDOZ5-d=@G!-@nARvRc;}u(?{#m|ak` zT94a7Eru1W)>Jm>X`5kTJieeR<4TSgB-2Jcy7~r%QI53i6C!=fh2Tl64R>_YmrNKN z5GNt|N0yJHiYa+a zq%h=P$khtldgCaJ8Gheme74Dp&e5kT_+pvlKRcM|t>SB&BPH95>w~B)>S8w_aw}ue zoiEH(DTMlI@LBAE!V|!UD)~CPlAd|p$7ZvJ7og^u&c}A<9We=*;%kFAP_dY%dPR^U zgUtONiu+sS*I7s$reV=T1JyKsw&(eEG=nPhOw`P3M4sWY57nU7QXZW5YHPN>!xPb< zzz7jSf4RPk5+;ZE$q$+nw&P`;&!NCQkoLFlP7mvN!|Nu>q%`7YZ#;#Rk5AWAcBRRB zp)hJMGcywf4ULq)T5k1rJMP=ra#O_0_Gf+vd_G2i6r}Cq6Ga(b;5HyZEP10<-V5O{47@WtEa|Hn5bm77l0a z5uY|croU~6ijNk-C7<$CFlQ@ZM}f)h(4hsEZ>53o$;Cf!4-&Rz`iX2zW<@5kNi zXq9%M;;Y%uwTo|m#;I7CBY0Lt2&1t zjr9m|7xO%1PxUOP;VsPCd~dO!cUHO-do{Uq5n0vaNvN9JITNVGAmYMMt~+NbZ=kK!92;-N_&2;F zxtYo<(N+s?`nh792g=B)qIT8$;tfmYWa_-7+bnL2*V_|V;C4Kv(J(RUgTln*$=a4S z7b3h{ws7yJJsB*%L(gWFR?lH0{qu=U?hDm5UnN=9L(Wxytn;Yk1+zCpwl5!~>)-+N z%iWX<4*&)fM>rC!VHNX6+afqOsfilzuL`F-{u*0>J1-`>?Xvhwi=7Bv zR3{Q*r&yH87gJ}EoNU`I71{nN7^Ax9_b+}%?o13eT9njxgsT{?VKb?B3%1S#VbnD) zy)!{p3y&p~61_9eT+L^NY@Vj(ogX{Kaf{aWXKo!DQ5ufWzv)M$eEE)ir2Z{Yni*pw z+%evPJw4S_f127^O*4n!oU){ z^~`;dIf|^x$O$m3NWC8>MG28MqomHS2e>04B;PR%;Dp;nxW%%Uo zhL7bGjZH58Tu9?lp~KTcGmfC=shuY3Nwfo_oS5cUc&c-EBLm&^?3MOU9B);U4_cK5 zZmVVRmzGyUJtXXc9 zrAC?eZrN)ptj~r_%*5C1@E5`z*MplWE_LotWr}1MYl7_H`F&pGP0Qxp3b}GmfT%Wf zy)F8^#V?L_knN&DU`t`G=?tQwAz7T-FdlQyK6ec}LD^>bWwP4e2^&a1>jx~)5%^Qq zhH-4(9OAedG#p{j45I!c^=MBB86M~U#KO-YTOiyxS1q?i#qPpk?_8)ZlpGd->zlA_ zW?IK|kvYm58CiI8H4+Qe*J6viOmt6&lqo%sdQKmk;vSm~>xfRk|GK5BEyi26P}~H2 zO~tuslaYtJB*=?&-upCNXJMQX%}#qyy2Ss{7+Nb|j=f=mT`cJ`RMDOn;^VUUh-!w1 zVL+;!U6=-R^2I(9?=@_p7Yx!_f0De&mVSC9DJ3<@PdH%o+11v90elmBr6GNfU)zPK z@$cWrGfVvh*VGUIDU8|7+)h$Y6_a5eodT{MKA)$H1J!1ZM53oY_C)P*`-tKxQ%eo| zEn(`_faQWTYohi!w^rLFXlLIJnCSNd5xfE$|K-XgFRKF@HY|%*cPyUe^OEib3eisH zXpT01e+$bcVY^Y6F5M`MW${2Gm@}}(v}bx!o)@C02gFuU@N^89_|m8dc)UvVR-Ye{ zj`c}drckpid^*QVd_Y=sm=?XnYlLHD|hQohlbNld0|nJ)RZbF>v>;p4zFAFEfuFBKm&6O z7n)I4_qT>_#tow`-z8eI6!sd^UP93!aqw5l-w-u=zG>n%#&w24_9~QaXJ2ZzFBDn| z*cI2^>!v)sB!Yi4!p~dkW$XBv_pOytWBEPRWc9wlw-`<#Z%95(J7euLW|lu~(Tg7^ zp;LE@#oB);=UY@1`G5mwAjYUydnexGV9eH0V-uWAt7coMf>BCKUe34M5EKip^?eY!+q0@p z3Fillp_PUw-f|zZ}jJrdUA+D!Sz(9N_kqgN;cgKAd$yYPd8N;wb%7Z9gGLoweO4yNeK@pNOaFNhb7!nXdlH)Dk@4f z08V3M%j~}7K)Sir2xk$osEjbC=D9o68)mdtM(`*L;ETQ-8=kDJh_&5~S9=aVt8h9u zGCX{LwO$9=4j(J4N=sY-({2WvB}rS`R0bz9sPI#~!`t;ZBPl5>NH0&k~4;GoUMe7zORJK zn90zuS^R+=`e(vQK1gQ--=JWYt^J;%)F7d*ox%%Uw$zcn-ReF{2Ocezb3d_A9pUho z=_g65DMeF+{k}5I*Kf8$49~~g9aXJub_od4nb)8l{XE0N2ID{ohW}K)lmR562RNRjRnU89wLuI4Md(48+D zE$xwbl)axR?8ZC-nXn`~kA$1l7Ww2AD!4#w%v{3{`!jAXePh$khgVxQ;K6oK9DTLX z5mg{-52rv~bC!9o{`QPeaX1s;L^(Iq7mtK-cjri?uEEppkzn2Jzip*ZZMsido@CJE z$c{QvRPu$Ji|Y_r8e!Tpbbi4;Gh8pbY50k$UXWe~gBhC0$6e1-RJC(JASP7_vteiX z3al~{`CdT_cZMZma+nJR^aBQ)k7kjP8xBh<|F0G}xz8u3>JDbhg}D}re7|Cg zqN77vpn?s`R0;(?e?2(`BV?TiiUMz&fF$a=E!ggn?3~3ecWz1Al)O8D%JT z)CF(8eW`kYkUxug(`;uNxkF^3g<(0AYwl8OOc1wCcbK3#!__R8V`rGIbke@5+Ca%j zD$$jEUs~9!dvG%m3vPaMGi>Hq#+s;8$BvRl3AhT5n2mxQQz(Lqy;cbz-RVvV*bhdV z65MD%p_;WsYfJ0HTq9C-@WmcY>&#Ij=W>W8z;)aIERJv%I@`KYm!Z3{5(7JHEd6ro zj+J7aoB4->L@V+iR89mcondLm^fC@Juh0H3Y|FJaCScGO{cK<)Y#-u!gzJjDtZX8J zYu!!<)9hda(qQ#PpZ$R%Ja}_8Y{{L``DaT9E2S^ybyQ%ymJ8Ss8g1CN?N(u_0 zeQo0a!(#EMymi-&(Ep)EM4^Bmoy8ndn{dyqJiUEOP+;(L)73LT^)r2J5(t3#Dw`{h z=%S;;Ygyt}=dijHBM@C!NM_lr8<`&Na?%G2k~a1x(Q4FwfB1G(X9JQsBpy?ltq#iA zh*O#^Tkq%Ed8PSoI(drkZ;mFs{rvDa`ybrb^d&6hJx)~1_xUv!ZWxe{{1N_f^#|ZD z5J;2+iKCI`nG?oeK(Jtmaxw#|a7B&1ZWIhUBX5(N%@39^P4DdNSRPEk&&swl?FL13 zKBDJ^wZzC{68-~H`#&tz2Q-UP$YW>m*C34zKUoS9DWPsQS_ZSJLDGf5D|+4aAnWf! zLjD8lm2&R~0`Jt==Y3~-Hg7~6iL~@d1(u5NY<6hNiaikB4F3~p;{kVRKk2AO|MC|B z`IlD456%Miviib{mdU>y1oE7GpBHobpZ1%7G_xO~i!q7Uqlv&){dm=aYkozw>c|C?J-O%lnzFA5_5jho4JVDU`;4 zV`G;na07#bTa#J5P31z@qg=n8rJ#AcR{uY09w7w?!nZg$Rkwvy6DNAs4HLfq0Z9|E zgM*3y47NEP5T%S;tKIb_f-t#+{;5InECZ!rHV=a4OsQcBr|$(JGHO;ATfic|N(nIB zV>QF)fTH^ zQ(Sg75+^4o2>sL032vIu`#DLtF@+eU&T}$mD*FhcvnDa~hjYps0bn{mM}sxUHQ=9- z$rO!6UXcfa8I%6rz|iu7zlwACzpJ|?fs9jYo12Hu*E$TXts_8{@cL(Flv4EP{iPXa zDzXIn;-Uj1KP9eD_MQmrZ?192S%`>pt3EyM3#4ocZ;^^a(?fzXFi$~)`+paWciU1Lu&*sL$OF>uW?|tUjPf%DG{3ATP zOL|bA&*o3C#Kc5FJiFyaIHTmQV?nbd-7w)ny+oQsD*Cvc>#dbm$u!TPb`f$$ab-j1 zkBK<+j!@Ai<8gY@tXI!MarD?n(Oo*mN2k%Lb7joQm0Uqx9)e?|nw^5;p19IFY_#Zl z;SE>k<|Pi@q6T1uoao?u1?!64Qr$>@f39B?wIDe#gcczop^1r!r1g9dZf8IM1js#1 zQBlzkG(R1im`|h^@iGY1=J(6WX1nErvZA`_Fh(}8w#;rK`~u}#y-2ENLDUz*^&K+j zeM6JjBH8ER>iF=}19b>GZgEZPolxt9>j*$Lm-pugX`820oamAfRN}GC>0DS<*9f*! z5Xbg!kE_4%RaNnyYisyfJT848Ye#46`Ip-x2$0FX&00G~TU%R_>HI*#p3Om+SWSyR zyhXCE7$fiZ$F>SNr@Lb}5e$l~BYgg=bwPz+5mJ4PtX2mP)uYaf4zsovaC%~lI|Dd0o6^p z+HdgQP6y<^{pAJF%@4=9XETfKWCMHPY0QJT<@kv6SF`_nz&4R?9vy{c^M9A_=w6V8 zz#dn7%w6F`?#rB3r3-BfO~umgI6nwazFl?R`Kn+&eGph|3{oX&wn!%&AH*o|a1+Ps z-jwWT_5QGnG4!Xf+zw>G+8z&XXC4l=Uq2)WO4ki_-zOH3=%N_VO#aJ;4YF;oe4 z*)@V_6_3J^`U~=Zc42a%bM?SvJ$AvkzBW$MjJv41q z($&{zmQIS=nhjh%T{>AK>j_5DDq%hDIad(u%liE>^M{u%lkL})k5_oT|FvqkYeF8+ zN@6bTo}YgO7IC-5qE`DjdqR1*xy@B<(!x3pkjnkBt{WCkWdMr6bA2oM)QGG1Q9-&% z{0Q3KJohGRayN&GB%l(~72jY-ZA%r@H!+58O;7lKgHXW?npMl=(ruRl^`x-ZjQcqV zIt#M8N?DEIfCx@)*HBT-+zf{E89qfKS0}b_oVejz_+2MYwAuoMe#37saO=4K&8=~7Y;HrN`{TQzyMlgB;`T=6#B<^RWyJdiFLmxaYP5!+HFSxZNaY;eP>hwW-2EZGKeO}Vf2eW zE0|M}=g;;hss`OO)i7ulevnp%+`vd-Q*jT|D_ii@OW6$$GjvDf76uGMPU(}bJbgUE zkhpQj%cIWqLz`=E1U0>CaF}oV+YZ-WWmao4YBG>ZVuB1@9KSxJv6PZ#;$@dlA z4978Fsof$vR=dq}^a#_KP!^KtSMru01h>;!a=yLjfQ$EB@d#V3zEBA%TYc&~v?Tis zA1>z`Lu5_fSJbD7)jWZFRpO!hg>*(r`s4pjqV#N z(UAJ$9W$zdipz<`7#*GHW9C>hytPmNjND}!b#79cg3MWFzxNYtm26&Xot%wJ@QK}p zvpRu`vpks^HTq9F1fT-`6#C?YDsO(IHdRbt+|B**ZFxhrtFT=l(eS@d*%$aSiI|G5#4O~U z%yOd-e5o||UhrJdo@$ps@41i%W9IEyG>s*;9C5hyv zPwLJ$rBvB*^3EEfcX_wSIJ0d`YXC#J)auQ%&+=q-2B0;Z00A7?k9zBaM^QD{JMRTu zbTfpdln_%>-y3gGOZ8#xY0pXR3(c!|UJUZ*sj%UAbgN8l1kI~q9wIZ8$x}OVY<}EN z#e<-d4rC;y&el|ALp>T`#?Wc82DW)h7gwQnPNWg4ZOU%Y@9m(>cxy7U{-~U&e159u zMs)s<0{0p~`}cx(!Oku!FqO{qt656N@%yNa@U{zQuNa*(4m3XO{c9)hY4`rG!qnDy6Do*{{A&j;cKA zDTuttc<7eRV#J2K(Tu(tA;$mc#0W6=)ksm7heE&ut%D;)n)FV{Ax$$ei3As^*v!U2 z$B!n9?-&c675m04CP3O3mUaP1;?j#8`H-#{k{zBrVe01t?r}($M zC*J|T%oOH01W|lB9Rmr{Z4x?{uXNet+5V{?z)cFB*J^`jlYYj{QJ5O_I$Nj9Xbgbx z$8JqVex0s;QY^~JVa>$*O&qVZS;m}M1yA{?-Gh3|MlSUHn?pNX1yU9uAx20{TpaB= zf5=yFZdYkMDt#y4z{tZ7-$SDz7FOr@etkaTVfo~@yGW#p-|bh?i1W2nuJ-J%Hp}gW zgL7dMi&(0NjYGMekd`<4s9?zD?7SgXQ0GP-H82wMVCOdEMA7Gvs#v^O=-EO2{}K0= zVR3BR+IEl-+#xu@CAho0ySp~-?(PnO;O-jS-GjTkyF0v{wa&NqIcx9#-_O3Px@y*_ z?pZa*bB|}F`emO@=H%x3!QQb^pbBb}SZaT&i-;mJ8aZv0AKgm+yBGoClb6`)Z-ar>;&`GErW_hTZIxdrTsJLU{?19~5M^js!xN%Oa>cJfsf%6i?v$i=G( z{egUp=3rZMUJ5XxlFaiy<0`V6Z<11tF8B!0ak#)K&5Mr@@AwRi|3Opepa7z+IzIAt zQ?ISjkvLd)euw-srF42BMUIW9Eof_!;N^Omxa$kWXO$^gEKe;%!k4AUUTKlt3u}?t zbYd!9WC(hjo4pT?ptRezqg13jY1KHNYdfmUYjA&?=47Xnw#gi*=VCd}TM=ZPu;Z@q zHp)cB?xpINP^0{V-;!NLHpF^Yo7j(QS>|@!#Nf2jiA9&=xm#_vPGr#ivXn}Wn|G_= zR37{hLc}!R|O-#EDbCTBb{=d8b_Q%I%`A^YX}S z;7Dfze=%&2oCB^(CAm;L1B5y|yBPjn)HSWD{-|9l{OXwc(57z3kI1$zBO~e|0lrcC z;mrhCr@SxhOmI)-G9je_1sJJ616G?+hB#;kOOrfG!bw1bBj^r`A2JIY3ZljPH#N_V zf6_wZN=&kNQrZ95)jPdpNwgjp#f6$a(W04e`mo68PMMbH181H zA1T2qyP2#v9oQ%o;IosWEHR31qcRf)f~?mr7roQ(C^IRe<~&~0g^AnieHp2EhGg#% zi}51GmP|GxYRJP2`mUNg&IL)45Kq#woX;c#cNP3Tq)|>t#BJ+HYVYuiuI-E%TICha zR0ofPlWI^NVVyMPGE}?MWYv%aMT* z=~J$`C>{%*m0!Wyr}iAEf)HB6=~b$2=oVGq46?RZ@nBoZt?$4dJ0kiI&JO2IjgB{D zS>dbpFd`aRw4Df~7&P_ z^R^McN?*jELtg#jzS!4f#*q!n>?u<%Xd{bi{T@OO`Mx>IFzi@ z{vkA$3@bvqm_zwsQv6V4lov;%87i6fuLR69g&z`T)ppWCX26JnK!i@nh_^&Ltgc5yhPjTJ~DY_gb~B%)u87NZ@Q&BU7m6d>98pHg~&0 zPxF2%Mc*gTP9Ka9=IfJUF#-I~%lRo+xchr4zz4DjZpz5c%Q0 zMXK|-jVx0qtXX6Z-&fQrBMh#NQ?Ci%lEl0vPXB`md{j3~1QNHOTDoU02GDM5L6&RK zbJ;L}tvC(QJ3a3QPETEWL^|&BY~YC;)r5c8<$w~fB{=ZzGwo|M027vyb||Uff7yy% z;cB(wHjDLT`=;Fr5;M)$Cj(vR!I$^NS&y{B#%D2IseRU}KLp?M44s)e6E`m?2zJ7t z2bbLe&&r;}JtVKX`VRE^K53_%g1>=i`xkwPyVr1?=pMgBNWNPNDNDyMSRp8BS(KkE zvuXrUG%`Bzl4%-H2?`O(wz#9L$y?=aI0Gal@^adrwN-HHf@jD{IJvx?p=o^TQ%iZ_ ze(9#rRIR~hed#sRD08lc_?bt#JU}RpXM2Cb@EqB15m7XSl1NMVCGYM{8F6$Os}mWm z6`NiDS6sQ534NhB(cP9B*A4U!AN2r-LW;z^Aeg*6+lc%-+o;wbtx3$33evp}h zT~E$l9>QV9gDw??9IhYujQ(Tl+4+G6SyDF@7&q_f7tqq{XhD55ks9Uk^owEp{kHU| z7#=FVGj+y&;%I*pQMBNJsNngD$h8-i3+-NCWn&`O`<-eadDZY?p56(Kd6LCcA?=eh0P0f)UL?&IQ zSz0IxT8a|vx*@{*7&;Il9*YW?nLp>Wz?1L9lbm~thba{&<+h2$q|n>{+;$y#8p7u9 z9V+HMcdY1zK@z9v>aJj#n~98^bYK&>FnT=&ho!8vzb0Qd;SOg(Wz)_RbfN@W6vehu zw61S6{>d)!`H*GHJ&7CFm)LQt?5>P(!9kP?Y4+5&T4@uE02-aLL3&Ft(5(f|6*NkP zjV%P|##N~XOBlb>oh`W%m%8MdT#^$jEG>&U6|UY7#U57{-x8N(qD?evxAJGrhDoGN zloTs^pO^8odCc*|NVvw~junrjbAWA?giWSM%Z0#jsm+@@E&8AYJv=52bMJdo$V z+fFz&gU~nZsWjL=rUBo&TL~|_FpiVznYV$Kaf_=QJ)HrH= zTwTQ4y$uQ{g*1;u2fdBtU_^y6nr%KY7z8hmYPF9Ca zE%jH&4Y+sXy0fBZ1aq5`j0B@lC%-8t+~r0-f_-b}W9oap;7JGq$1qN%cYz7Q{26DMJr>kQhd^X7*qv@=-;1t9 z$UH(6mxQP|61#oM-SRhBqDiorXiHC2&sV<$91f-R_})fc=G-l&J-V@PWIJAvbq3!QuXog=Cmj~)MBU3? zaa+XOk&eH?{wh0{K_7!=7vzv@JH5{$M6K1)AU4x$S&W`}fswE4tz^OlR5*QwxNfdZ zF6I>>D9T7lwdx2Yy}E8dGhBMn-mqHs`HJ#u#!g=v37UsfJd^yHiP~o5w?1Ujcsh^e zQ#a3Anq#d4a}Iy?OfcJ`yhL>9Yqf$@e1qn)>P*CpGjoWTno@L~jLQDn6MD#n{IkKSVn%V6J%Hmb4Uw z(WDHyDhSBn6?pC)c6Xv>TxT4ImG)GW7BU4>_nKzqnZBDqj-NM(qi?W^KPX*dIhm4r z0(F?KUI9Kd9=J~T6ZI60alM@pP*iXAsKu`(H%+489`dTImGF@$0?d=}Nh>8ib@zGq z;An%pRMWpDHPVP>hQi$EQyb_+CB zZ`mAEEm6yooJ7>fjHsX&-1Z>IQ|DzqA59D1EY}lkB(v;Mv zI5d~vI0IPPk$FW83MH;x!7v;8!Uoj!bw^|dbC>OT8U^EF%UGsLEL}*;_$g^9{E-3Z zBJ`yXXj{w5ZhdN}`|gDakqGpuZxO-(uDS3Y?anQ>faKaAEXKzaM6laoaW@u}5%m z?qy{jaQDw>!6)7Zx4y~eOn!pBb~v`2%GcBSjfcvDAq-zf5;NoXrhnpx$y}hsH&xlU zL>nE{l8{)KETG!}#c5GyS7%H)z3crgUf%+IBqlX&kAy2VuD7*15C2^7^#K4e(4oCJ zD<)NUR2R?&O4jm48uEf1-_a-YPm2dV(6`7gzrBk*BRx`YVUgzI1SNiX1u{<*Y9wUi zUs@;}-`65qwi}$X7r_e4aO7da+-J_)%HhOcf-=8|cwy%jQS(Dc*UYf$b`Ag1W|FjI zd;_;$&~-JVQIA13=QP^y2zIRqmUtEMyyfSCA{H*VhlF!wpYu7ZGm^J&j1ra2c!d6w zOp@93Q_p+9oiT!|KfVl!FKaT+Im%jzF@Wh$=DB4YLB_#(35 zLW98C&qSH9Fhfx>h5*C7qgJRdBNJT$XpWL^{JT~(0^;q5EOyS&eZ>6=0?CFaTOwHc z%;MMuVedHdHS03bbji_Hi@q)BwX;YyW`<~c0rD8uHXxyt8qS$UK~a(UE$uj*f$%0^ zl#SB^dT|$AIsXz)*RsGE!jw+^3SkO(d;5BKd)z|%wX*&@*S76HNh}{ zjbaMY3DM@15a&zY4ylx``nvvLd)H?R@b>>Bh49esZ){nCKlWK!C0*rQM$e74(+Y+0TdpHbrqAv@v z00YsZMnwr;7%LsoBhR2`q5+b)BTs~Jln0&gBoW#n+IA2XvMTw;D%s@ul7;MjCC0Nf zH{=j;8>?ltzCZvH7FM|2vy7VwRRMC+&prEtNU<7=yFuH+4tS@!$~OBC^w$k8dP4%_ ziJ}J_>#2bPxnqoMB2MmikGvt>2PKj)gQ(}LN{d;G=y^wVPMfGtK7V;(;6Z{CZ3h5K z7i3Ngvs&mB)2f~h@g^nc0mvdi^G^@Vf|WTx>%P!qp;>US;@M`(BRiJ@^}Zb?=e z5c z;{+INU&@Pct}i;Hwl)sy2N4Tz^A^SFTg@xd3yu$l`n>CPdL~HxY}75NXPL$vzH-LE z&NO<8AAVRDT0R}C1fz3V2Vli16Ml1mR6)z^Z*v)!P+$~65HRd_YP-3DvUFX_ny=H% z9oy>=nXDq)*;o(ln=rF_8SRWC6YVwq_P&Fw@gOcc?!^p6wox_EijSMP`-pHA*MVP& za553*c!8z@%a4JnS-_k$Sv1k@Pjd7a>0N0x7qVx6n^dPia#9Q6s25L7*`%xAoiaUe z@CYw8s0N&?y}AiPsd%apj>-=b9taO|-1s)pPo5Wt$Z$ej%~M=^$IZktcA!1I%Qdody_W7Fq)VWxK^-QtjGzcjlO+OW%W7oW2eSc5EFa!)+6z@?^CU%(vtM`Q<$L%wz>wbpW0)~{ z+WqQVWXew|Ng{wDpG8}rWB2XqEDcf5HPJR1e1^7aB?#f$c)i$>iZYWgk4Z7|$vDk|duQ{U*g7Vl^JV zE@xXMdFdiDTXD2p{>(i4)Qkq~h3w*V-VD#A?WBAl=R{eb+=i5fAwsmXr}h*gV?-A3 znS58inDg!yh^reSV6HiIM+Ij-HSv4N#Co|YB-#yvA1!DW;z_P09}iFVtlE(6eoq%s z(8@pAOgCk&4%}jIki=0}`lC3{*V2i8WyC?-8pf{^_|$9q3L5hku$lo`Tva7%L>$F; z*Hf|XaSZSMRT~|HTPi?UF?UU((`^lWxfLz|RGC|(m1AYuZtWGWZRip&zu}%gHYfAt zByY&miSS3D<2IrCS!L!KUbdvVifkh}4pC6vwQBdmFftN%tg2YYhu)JrS(3>a)7|Vs z8V48vdP;h9=emYC#Ibo=#<=zCnfQfmj{VF2x|^#QX$;{pQ01fznQOz92eMF zpLBZAW43R+cklBITf|pHfv0rzyzcwNZ2F z)^Mt|BZ+oB7naZ$2Z^1_nt95D1CAF zR)NKFtRPr>DuTb$QI1_Z_B2Nc#Yf7?q9YW{@OHl+VmFeJ6nO~)BQGqusA25Q=;?fM zZJJ4~0_OHMzg=Ex2JnEzVlpFkcQBQXMMK?^fv$tmo4aB#)m4FT{x2%!78~^TgdWDh zRL?~o>V9&<#(DDk*X)vH9KoBBb>~z(nm#B3v)>EH-CGXnVBG(d#sBO3o0X84vk$F3 z0|?v#;I1i8ND`LO{|y|w^#NL*J$x`3!2K66Y!itPNM;cwF5)Qv>%jkZ8aw;|l3y1e zW_?)yX)>A8MI;1tX%i){VK4m`J@{`hZ1MxDI%oZ3CY1T#olgEmUigWI0%4RGIRgi! z|1zfR4 zz$D1O3>E(#>1OIDgxBW%9@U?|QJ-Xi)rgxm|K;j|ull~gVZMDsQv3X0H?sf(yCQbU z3LMq{i9igvAMe|dY>W^WdprWoA3Scg&T#C%TgepmnuvxIv<^lO(0b}DvdCC` zcSGYKB_;SSUyd7Gv$csYVfEs_g| z?VQ!sCW~cTHnDSskY3i|H^bU_ox$(M9Wwu;SQtc99z4*e^F{d8IMd)lhkS;2%x{Gb~ zl#iT_o+2aJ+N2)>kq*w_(o3wmTFcUEI+JJ~5qd;z3crnKMQc{+_v@C$Z4k#a6-9X= zfBfLa>4-;tcSVF;RTTunr=8wcM|e2iH%|-Pm1|EyGN=_LeOIAzuH4eQBF+e~AhqzV ztmi>G>^Kv~vO>PK+xsS#8%_8Nh=GxAn2^7mkvTk?F9y+Z8xGEdFK^w%pmLEfIc-~d zHLK4&>Claf_?^-&$G(nMzkk=mdusn!*3e_oEH-G0h$UZZJizB$EN>2lu_Z27*A2K^ z88?&|X9Cy|%^R>t*2nK0t#r99T5E>#qF#C%fpA$uja&hVtj%sxJ->6;&sbHO*>Z4w zp^I$bVG=6_fif<*=wIU$69~R$Un_;C$*ZTt-1HV1&MRIQm&4F|mUJQkT7%rD&8A%| z))3E`Tyhl;k5B?XZtw~Uoa$B_$3mYAoo98gd$%bFAkQcD#dR13;zjhH9>8pC3h^$^ zD~0)tKJE7g{)$*Qnn1XCb7bNuJ<0btD+O_N@yFtswWj2pjEtn9SGy0y^cm-jV0~Zp zrS-v!*7o7{f3*<2#J3URb9&-hf81u$QGOz@S>AjXiMg{A-0Z+QCX{j!X>L84>Sa=6 zB3X`V8BaFT9-t?3o(e}`naybC`ZV~1CEXg}4RT@zvMe7jx1-wP;IQ1n?;PyY%hEBGLnSKK2>@5sRUcD4Ggl%19t`P0<} zda`9jT$AoOMUL4m2%wQBO7n|{>kHD&N}w!y(hwAqM*W=Om+N&-U*&1YW={$uOVI0I zRvENlS4UNfNCeN8zbjnHzC+mUWb)~Ge0e4M(v82Me-2D)mKEIJYnEVq6`NV^Rk&)X z#OPdc!&@K|%FDp=c^9{PTrgvLmN_>?adNHrEi@nZnR+2#^7e|&K*1oE)d*5!F7rBb zjMwMkE9k?TT<1(^ODg4s#(<#$E%F$={zEpBoa++Y2ul6IkX%g7K$m}u#1uY7I&BoT zx9B+5<)@QkdN>1tE35BB>rw>)38Kh-icL0x!ZtSSR8s*SgE9(oQCotzz-ACR;pxGR z>+bjWkrbKRPWahPX@Ofkf1_QrsOBZ(SS4Ic@1uYr{L~B2z)HgCFqFy2=;eNe)U4W8+_H7OHim?bM>yHB|IG)&s7CH}GhL5Do}p%vrveptH8PHcpzqe%zZjtTEn z0-^gl55*v(K0sD$RO^A;iJ*$H#>SifLdz3+XZS z%j~;F^k`VYmHGD^f8&nN@__Gtwm&ULtVIQaBrilpLZb|~gW4xlzk!H6NV$%tKwqGu z;pr((NT%=RC@AP0Vf>#sv72GY;}2?Nnx782bEx<^uGzc}vlDKSw$9*wiO32ISo*xXSCE zMEM3J5DJXOXgftPY5gVm22mIE9BQ$E6K(3lsX%6@#cWv$&%CmR7v=dVcufFI4*oLyhWo!EI1^a zvOT|)CitNMjzRbl7gLP}V#2+AocxyA%cy5!@Ps>72rwMXya8=~#5FEF9;Fe`05eLM)_Z&$AzqA z(1RN@gu25!w_v#q%vzx{a_~ru@)2ZHedPtE7Oz9N7+gK$cwBf$;TYox*1*@)!7$%U za5U=EBX3!xQn>MNObZ26wFCFEl9xEa)72pj>!TuXa};ai7(GDM^^}KRELj0*h$(Pi zONh3JrKcVQj#HFi&x`v<#tND+=`ounzZwoaBBpbx`Ff$!O16Ty3!+FMuo4-YurN?q zKQCvHSAMm#j=O7Tfc(kcJcNZW$#EvM6^GtJ_H&fY?K|ue`;yqabGD~LCaO)#Qa{CP zcW5M3a1Y+Ru~ceWP))C2DemV*w;q_EwY9Ml&Z_K~fl;6x!|mgAtP&zEtn|8VOka=e zBoeK4!VJN->Fnw(+xmGj!gDAmq&#e~=x}znx3kYxa?~_v`CayKmWO;@M$7CzDUgy# zUd@vh5SWLuVm-V{GfW$14G&C{EQOvGi*Ai16(`gxeiac&ehxRld64J@Vk}5i^LgYS zo$`|0NNabutX zl^5-`y6iH(Qtsj5gxGub{UNkn`yh+`73mCFFxMM&ly8g=h4GINr5mGFxPhsADTiEB zz0?Sb3v})|b_*a$DJ3%RPX%6wlfV&XEV#DYprr~P#5ZTcchxIYZ&wIu1PCG(b&G}!x~2U-4x z(gl{C+ohb=N$h|o>SVFmYh48zwhCU-Ynsh+`4jx>`;CZJ4)X;ZbJ68ToO~9GNwHV; zuQIKbpO`0Nz?THLrt>@jt>1FQaOe+s7&8;-aiY&JewgxA+^(6(=8zqaW;mcn0If)@ zXP=TT3XV$JgbS}{i8@DG4ovbt{U&g*use zdOX>X(+*|OT+>NfD!jay#Jt>G5X>z*HXY~qmUu=aOh7H@(B!&oUcvHk%7Y~|s?m_~ zUc=6Act+j)QmDR40IgGZ+EA!c_iPjPpqTCRG>I5W>!h$~_rv^!Jh^3N1R8mv-|f)P z8#;Ncr0AZWd6=OU)#zGMhF43piX{Ib+_;H$0qo|`sRN8xlnS(G*Bd)6I%8iBso@~~ zs}D8siplPB(fwIWNLlH?0ZV@lOSZ%>CsPz-Ka;r(fi!>=EXfWh0mi}iA3L)@VN%Kg zv9}qqFJSqh9$Ok}l^fp-wPtSx0@T_X*aWezVkBe*l-KRl)f#0lVwtFhNLSLfY166S z(dUd4_md3l$3ZnLWJRihd_+Q|^ERY#tVf1fpiVx5wNuZi2jujxAAHz8nD1awin$G5T5n(pKwz{pABGScTA_Frrn)VOZ3g&j~aoMI2z%!zXkNWSB^vz$MNR`zWd zd@U057A*Ss#7avgIGhQsm6vH3H|Sot#H{26EX6OaTKo2M_B59(2Ma5txe8*7YD_54 zjeu_X7pIeS5UEuE_W;7lLOf7KNk*DU2w@%Q(r&Z>pj;6nbSE@UZ!wI_vXFin0?RthYKu<+Z$Pz#N zg?je8!4oTfQqNl@SCYfDlP2#ZwWcc(hULRY&7Gz|!Kykt1fP;vt zxHdMm7UwG=Zkl4tO2NfpgmN?I4$N4V#zE zv#j7NKugj_U69l1CA7vj84}7YY^pA`ks{+ux+u0^4E?MIFz< z=i!+|_>r(R!b#qwe)GuE?w___tIHNkF#LCm>dDtc+XqE-LottP97KDnYK5ZR2R}1G zrPWtpjII~01ISDzrRk~J1u_>b+RONTQ)DciI=q=6#Fz5&q$7hAi^h|`U%e;Kr%fjh z?1i?_S-*baEJq5`$Rs9~ENlg08TQ}-X{Mvq1`{f#-7I znz|-&P+8PZ-=mzZ%OAIgd}MRb`zv&J$eXQp$J)fJm%p68sR?bK&3?=6NNLiCkAuc9 ziE}tVCCN_9SzlTLF~)JqU-T>sHbga!I+k1jSf|!zk}{>|NEH>tL8s|T1R>3Kt12vs zy9w`deKixoUaMFYZCu?|K6^Y8<8I6pDZM$0d7Zkw-VK|fC**?s7ypqLO=)kg@r&Mg zpRO*sqMJkhT$~24>f`w3`n+ad_Q`$Wbwj2W#o1H*SGjB$ZIs;7$afm{-`<0?_R#2} z;cY6C3%BHtk6=TrJiKTj3i`Z_W{Km|SL`#+gNvd+Q#x-07~zn$O7k^T zBZ>@*;iK$S57dG|puNLmn$1V*`W5)Bz+H)PUh(-UnTluEdHVsdUj}QK=*e`9B zdBQYV+~%6f^}Ly<8zaaD2T`ve1BGeCc%7tn-C4*1J|(}(6mJDL#7YA16BEsbS2LFZL`|t*^ePp2@+4jg?1)1ZcXuv<205NZKSKejxWT>nDatdDvG1b z32R%i9}QJ~*>-~wf>(f`W^^toTl#$UO4`{y+0*6<(WJPDuABjM;!8uWZLcx|n*XI2 z7G_bj#uCLBLE_d-5s;0M=%DHeRCF-&nDlPG)Mu%HRqYI;6lZO)HSY*YzO8ahvZVPM z)4&KjsT!IG*l5;Iy*TJUPm_6skrvHrE&G+l8!&3?&MypVvku#ujkqPmWK7O2LKn=* z)0nsO5U!7+sT<=>$pke~lNFG@4_o%ag(s)8Qr87HAxiTb(udQmWt?FBn3dc@ZICV` z%b*?@tq$ah%6c`2r=sRy%AgY6>Oek?4((6xR)HckZ`5~Jc6Hh|^7{2vS9?eAz}Q2< za$NA^b1x9&02_EO1IdWL!n?{(xU%*VL3PBf(;Dz6SGO894sD2INg*Vr@@~zfgoPs= z9`uJsC!EnkT1fJd7`6!aky}!n#vM;G z&7_=qNDQsNx1udZa4-ZxJi}A#lc{Y@1khKU4OXMjBP7@k_60#j> zOq3;;FH%f_6q9czxPG_u6-a6H)eh7y-YxZM&C_Ld4@4=? z?qq~+Ip^t|XP|Z%W3OX(n7fbU13f3^CDR6+8k*Ips3Ve31(H}&2TVAtoo+ztQhrb3 zZwOk1%1+x1tw1Z$`+NAL1An^euNs!PY+5a-oSq>}6UNw*&HJaF%DScT~13Me@sVo!UK*zJ7$)L~R?9 zb|z_l&`8Tmg~I(R-J4`2P7VIK0s!mijbcjh^Co%#AV~n=4R)J|VV%=V1iAO;B$H0! zIt`fj$UgfEh{_%00)9fJEe2N2SN4WGh3MVRe**$Ey#?=rrR8QW9!cS_jy7m-VXu{4 zpGHQlq>HjynHXDH%~c4B37_)Evs(h0!ou?$V=XVc!L5C(=w%l$wJ*aaY}9ymqST=fNz&_GtHVJff){W z6=!gQ(Q1sWheFG7$9N5Nowu7gjH|igmdwd!W%qp=qds6`bfXaoDJX`QRQNN|;ylwU z3+Nu*GaN`!Wtw+hf}}90+4I1^c?z9f9*Fv5yTDKn)6oJC?0k?>Lbtht%Dx zR@L6iJYHsk2Uh9$)7UtoONXOO#}WJu5RfU96OyH6%D$Kgp`&Pb;v&d^?)^lC3;XR; z{B4DGUHL>&>~3`%k_j!!3Vv4Bh|}-H>KVE?I)%)qWjD?Se}rmzYRnWX17DS#{y%uc zX)R&-bG4Q?pE!1XJI|=uaG-STS^Z>=ZGVV!=Zz0tKL>7Vj}m;fo5*2`DWa0RSla5a z_gwD|QXzY=q3-+Vt);x-tc2+KqFDnaCA4V#U8%0DYsu|XE-6Z4v)Iqy)-kw!fJzz9#&xpbGHqsG{6&r9n>hQFL%iqZHqW|)hcT9B46kpK$ zED7Te^uRvf#Re{xHzhI4-cMow>Pf7yQ&N+b2?E7Px1$Bqa6UX(!~H8Xy9v`(XSwQI zmsRQ$Ny|i8$}Lwpvt8@U?^Z8+LP@ z*-7$Av5KSpu~OTU2t@r?jY(IT#Umt|WlZ=FEcpW_t;FN>1ceNutt9N^I6 z+k^^mNe`6ChzvwDJ0{OvooA1>?TEz}@Hs96FXYI9$`Lrg1PSr!< zR_tI{WH@g!(Y#C5Lw?%jHvQO^6>c&c&qZD+3^;10mJ(kH!PXMzdL3M7O$|A>YIu;k z?@d1U&Zt|#9057sggZ$)#<03r z5jSBqmw~#*<>q_Qmxmd^FMqb-BQw7o;a#}nhe_}$N1FxNjHP>|1_PG$6rRNC4R9M? zxF@INI3r9GLl{^>Dy$>;Nk^1Zg0a;DWyT|kybofXoN2zD^f(|X5eh3P18k^yFD_ci zOI0T_Ch)Yd^8C`a<|V$RXkEW&lOW%xYJ71^kJVT8ZBhpcYmk|s*MLDG6Yc8kC&Jo( z(7E3Y``XsC>$M0*ZP=rpYI`Tx8Chz?@e zsWH#U;ImT-I|j#L8?h-2lo)(rbJjWZC-25xSeuQ+;;d#lMT4t@BMWUd+~(DV?Nr&9 z4xHcm5>IJZtXbKeV;*++KrU$fW+r}uv$0C828w$q*Eu!JNTU__T&Q`xeEv41{3?uy zH~rg7hh%3-dp!>x&!w?tPz+;Q`_koRlG{_cG4fC}L%TBFA9+Qa#WC%x7Sy)I-#V=A zAb7qXB&%%m_l16&Y?~EriIdHGwe;n7np?R8N2nrATx*L?HTRjqV`JP^5-uK~a+lo* zzWcP(emC|GtVJNrhV1WI#SER(>d%DxY?PlC$KgS-PkcK*dp;p=xCW$PIM^VrWLJ*{ zXdci>dB^_84`9<9$YXfpLTKzKW-_Y2H!pU;My@D%i6_1qq}GREgE$|9Sd9A@k$;))oB!(}_2oSQ&s$XwIxLSB!t(zJFYHN|zPnYEll5 z>*eN3=-$eI?y~^yx;er8wPOU_65RE;H45D4zk2f=e)+>-d(Hh+a!HP?LE|4*l-e_!o67>Itp(+5iTt?JHM>->p#un({CMo9TgmC(AXpx52HBAZk9 zBvH?n;9CtbQNy59$3Jfs5OC83?V-E9b!oKc<{lgU4zjzQ-H0ow%eNn?bIj7um6xbr>1TDiF)lVHLXT_ zRkIe`UGgDKdt&SvtNh)Q(~)MTxNPIa$3(<CW*2(=7A2>f$*gc39@!rP;8*r(T{E!Q_OL*_o^#| zCQs3W$;Z#i2Wt0I?OJpT7#4$y$A)*S4PCH2YJw7+r4DoE5t{WaY=aywZ*-TRz z?+cQuTh!Mz?J1y47p2SW;{t6vBn3oL^sLQX~$Ruy5M)_PgREeWI@Mk z+`B%TuKiA{Vy_T0nTOsn6E>1v)4?-v(sbESb5SKJ$d$i%4gRgZV?x@m{(7mwRnwTr zJJO=opq|OD*M1%Epl))P2;o@$lnH%|LcKh$oKwPrIn=^whm5bCgw5ksb+Kl4^hBZf zM&sFZkNRuF6O113+Fz7npYhRXi9?9W6}Oh~t;O~3cX7l59@%~w+$5`O^XaF(+A^ zzZdJ`jgtAw!jX-VNS><;5?K~Gb=GLq`xdYt$W@)Jm>JSU~)f)>oS#Xqh zncD8=Yvr0yryibLly~v0T|Gwmyxbjstog}}kP(_ekh?=){T_0_2nVtEZ|ysIntHKs zl)b&`D!oWz*%ZUXJc^&$g2dd+$z!@MK`V84gkN`MSv?LB`3e0Vn&FhhW||s`QI^H& zv9}wN2;fx#MIk+&%6bkk#afXNKdkGoXGr=ra)lz7^)= zV?8ar(o4DEm5on&;WMx6T%#5WKfAV(eVO*dO)I+gNz=JX>nGPuFFOX^}Ujd$w3Jh^TrA0n3A z)BbksynGt5P{u)Na!TK^LG{ItQs}wiR2cbw7=JJ|-B}d#`p#KM=EreE;~1JA=#7xO z^{vYJK%TIo3(77@V57(qdE~BiB{AkXFSw(s4B5#+3>eJ6QuP6b5b36rKI%UgPfzvk z`WuiMuAkZ=HahOD{7oE@Wrr8O>r9E{-l##zNc2X=rF_W3Ad=|YQu_q{ynf#o$^Wp0 z7Z?_~E3fi^7}Krj_uhdNS}o~5_zSs z(&8BV+ZaNK2+4(vit8f=Bld=YlmpH*rcZO^vN5U%3G*Z-wRiBF z0`cFBz&E&k&VnQcI@o1+2}lqB)&)r^W*$ArZapu|J)1ajf1vc9!;O%pXByp`Wc$7%`8n~_%uEs+*C%Nvs8T^Ei% zK|yJEz&^XcVfstU=b3vVM}yM*OSQiWI7P*Xz7XDOP&nd7zi>T$JfJgFfTg*(ICj|* z(hGR=V#u?eAVtM#aHcXRjAOoV>-+4sX)!8ViB?#aIio3hu~itnrFOl|M!}m(!TVHs;PY*?gpKFP`XAUYHZpWPuu!a<{CFj{)YR*2$81DS9z z*4t#;?AWI5%@mChWbq~3mfoFbJ>@vy40~SgN!WhKEPxsYhc?(esi4TYyzs!}JSfBMK9e z;g#n+DlD_gcI~S|pD}HBlbqX#`smf#(25satq&IrYlO!SKY4*L&$ke>|M;Dbix#|fQA-kC+eVckim#p6&EK*2_EBwVWVj%@*YCe<=-Lp8Q@7O44 zUVU<36&HECd$4bK75^kQ$CN|vlQy&LOftL9gxqPxK99>47Aih7EcOMyLPG{=TkjYhS+{n7chIqI zn;oNL+v?c1jgD>GPCB-obX2izCl#aL-1j-p^Zd_!-uhN!)E;|R?X_23>zZ@@rpB?3 zRRxvM&4GcEb|Tn!g>EiFmn7@Ues*QJ^^yR{8g|p&H7|2KikK8kw!y#D{fdq_3%sBt z$*}|t8zr2A5N8{LA6eK>` z_HWmPVvg1gM^=8B#`;i$gTJ_1tE}&Rl6=vq^DC#0Yg$bZv4;xYZb7-as+$O4dPQrk zntfdImhUS?A%WgSWyu;V!FogW$r~1&xSPb4_UXAc-Q=VY*^u9-W8gYkjtn)0Ea=k~ zKnxC}Os{6kFfVqeU@sDxT5f zV|lh{Un4QQz*HdE;IIOpxmLoKjuo^1n9T#3`BSclNqNZ#P!l2cW*}&K;NnMh>(RKB zxH?dCFD)*S89ysw0y$6`8IKF~rv*koAsf_){B=EY(FN!GPG=nEFbun%gV1zi?B_Tx4qrJkln{7f%Wb39mDO;{(bDxRb0Ze;Klg=D79y|rOMCX$ z98JryWloRZUslUmt|16&E~1$4F%IPB z@O%A=+8^F+8k#Fod}$r+GxzaBudcc}q?@EFv32=Ww-3GLRRF#HUpeY_tQgnLtK!7a zC>h5@rNTyKG&_UNG`icOfOwFECl|naGZtc_*?CUMkk}ZppH?+M#AIim!aFFnG|INC7_0%BMvxS4nYCv@Q#}F#qp6u z3Gql^TUvzq+i2J_IlGoen2|%U7A4?cnIqvkLJ%!5h9r5t;YE`I*+zX0+B+fmy$Rq- zKh0(zgZKBi_W-Aza#R@c(lIJ zZ}8I2UEEd{RY!Uof}Op|W{MFM$jO^%*C&;}C7=YXDkUu)BeRI*)Cp045#CUv^YW{_ zOAPZd#poZBMZ{%k(m`dZHBX8xajh&HF#8+6fR2S#AXwl@X$cW4WXOtsYszd~Iwjz4 zNy2K1D!Yu0aM0)J9C0*?)<$wP5MeDFHpS(bP>_Z^>HC-cscov(nkx)|cz-U@pw z@#<^F82M`|f#cl{O;>T5D=nh+nRV3|wWM_ETe{fuTtRyjpi@a^>W4pCzr{_DzoVzw z8a3mS!XrB?>a|e@3DGyPcY8h@bHvcXBtpms8vdzX+?6EVq-oc+NXxH6s3p6}g2?8| zhz_VM-M_&JbU}G>=9D%H1d%@baa?xyUruJ8v(Yhm7N!j;W=DTJ2YscSiK6-{Bi5i2 zJL&_f8AVu~9|M$P)j~nGY>eLh+qWR$IL$nhA6*2q5FltfA)u9RN2`v6FM7XurMN5; z8~(B-%!Os7HEawY((~C7X#Eb#JD$>k>hvc!B8?j*64&zAX{2QpO5gJn5hV+TLwxtQ zc;dHLMuhExM4Zp0ABk-It=?R*gY&tm1&~o7B+OKcK@H%Y*TapO5Dr&HtbM;TulUF| zp)*G=JV}A8_aU=D7-acb3sACWOM-PZPqA(|?%|2B$=J7XHm` z@C`>`b=_0dM*obcZ>h?ZN?+S2hx|8VqNR$^c<_5JpiaC8Ol$^9i;f+iu77-$OCn zr44;Ounb5Xx)2~&uflVBB3V+b?E6U9zkV_+;{Z;9Z;^*@dAA48FEtk<$Lw77_%o{n z-Zg^?amH%Pq2q0l8cvBB+=jUP(~mG#-R&HWF%|jiZzI5(&a;+>G{T&0JO3vysdG<= zFpV)!vhy=O*LWYpE&hz^T4w~c#pHmxr+ti4hc!+f&P7j}ML|I;?D1s!FoUK-A19Gm z{-PvuJk0s+xQ&V$gf0oY^Bpu#@!tKrb?jPC(_Sg*{kmsHcAUJQP#nYr z8KqxD;lEuQ4$G52JfD(zH12$y*T04O1;-|JA5G~Nr0Qt94lLaSosn{!_`G6G7(i&; z1*QWOX|$@+rL$92){wjg`nyW}j z%f%)eoz3ioB~;Av>1K`n26BRbj^q=}tGy(hb7pp9|9$ds<%Yb=OfG?Sv7d*>g-)Rk zRXnr2@J5Mz!9|k?U-&>is)Kn(GVFfF2b+q=T%T5bFuhiV8W7NQvD1uaEUdF_I0Al| z?q9g!I$dyC>wkthDKQ~8fKuO@nOU=U9iaTwdd-=T>kj&-T{cz{+u`Xcoe1vs1LFDW zLY$b*JqQ)qx=X(ZLOqU$*}N?Pta1CToO1rU{rrPKAlf`mkzw`wqHD*uz9FnOaWnGv zw8aX>aHVaGNzhgo(OBV9i~at^?i;G@*|rtQCe{D(A%My56|uhf7QxIbTDedpRc(Y* zxX@tynFGgxSM77Rgyq}Re-!vgY81O8*I#lxe{+N<5$_CvvZ`cHc72}8%jaN8zduZ2 z;oSTJr@UgU)x-M)->f}c99Mdis5coT!w7QXUS$tbCs3E zZUQVQU3DA7cE3jwYjun594k7EwlyZb<6}YjSZ4A8Ngg}&8D0XNsq$@mOHt@clJ_7G zT0q6d*y1C;3}fSH1Oc%A=B%}fvQDvHeO$dDR~(lID_h;dIkCi#@neVt4qbSVOj`X@ z{XfMT({RbW%mLmI$kdO%m11MrnT!Yl<*Dc(Uc&QOu&7Etl+}_B&D$eNTgkI%)fT^H z<9@F1D(MC{N>=3@$b7DWuk)H#s1yasIH4@d*%}=MPu)(3Wx+!(IQN=hf`UK zTOr35(s6>Zrc!+VuqFDh&VTIYhkt&2xBm7^hY1afLrl z8AVNHR1D4Y=?Ro87iQR%H0Yd5qM2pe53ki({xiLq*(>T&^t#1wZEk~si;M;rS>T_S z7bdcYf*OjHsy~=EC?RIXI%b?;b!fWz`*#<|qbaio<)bX~^GMs+mbF|bG%Be>ELOCX z{ZJT$wt|WZnh5UKAD<~Y`3F9yS(hbl7#zK&PcuGp^zy1cl`ks1P55W9r3W^*V#t|F zrZajRD>yyXdyTSzV-2GoMosQaB@X((?Y|yTnM*(|h)18jm?seXo!N_Cg^qk2$SWwn z)6mlPZxYtmS@Uoc@(rz&Yct!aGMp7NMV+)w+Nl5o0R}Tv2j4?s|Dt*Jw9##|_ zzEoN;lR9hDC=J7faM;|h-OL)Ir4eBG3Nwjyp|^ea8+7qR&k~o306xIkv^ALJ-Q%ig z^MT>Rv9r#&l8rUK;3ak4{3S1Pi1)JUcsnUw3LFF8#p{mWz0WJ1h3(Dt264ViC{bqY zUP+ePc+TNW_h$*wk&EKBpB0fM-VhNU99?7E&~?j6<2Ed1mFUd!UPl_R@?MV12D#{q za11Bkz`zQTct}ihM>fC*wOqpRJ+~tHO;p*VpKm&&^7>v8=Ot^E&CGP(<+%sV4s6Z$ zBzKpCK__$2bEpG8euGwNd&wA*Q_BF7Aw4S>!sKO(9kw)$eLKLQ2q@^oM%Nl*H|yj; zn~r`x=bpuNbxFV&Jm)*^Jc_|zoE7t?@e?cv9AE|!3-=ejSMUCQ8EvJq47~eg;Rj96 zza$AM9nM9r?87>e4;TLssy0*QEf|c!&5dU2Gc1RuXYP-Qk5F2I@Gf@4=aCK4UP0pB z5>WIsVwBfLY{z`}ZKAQ$o_K3MA5+Im{lsM`kDLbbQn|gRX0n<|%<7W@2n16?OJ9r#wjZ=+~$g;d8Q$V@#(L&`gh^p|U1)cIxn(E}sj<+_OX=5TpG@(ZGewXjV6oCvy&L(@&E!d?$X z@SYw&&9IXlHm1hHe^hXCm1wa|OxGe4(O7J2@sUY{<^obK=c{`ijJ#Z}KT8 z$e#h&TAOw>T7XiL(ef?6O>P+i6@P2)^|R&2VWbb>=A(wDZ)IADh1o=%g%^aJEv7Ar z_`K^%*MnsEAeTjJqcs;hy%xzcNHO_AIb>cDdFS+RoIu9KL;aIbuKG+fw8P)Yk182D_n_r%)0EqGnnVfHv<~?i;Q6xnhD#k}d`;sHVM$I6>)KQEttsxHBGGa_a1< z@m};LjOW{AKq>z{G{W4Dm7dW1_*M2e&`D7(Z>fGL!7#al7A*5kZ&+sUJOnS0h?XUR zI@f#h?0` zLFQ>O@t1_#@&Z8xv#Mi`MNc0W6?x5FB=rnZLyr>8*{xr z!iVbl7B2shs4{l;>Rnm{;e)q;?ydVeXjzYD>9x-3DDRCBd-TmRT(KK+__t;l7LEM| zI;MBDg~J265cfwm7}yExOCBlfcB^-|N=c5TRAiZ7f&*HqjZSmtWA7OK36L?AfN9Tz z`r_JEhcG%GyXVb3{S|6;QwUNYCwJN~{e1tEX<_#{_%A^~0c+eR;Tr(C3MLnWPc&mj zcocc038jEDwXo!*bsP6vE)xFP+*F9AKFF{K@+SLfzQj(&F-;5Ll zf?9Gydt9IcU_*(CYWCbd5K>czvD>dYJYeOMJ~2}qKkB?`Q|QO?zvU#v=*qWq+lc(E zJj&w&?f%OJQv%h>mS_d6dKw>JsN>uI5qy-9VZ|DFiQu=DqjdD3sYB}d;+_|0O1mY>no{~8=21-0Fm5ZT8!_sVOg<%l$Rnq@gA{?Gdw%LsNpBRf`J*PBT-go47GxY)3@_MrodV zTwN+rMa^@SwmPI`L)T*DguCIH)Vd#zE@L(Jv``MgYAP~IIZzIkesZ2Ri6&u9Q?@>D zkD0eXyTW`3vX14$l}@O=)jD{AzM_@^#Xd6293#^Ak0G9XzLM634adwW&5ai-n3UnD zDi0-^lwDa@IPU^S#ut{IKnp{s%%yFBPc68(xUi|vps%m57yTjN z^-Qakb*<@dz(qZl0U!MKX2UXteiDysv55(R(XYwBMIVo zY-o2PJDwmcoNe3lg%X()ZhIL}?hSiYGk2C15DXQXI<@D@Fo&*QDKVHAmF&8KoDO60 zH86QSW?jPMfG#i5dDg)3URLP4vZ7C8*(in~no6JfTgm&diKoQMdGCkqOK_X1OXR85 zE6ds@(tNqg?JFi23BBrg$$DA$tOJ&*(Z!OrEGA3>p}xiJsmn&NAzr05bM1~f^bFLM zpwDVvS!9eSt{Au``1c+Xh?XM0h?kkgk*d4-U$CghIpF60Ta3NC0lOrrHLGT8W^Ln7 zaVS>;TUp7{W^dpIx<4=OMxR+`xUuDO0zy2M=13tp4g$BP7lsYnH|w0)kTgf1(XoeeurFJswt$Gwj}$l;ZJtb z)Y3u$lhO~K=5Gbs;&Re)R<`nA!9HH`Ul@IQFr~Ba)(JrAGdtH%Bi{di2poS|K3amm z(4Mw@rG@=x2+`jZj~OP=4c}PLkze*y|0GCUvVqDvL%Dc*a(A_k;ZO6u(hZK?Sf}-F z5cRTM*(w}y{?k!%j0QeFKAu;&^aqBtCb-`B{lz6IB}K|rvwG2+{>P_M)CvafF7}Qf za7gw47(@PL^6>@_V*VIFEiUdM*HYKA&FVs_~PkFM9l==BZnZYueDia(Hd}e9H2Xl`j!cl^#|Y!{rK*choqN% z-$$4O6L1e(Zlm1$xDozky3DNGp3-vzP^B4*T6oa$&yIBMC9@3p-4<} zaviE$pVtRAt`(nDLY|*T-Sh*B?t9PWU`&y~=PKSIiPv1zvbsAPtJ$z9H&?@{444%` zy?|%C^I@u%X+T;{{E58e&)# zo0yl-lnFdJu*ect1^QF2xOYsCjkZh*AKEM`0Nt7`0DLP9~=eM!NNchJ;8#PNwr>GvWZ9XQ##00MV{Slp(}*amE}o zO76J?t-9rXyMO3~7SZciyD1MR@j{+&EVIVB!-@_2-+C3_YAB%k$T1aUT84730;ge( zkZQTYds3gadyWtU9#TUUaLys$`;@GU>Oh{J3~y*}!V)1sGk#r#f_63(Lbwn;E5GjT zGU1!@bKoJ5i=D5zgV$cQ(UiuhLDKp9a_)M2d=Y>EJo9}oDpOZick9lwkND>Z(+9O7 zyS`u2lMWqD@60p>$Ug3BEkldy(1l}qEe=^+!(!0=0tzj`1Z|1KT!qi2J-19qL_dyP z+v~w0bR%AM`sSXuT%urf`GF1vfVjT~6Mb$*kM8lwM67<*c%$J)3iwg#K+pN50rjPy zqXL@0sx4@c>5-UE0Ayna2ak6p@bDs_0#>t%H-Bg_G-SK$!_)i4hFbT1m#+KIk|5P) zns|geFF__ZTF-Iy5biz&+Jo`xrLM<$Yf;g(G;X+FS?yk~URH1ARaS3^o1yzwhpdHb z${GUosm}}Wgzn_X`M<{U5R`LBIKM-?mshmH{Dmx{%-aHIXQ~rK<%1dtuk`QG2@3CH zfwv3wKzoNH>Rc9;bdY; zx7}8^P6iXE7eIDmLpC1jyTPD=qokxH6f`sw*AH)w{Q7$6fnh|^e)oFzuvg8u#s)0E zY5veZyvvBOfU55bvHaa#b0l~=fCOi-3}QlDap~RQeAMl;A-6=%jZI$@B8E&jG7VhPS*gLx4h6$!_5`YB0n$ilm6tC&1uOPA(__wWPWa9 zkj#XuAnJXxe>&cJ!EKp9n7$Jb5X7KT%1KamM+WW%G0_Kb;8ReZe_sA)nAR>}b6&4+ z?h2FSz<9py3OU7taY%PxkM!@>ir1Yk_ESJj#rQC4?b$$^@XIf__U0$=MP}b69DIY z%LzuBIo3$!4csGSD_^0xGZXw=`j2f%$e!tc;)(u}+=xNBv!}e%vN*Nn&c!jkmWFy- zFvNW5;!nTT!hXT7-GE9F#A>r zpk|-y>N;aEGBApHB2zEg2O@S6b-g)%9Y3Y!+lzP`zf(WiIHhnBR=SsUbKM%}OGB18 znl;Jky@chS*9L6!r|6K_)wip+|Dn2wpC0L!;s6hQ5VgjFr;1~uFHN<5DpW?^#=e(R z#mmC_=ZtoV7C@_BBXF*YS!)Ul2bYxOn&`-o(h-^N>_F3bt*om0^@f|ntFV8fb`V4l zuMcqWtYP^u6Nuo78^fBh<0=lvCuP}NFex72^y2{u3p1uiK7RV6oxhG_(%$OZpAFpQ z>(o98;$p9pL(<~~J3RVKN|UuUVWo;>w0TQ4o!{-S(h zAP$mDY5!hX&qAc7iIjFnTDY@kC-`fzq(2nNbfyTg@10pAyA=bV(Vaa!I-;cBIhx8ISgh6}w;LN9!{W3j8m#J2I1UU9#Q)k--=XFN zzp(3KZTQ^L1JhNdZBgIZ4Z`+9GSP6b6oY9vtgh;Q1wVJ|TIbd+nDNW)ueAtp)3pJv`?CUFRlCfl z9?HV_=dDQVr6(cUjJ9RoZC9_=1;DjSGGUJQoUHCoue7Ars!!xNLFTOUdL{fk?+vI5 zy4@_ux)-Q*r3PG<@i-&c<#L7oP$sq5^1$EBPuyeT#3TKE6W$k?f`wQ5)8;!Y2t)al z5=z#8rTJabfH1)_$^~9Um^!YSYp-bpMV*sW6&vlNio^Hy@S+>$zqt)*Z**9gioS2s zdrke@oBn?j=|-@BDWX!2lz^1m*feiW>{>-x?Xtrsc4~2z7@^SZWl}z(zQGLkzrO5W zRo5doh=Wp}4U3SZpV6gx#~+lv@9(x+gL2?{JvfTAC>KYToulTfcHv@{eURHYEO9Y@V%vJJwvGvXK&kv(Eg?f`8(HhN{Uz}}# zey^P;4&R*65t6pvlboqyA;5rdJf}$92!DeDjz7T5qGvL3Jb4kSv;urgbQ-(PK7xn1 zj6rQE?6u71MQJu)4$VTt9ZU(C1ftCdBJ8maP3b=qE|zsXp{Zq=u*kZGd(#KSj5`}3 zv5^PrKFYtCf&i$5PWm?CsZY~31P z5<4!&ly~ZubOQr)JplJnS*EeN*_RF*_X>^?e;2kJasEowEr`6bi3;<;cG_r;MiN+^ z`irxWuR}i!K`+Q=f<1ksms@V2bhn&Trwq5cHQwIr2cH3_?=O~g?{84d<0sj{#wa5* z(4pnT$1W#4n=-Y7?>7Vz(-pmi-FXrXZtD4lH;FtY{%p0?3w4Aj&ReiEm# z4L>038e^&u@P@8xLiRS=0yy{SY^llo))7FPhP-|msv_(wBk(Yp4&(6{X9Xa#;6_?2N75;E#@)eKr(i6C?sd#8lziZ;QZS$r*W#@y&aO~1{l=aK9( z@jQR&Vr*!JqE$04oDQPgPybjIDk}XGHG2m@DzsI610FzL-@nX3#oh|`eHbaNf*K~= z$Vl-FuF=6anf-e1kmW2vE{B*89NxZ33Pmac7;KHJmcfMwT^?mqQ5^ZFjis^f<22ih zCg0johoS_5rEd{;#HkU+K}TmsStz6Cr(6Q5)|(;HpNpMKhr?b2i=8FpnhD#P->xU6 z@M@AmWq$4^oVXC&TvPZpk-z?;FrwU-h04LYF{desf)lgy2#Ra7#79sj;C&NDo|h;# zBcPnw-9D7D<|P4$4YQynniUZ-$qbrXWgX30q>F*_d$&Qj#4F$Ii@X@X7Si@r_*skf zMwM$1+Va$U@7H9wDWmTrzb%)vznI5C2_F!^?azq1!zP90FtVk>*S7 zmFxg*MH84s{qzR|I*I7ixzXIu0slGM*r!4@Ht|}Sz1q%(L_~cRk?Tig85XMkHVzFV zK39jAg@#W$ZU6h@J`t*XC2%_BND_~kPd9*TdNSyHQ%7p#gW=bEVyWU7CC5vzZ-K z{Umhn0&J%ILubf2JxPs#hk^R!4j{H$nHoYO>Gid?+X-~(*lw&NR6_D9cu5Z{ye08v zSK!j(?Y)-`t43!afR;@|Na`hxDZh2AFz2C6cW8k^DFesZSw~pP6Lr(q0&O#EJG!b$ z=#8xu1FQgySZ(A598%xa+ispax}y@!2~(!DTSN(vT$sRQCx}Ba;!fl?z>HV4r7@JR zDnUuUk-H8!EFvoUAX}t=$1%gR9${ACrJkG~o|*uQyETRpd*UFm6NZQwt##ts1b$3t zqW$synL(U)dTx*eXbvBEHY*}uSEWQ0K3?_d)Jk#|T%J*gj969Lzho4C1FDe4!ib9Q zsGZYcK+hSxVpd8@K8`eU-Nmt6q1dxy(z<3L3+7h?wwG(Nud%q`=Z1roTdk`$<6;94 zBVMT_r(%aRZ_7uzf%1})wIfg14NP91pseEcHzypBMUBbUe>6YK;VXHuQ(!))=y>5w zQnfOTVO9UId`e=%W#m4Wg+x9lt9UcXodP-#{q>rf`h<f;tiBQIkn1T6^5FauX_7p&xuI zwqB1okXU6=un&M_$X`HlQjf4cM77fmz-N@#MM1+vyT3pGcL_`4?1}gv=G%pbn zlPNrz7&VfsS7&P;T`S^|?n_{F82Np!6w^0|Pq6lSyU$wxf!AMulLD!fGY=0{ycZpH zI*VoHIwijSQA}mjtKssgSBWnq1smMW9FXl)v)!?w?cG?FJsXg~$i5)O`Q^B9oNRwz zRu&>O7g=A1^-%eNbL>PU0biEUS_{mMwlB`X8e-#bO@fI<55B9d0$J-F2pv))Jwr(Z zj50ZFxTuiF_Gu~eR#S?ZqBS+EvJKv!4cF{2fxFN@kQ|460jAuPunX$kisM<7#S>Jg zF6zf7{(1ZC8~$$kNFUd$=5)Tq;IczU#gE|KZ%UvPp^tsbMLX_JNgTYrngrr^7&5&* zr3k|cdV45JumpbY^dLsU3u#Xppda6`mb>mjajsy6VBlNbpC3mC&Dl<~2RG(~5cD<; zK|?4kEIL0tQR%l%BL|b7CA=IF`Yj%wuWd8#;R+NF#dnd>@B)(>jUzfiOId~DU5xwd z^mot(gGTgk3!xJrzfw<49ULR2V~NtT$q5Tf4>O=;rv_V2DK(h%rlS`35=E@(z9zp# z%WL^V50E1N8D)hd%~UpH0F?EXt|8N@$owN@f*y8N=idnF~JhkT2wE zo13L29Z}@d9fiV@D@}gTiV-|d93Nfy6eR~_OTW#+LJkZ^9F|H+Jmd*~I>zGR;flG$ zofYWHNXV_1EWjz3mlu_>|Atb^7XaSxWNjDF7KG=ZI;$^4_k4GZ8odnF7xi}s@Uw!E z1+}r6E@Ex2^WkWkNIWc6?7$1!J`Vk54{ zYA_2%MZ>mx6`Q1X%@)o{s$9;96xlaxWU=eNxDMUZJc9-z;p>hA4-+LC*TQ%S3m=~` zPI3C01|V&*3oM_^2u+e`TPpb02;|6W$!w0l;YDqY1eaj4D}iRxt`WH7=NpMGHOqgl zwfpj!u#K9@&;azA84zZ=vIYV4@cwiLX*84nEg1vKJ240!0+CS<07K1{8WgGTQu7Yy z<1Hh#RSOL=gWU@N>5_a-l|h6acJ%xa)QTX=Z>IiCV2nXu;KTP19^CS#nb#&2<{U zR8*EdSiZ|r#A| zFMa6x8D z#7O+w;~6(!fcmwJFe4JtGk>Z~73>8jcQqyQfbpZ^t-N_Yo18Y)gN*P}sM_Ptuk&4BNb}cSG8~XQx!8t4kg}YMy5x z%i#}s6Y?kUuwG*s%BG1uumW8b{f&f2a*n&u5f`Ip&O@mt3`cZkH8LlGza*o-wm5bO z=2c&$CpEJ-UpexXynYYmX$CZKYW%u{sSVt;eoDnXVNLdEpD5Xl&bytg7SHU&*gcF2TMwY`gvlK26^ez!e%oawUUC( zXs7!bXuPS8D#T&M?J1dU@!;S@^qy3n7b_82Y`5>$;<#N!Wo2SN_#j8+;CQfT5cKbB zjG*vSBa)Z`cdA+SN5mr)_2;_=QxAwkn;#R*Zw#z^P;w+c13A@Y zgumo;QL)D}k9e?-S$~@-66-=lcTSJX7oMu9rn;Bu?bM4cjrT%tEM+$w(;QQDH)pE3 zl~{4?(g=U>nS%*5>Uc2d=qQs_#6qXgNGsjd+GWyF^e%{E&@14P_6-(JWIbjwhjMYA z3inbU&IqL^R30rUv2woGZ8Y3t1th0fKAZPeRTM zdEn>#JU&&Q_?1~4BMMn@X`RW>Kx^EZNY`W;tBaEJNd9zzBO(F*ibMF6Ib+BAb<-l( zm-o|>ll>_WfGCaBBjHfN<6T`X0KPBZ2ifXe;gJBz-+sL}6WdHdcPps=C&}uB?^n#C zbbd@w@=`JHYguTTds$8`dze2*;P@hLe*CMs=MaR9nn_;mpeFYm+jO>-a?VzYbsb+p z&|e}|5zIIYh8~3GPo2x?8G9q9StM0&27MZHmlcFxrh8tYl58UO>O$qM%Kzv1q(x%bSb)s=UE)U?1m13 zP&YUY;)LZuN@u5ki)Dcm(ZB}W~7rvsj{91$fp;C8vg z$w92RU5b?bxM@S8PlEUHwn#3z2Gpxthg3F=b>XZ`7O`0Em#&n2uv%oj@L63=95Vw( zVN>~rwHNm?C2DInc*f&ZVoImhkYIz6t#YZ>50~Lg1{P6Namspm9%r=Lo}RVe4kQ=i zv1hpcJzYo?IUs6+AlW-b520&stcHl)sy zH%Iz#`Pr#`^f9=}YE;|z=4PiqU?sPUfk?}aPb4r=rHomSg5Wf|k{d4nm?=`m#AU;` zJ5FG-O?*ZMaZHmvC>?AU1*$6vq!JjobJe2PS7KoemuYl(`J)C@PM{DupM~{pxom;VbrOnd$yKQAv8~3$3v|bmX2y=46s$=P2y`fNC>dCU!oJdKAKDnMs6s zNo?u$@jvkaGP^0%T<-e6tAfLbdAkNpykp##Z{x4J21@m(TDgtSHKT_*_Lq4{DUCh` zl7N?)qT$Zwd7UXuY@83z7+VQ zuldFo*vxSGr$+NvFDUV~Zv@lDZ2CjD)f&xYq3gWl_}Not#eJXJe~Ag6_ayiwcYq9J z!wDiFf68a|7x0CFa3CI}mM;K1SAD0DW0*vyRv4ex8PsPoR+`#AG3ViR z=C?Xyu)>4R-~~60tBYW7UZrTY8Y6!50WOk2!{lO)%c`ci#V{soA^x^m#zxY+xz$OK zV<0Gvl9lp}0sDG5R-Cu7k!Sh+sKunp2~Q|HgOc z(850EG9glv@+GWEht~VMGkb{<@X%y-AyGUZGCu9a&;RPAoh4P!<A0N34KIq| zs8y)|5d2-RL&`NzpT{1jE7;Nk@lyL_FzJ@lQ_C_H zn%1^9$v?cus@f%1b1lVw-Is^pte6gaE2Sq-Oja&SHaDU6xJ(suX5B8)4;1y=+B=tJ z3T{uY-zDq&!9Lg{n$I+BofL%@MoWs8(5g8BAxc1(qzp z$}M-uu&_P&g2ebNr?mXUQ9c6KKA5e0%WO~;xS-qNpj@VD{7K_%wMVH262&1@=f;|~ zGs?L3FHx%Zf_$d?p$gw3esu-(kR&M*U|d$2vXeW?x+z7vqDi==2S9Kqkpdrx&Dx*Mg>) zJo$P8K~wYDpj!%M^(U~-5%AyI?-X>H&#`ryKhaF5K{Y;9i}+_FYyV2FMTV93G==pk z<3CUKEr3C?*I7U7q(j>DC#ugK_!I!QD+XHK^{SS)e?}p*ujTCbI@}%z_m-Xp;K`r3|cdgTGmOo{)FIMGS@ zGF{@fQqaK$J?(5CrY!`DgyLznzhyvui636u-ri2y#|ih(i<8-IMmnA?3~dB%D79Ls zZ2)afhL<+N1Z?Ot8Z7+Uqa8AtCWcGS)?FnOujWeSm&S-oKezt=zr>Pn0dk_-t}<^w zX!dwIHp?Skn<+~?XtRNv%f|Tfdi<@?xOO&6!I#`cWp4Rz4od&Du(U!#{c`k0M5`~P zW9KM*?r3slu#KGrN7GT?IN&{X6&=U;*XaH~K8Q0LXfw-c2~cY_^Zcpf70G;x|BLp# zhFKY87l{6<(W0x)dCeIDlQYvymi9lDB3r^wJ4la@_4lTI__OnbBX(a(fS{B82?Xnk6_E;?8OzFtof$- zpG)VKk&|R=TU#Bz*QzqNXOexm|NPbex&@c?pp#xs{-G zpPrs-g#gb3ggV=9d1@q4?6%vx$EZ4>S7;G;Lt&#^=om1Zoxm$%u6iSYs+__%N+Go6_yS zeB+iJY$`xa`xxfiUx-{Y#hb3}>#O9j72^r*G68Q~&P|R~l4YuY%rO_Wk>8@ zZp*B3$Hid$fD`2?j5?j(-W!UnYtuL*i=NtRftjhmquo;DICAnE92@rphj%C8Du$EcHOtp#X;X=ZiZ{Ro2sC4C;)*$jH^+A6xFZ?lijsz9y0R zzE&;pYxMu;DZiu(2!UYz^J|Pj?sM8-TX8XoTx$nzfDbR+y6uQlo&EUngW`(g9shBV z?CmLu2V!j72V=Q~44H#AI3)<1$7sTVGu6^pbK)JX_)J%Yclm)70w?xjmN z{NOgSl12J-HPHLs&25awwB5xqY@pEv5&5SD>W8{HMbBr$FOv)IZm(m67?RmP#wX|b z`O8;0@$srJ#x;{eeFZc@@Q*AobA|S6IL3#mfG!-;OT-Y#(ozp&Oj~-3+0=_Zvxz&h z$f#I#{VAtuA{kX_>F%CH)5Kt5^L1mH%nS*pFaK65EsK$Iuvm-`2qLWeUt(FvIy$4K zXRM~2(vV8*k$XP3f|wbeA;;S?=j5mHkbVvCb3xe0!h40kOBul7XXCFP84paV7}oaw zr4$`3dHH0!fi3fKAOmc=g*J~dHMoEDK%tfYL&cN94Il5j2nP3Z>!V@1U;kF9D)Bm* z2*sYX6RLV=LkZl@lrwyqE#3EdS|>E$cV}=ixY7-94stPV`kRCC@XaKZa@j8J-DD2 zbQnuxVTkBO4BBPTTKB>nGqqU%d5MnC*|mv+_W_+=4xMzFP!|Kj-QHVJi3jOL~P1 zZma(e)&}a;heJ2V_qoG4bhk0_Z8YvUv2|@pTD1fFo(B-nIvKwGZ&QMKw155s9J^l& z^hnf2rRNM5PtGmUPnnA{MFH%l`!g6XgQ?mQA^{xXg`M7ZbSiuK!JkPQnA2`~yH5zl zwo{_P^Uj_mmg|LS>`W+9$G_|jXv`tS3O(i7$4O0%6vy=|$-W~>Z;E7EpX2_gyjWJo zsMh%Yy=qO5ZbDhv?=pM@8C8Gd=vPFP-Ctgi?Q5hq@slFAc+Bb;87nLp)wuYm4!RHO&U*M6 zRbA0D`k`8nGqN-_TUgTm+ol#$_y@VkC};jqjMGvvnX1l=p^X}~rBUd1SE(?vu6m$) z4=3!7=96$vQ4v2o8-yNxM4!9qrvPeW!%9m zrdsw)U0cpBMU@ochbAzHv^S8XM8qpkarc&PYYI363{a$mkGC_lv2Qn z3^&);=?jEUcu^6pIJwd0Pga?j8-dFZ6V9@G(YHb5gs8k$5xC1rXY3x+M=423!kc63 z-9v0}`;uTHe$m6&W08%gVE9yCl|Fi$K&$z3LQBP*o z^Hyd?#2djzso+L5lnNlCGj$#o(*t)#?js_J`QB7g*HsEw{?#XI9#Ly)MiS0N5JztU zOCmxU_w2>aj8hYomxqGfR5Y@w6Z~>oCW?a`9^PNIqE;!e9jY2?{Fm@w+$2z*Q!?&& zA$zF|w%);FTr2f_-}1k|@H_FnPc+Iuk1571-z$qLOd0-2|1a!&m9!VwOMdqq?cK!X zxY|YXS_*H972Xf~*o=?53@R1BwrI8wXlH-TenCGrtDXO~LWGRW2ThR9=Z~8+=3d;-XNRpk(!4>QGeJBbtp%6N()@Q7nn`W_h8vw#WFwQp{ zXR?|dA3do)vk6WmwsFuGY^}|?DCn=fc~!k|F3nNB;A%?^CVnw4@iG{8w`aM2R>~fZ zh~jeX#-RhBQB(!V%E zUy}_>^)qS)j1xEP2$ih-G(lABW~3xbeNrpAeFvDED~* zw~CuWRNF}*4$C-kpl-HZ5LaW}qLOJbxq2zP1@e5@m@tpY11G2q;ljO4qAtnI@h1$X zR3z`Ndcc$Ln2zj$!NB-33en=0XZ{7`FDO%9(Sfr2LLkXqmsPo8=rpNdp|?_R}wPSw86RC;uOzJ(7^}0%~RfM__7YY93(xterrFVo#8!R;@)&4= z%421uhcIDFL3qZFtb<{SNs2(VMN+PM&BPuC;Vz&>?9g=ze9wQBihsbNrLrSuz6Q*k zG631Dw9Vg3%NiKUYgx^)9m={m{K$82hn|F_E+bfAeU3U|u&}Uv4?;@tsqj(EyP{F< zf_e>X=+aB27@6j9;^u3~n3n!XlVyf1CLKsv-5r43$B`Ak5P}Yzzk!WV5tgBN)uq8f zCm&3C{z1m|YK09d91#(|FPHOJv2+**xBQsWR>WGo=G%RG(%Lxs*){9`AQ`8vzqb*A z-WsXEPc}2ye^?0Bh!N;HziXBsHm{4(inxtwZ_vzLGWadN+?o**myiEl>d(eRx5l4B=WxX` z5(*iwuFjOAmvZt*o#M>ZQA)GhOl!l)|Cq5{x`lawWpT9JAF-z&i4Kc!`i=>UAM$={pogYl`1fHF>M&&~KzZjR&5Cfn{iD zNBNRcvm7tZYBHkaJ>T9;;m^3mMehN&7o-@kVUlrE%4B);MIfQ7EeBo}WjM=GHqf$! zBbhA3on|}Lauo7FR>cUyUyj+h7IjOHck$zQE`R1b4D8m4f^7bMXz!)-162oUIefRQ zY_L`4Fi$lTSUj-al`KNdHIwG$vmbtH$F7$W&VE53_;l$X1f7iD;jk~9}Qvv1;u zLj0RSSS$C z67LwN)8MI_OY;rjSl3(JCzp96XTr z^U%7=IrM7H#6%+nhuyJBd?kb#G}hhGlsLhXrPERVe{q*)#KJxUMw*aVQQKc;Bwcrs z0skMVD(6ZvL?)*fj%|z81It#?oWH;TaQ~Bq%C|*fDq}Sm-(<8T7Jtw()Qnp&ZTGNT) zMA@taDdp+-+-VuRy@cQ#hnrEeWB{Bg0EG7*l@&)|}oK;@nn2>S3$WLwn zAj%nnlgml09^XbUxLG+i#K(?Wr^o)m@Ba&=a0XVsW)GgRD-%U$K-&@ra`tRQ1G#Ih z%-Y_05ln~K4&++p+2bTXhA=4gk~`CE_A_GBAq;t=8#SZRSB*_ipZ@Ln(4FdRe%i1i zWY|bHuC~uvxsc4F{s@Cnt&ksxKb!yA?isdrPdh*3k-#`gZ#wd8bX@Db)f=2f+7*^Z zq$eEvTQXs)weQiukOh~=fPh;KBVwETyDs4XhUncvdL#aJGP>lZPk?BBOoYt%EjVyAKfx^0QU+l59v#cOk+6P}2?M znZWoW<|$q)16hSdZyAut&9JBZ)?pZDfvEh!-=x9?OxwDPbh{%_=WZKWo3-$i=JVm?LC6KBHB}|=y0M9?%G!O=j%XUT+X##?m zSubVuXvxdfl#m!Aj}*JF8(n-FuI{tUw}EdTot*-D^V8qfX(=B zgI!&ZFb!k6Jl5{O`X9~=?K^+e2@C9%TyE(f%9Zy}lcW!&B#x5)#Yc}d4HqhkO(RLL z^)DsqkSls{f54-Nd4@aV=OF0?`NOKN*Zt0LHrlTrsX!!*FU((rG#8&3a`KQZV&GL# z3cO~{1pe5kn_2i$|8%bmg2;MXS!*IIpOXN>-LB%1&& z<2jhEQ58YoH08gTH73Lr$2q6xv|mP$HNg`sjFE_rP6ikF5EG7fEPpY|0R%)ot@PKU z&J*acCRO-X7TPJgkdvgO^Fm5CKgg|1GH!=_W4X*vfwfJ*4qX!QSpHL6Prw`hwlUxj z=$zZlTdq-`I&B2LiSB1L*9jMT-=l*Li~oJ`_WCC#igNc*%qs4`2x0**sga0}?fz{wdn-VP87Ejl1F(8lU*~e>P_m#YZi*dzP5nY%{n6 z6oJoxTm%SZb~lb9H{;Qr(g`*MLb?_!9$mAI^>}>BAii&J%_e+0exfk=!Z~E6ktMEP z=3W9?KIm(*&2jBJ0(-o^7ywUzoo9KG7s3j-kxlI1{Op{<6@6;u16I&K?zv ztWkNuMM4d4mpsq~cRhDY;}joie(lpO7#k_dZkW1WO%CP>q}=Xpu+4bJ`$_3g_mS`) z-#IPcqEJGd@WdF6$5Q{2fih3@Ba^@hNp{v88zSrc&%Y?4G2@5BTCIi=UyqMZ4;b{zDTsnq7MkeIx>SoVghn_+mbQvk@NwH|3kT>!e z5oM?SzyOt#eRFUQh9c8s6KNcL)pz>7g9ESq)TeG&d3gcnD3~B%x_2A5Lk}7ukC@yr z^HVB%^H0!N>wi4p{>6-ogac6XaB`S%a!;Fzg&gOKiQ=H7e~aCiS3d9nuW1XQK4cKL(CERkk923_o?#<>JxmbJFW46pRF7%d z1r659RNLW35`x>k316aWMbXWE?qCLGG>Ts_(1!9nQq~@3fW}MwgDb|PdJ`?n^6J>< ziw#DjY+ZXxjrz^YUScndlw#t%v#2!sSEM`!S2{g?{%Ggk(E=>#RVfF8-xv}+5(x(? z7w&KhK0UvWr*-(u_Pxcd9}vHTdA^)e9l4gil{lZp0LsrM20&5LY6PaneDnpfSv^Zh z^KrAI+7$MvHo}~w5V}7x>7|*&>Ieh?dqHaUJ`lUTPzv%S^YV^*t_v6+oA&`x{B5GQ&i>ng2=nVTM3yUJ-$EL+yF>Mmf*<;_k-zT~U`sHIYp4t9r=i%pZ zluj|?PL3&Fro{BgxD#Sa~76K!lD*T<#-+^vx52(rcNz9)xT z_(Ig#ZAJd2A#l~eICh&aNFGy+yrfVxF9mTesH0Q}KruNvPzMVbkq_m@mus}*3v|(z zk*vq|!u-(*m{Ix`JaF9E)HBSSVfAT~TSeJs<0kmLuD5eTbVSphsctNh?{fT`ce9n` zb^oIl}k9=Q5v z_1VtFE_6N@$t@|deTq~bMh-XTe(S~86hmQW<7w>I_{ z8-K=he^TQhmrTsTtE2Djp{8fkD=o>_(R3*12S9gna`*F4ijR8azL$uB-Wuz|g-#ID zJEN%g>9lKaY*deDbA~a7$j+(SfSvKa{YND>CAC4#)-4_Ph9>{`{INl*3SIZeN>n$Z zb}z1#_T-N);5#z8yT_vI!E0aV+h1Vdpy+zf-Nz8)>oP2_@j&y(d2455Yw^W=otX3U z`a4W6+r|3S<6dW**P+>rLOl4C*_mqN>)i{pe)IUL**sETEljp|T|aQU8I!AfJpVc8 zc+O(h7^b($-{FOW+RNv{jK_mm3%p28geIdTZ@7u_#lskcIWchWuPbqLHCI#t;}RoH zDYbYz{2I{LLwRvChRbyJ4XQw#_)xP-b9{OTN>9WD!*7Wg->2+IJ%}s!5zur znmiASha9gN@u1rWzg#0{lNKN8a0@hp>bTwIGL~D%pU%bT`=xSt^PNvXEaNRV+5Pg8 zbNzr0sqQSWd@)ZO9@eOEP_YXzV?(p4dtvO{=45iK0yd95w5puCoLv+N`~Ej*I*PL& zyt1N`ycBRXin0w-*AX$?OM=Pi=RhmB^eEQq6eu^m*DMXO{cnYauK{55v=K7-sk3km z-_jelqc!X#+8n-pv~jW3VdF@xSxxEoK3O=*ce09fKgOAu+_qRvFh|S*IpK`0KAiL1 z+;i!v9*R|x|C;u&c&QPz%W*qs2LsDSc4>@HWZ`T*zje6oMeWxKG6R$iR~xQP3+4G9|~A@{dV zwqW55zC7w)e_xNji8VS78uiD6;M(;Of9H<5YmNNJhZ_Fa*|{xM2Qaq*DuEL}(Q8;= ze?7k^-+JJ=s9ejurn;O5r|C@*z75+~Jn3EoZ5{)yxFvRMvXc7BcJ=rfrRkQDmufwd zlK9zWc%8yXQz=~wH&@TwVvTi|EWX??@BX0iSt=^ zA=tknt3jFFzqTE1DaMPK#IhMwCe`37?#^{75$`cem%x(F#Y@F6 zsV%x4cSKa^2D*z9gD*U(p{**T-f-3FsO-GiO>9TqE4!hg+c;P8k}f>L1_FT`vLda@UJAH0N@ksN->9=Q(axy|0`k< z1y1Zsecj8K1{vUBMPWF0^5+YPmc6~>%hA4SjLB5Qc9FTqd5jLNheG5+J^c}OIK%Aa z$#{#6pTrQpPCC6@4-etn53&|UUPVDPQf-ydS?GgejcP`;w~{{)s20REUPF}|wG zJw1)!=BCb=MI0iH&HqYRq%hteH_$Aq+_z@2&UG7L@3^sMFlFu%8E-b`fZOcN_c*S` zM1nW*`%g`YGkmM@<+7tiCRwxdMQ;{ofED&lcif!2qoo%Ea?O_)da}$@54_2rSw4rB5ys;$!E35bkI>Pw7Oy%t&*oHxa*8CkK%IFTxNAmrL4JMuf+oAkG7ETj7ZtWu&0}dr-m5qJ{qXRp8xJTuUUm8w zPSMF~MshC4Y^K%UIV?{tm?FMiF+IuiwM))X6vq*3wysg})NF3QllgELwi)cV1ZTX|-7lGC&G^dc?cF*~CjChXE@&k1LJK3q70^nI296S*&#exe;{H5_O+9aq1 zu8VEV)m-x&Fp3+AXt~F#8<`vYVq5#w3el^fJH4kQ;oU0HF)(NgQM_Gu*ki$_8Pv}8 zKUGIRh*ql;Fa{<*`5E)?O`IGfgLy9-HM#3~Q(jq*67%sQ}SZ zC{lIVev3_cw%KaS_D?L?{}n^g`c(`6)RlS%Q3n^lc)QE7X0c7miiU1q_#3tF2*LkD z@Uw#g&nhvzhD%;K$OY!{~9_ba5_tMOANC+*#<$#+PaHD z#y>77L!zwzYd{;)fSk839H-8DtL^TLHmimyejcarYzjv|PB9sP_bmTIn)2_#$E`X%9hzSw%}SH9ICChJPHf#UN<9{ z!6$5*H(^*?TU&|4Ql44$4`%=8WKSl5|7drHR;bkE|CpJe(dzPMAm>kImUvKGmB*m2 z8@&qOAwi=vPfT?)LDAU~e$i;Q`j(cKE_H4zKc6qxNC1htcj0`#Jz6MeR+hFvAbR{~ z;pQ?RmR42@ii&~{UKH`?olJ-wHnQREIDdSbTubegSKfW!vh*7bkC$s3A;8PR!y_<( z5G!cX*+~%o)f~Ghp`JIqw<$JDFB>%eep?l0`ty@& zhMhLBwvPUZLnGkf$w7RC70FQPMc4ti1!e`r0*L-4;!F6iOHO8RT6tqLGl)3RpG3!( z@hY4QsQIyA#;et$oCY6S$qlZ@eGPST)r4H)FHitVe~iiz z3oz<^bl#&YI;}l`D>4}RvQ=CIpN)$Po2L6E|7JQG*JuahQ6!AHCgQ(l@gIM;1zrHB zEwSOTQpur=jwF!;j9d??=B^a>`Wud%%HdKylmGqR^F5HxWbv@JDu-}6e@~*`V!g?3 zXk^3`2iYg|IZo3<<;jv3M*6>Q{PXbqo_KTfer0@Jg9lSb21mGgfM4*UE3K+N9?}VR zGNaCb;R=bb+Yp`BW9@_(sg=`_GTA~?`?!u(1yA<_S& zQFe9PvOQsJ3VQP$dQj+{B)IgRE|G6gy6g$tW=0JwPim8)!b&Yci0X&H0>J7 zWjLedHS%J=(3F_0A)wOEmX$3;f z)DOazpTH4If$1wI!`9MP8M);EuAoq>QF(Ik=b~*EnW2FH=DmwwK2z)k0@)h@{JD09 z6{Q6|Lr2HAi5P`Nb4Z`R=c#R}-O8Q5I?cM~h3&t~iXGTI*5QdjyoiLh#etuO=6Kr~ zmUk<^h>?=6C=3F3-+NLEkKaTTkAOrjF)Kh^4%M||UbCzp z)Iungt^uD@s;ca}WtrQ;)6~GtC8Q1O3#FJl(Aah2u5%xD-p3>daV>t#D@yb4mHOfp zz%1%Ai@$9nXKeG<@5-)@M*uvs*6kWS~J>M9_(aW6yHk^ zm@yQh&4%k5!sJX#DF`IX0GPFQcK3jTvCd@z+F&S7nM_Ekw`$3zgPd4kupWrH6rlF|j zgpl-O2r@ihJiu}(TLQ`eX)P<8^CV|TKD!uy*EcL!^0mDvQB!u;$KJ&WGZ?`rQ)~j> z8&&A~1~BG2mSycHfvbG-{DUipk7R>8RP60=T0%=ZOtHRE1hbloz*ilo3j#vl66_{% zGBQF~0{`n1^w9@j$~%{?B${xK=C&=wo%*>(B)TRiw%{&n5!-nORrs74&O*qQ6YC~+ z?yt2IouuNlqZ7*63#)ajbO&lkgA;KmxTEHJ{VMwE zcTPZLlM~T-eMDdkGif6GCx$fno$o_C(t(ao=}9?|r>6N&v)3*qQ5O!uv`U7b%Fv*! z1VQcLpvcXPp3z~?N9bp2Xdu8~dJ`b|i*hw^!eJGaLXsa#zkzKcouv_n`jaYv_FX9UPu{O5{5t8XIuPxrWA=4FQ zt=<)gnw^M)c{F|tB&C!dz5`AMqAc$yU^ReON;+o8BK~p=Frh%d8qkf8~($5|TOGKWk&_sPEhtFbUgx z0FoGdA9#BylZg!(~AQlB}b^VS0 zpYnnvu7$xUR;MNw_wprzW0;!vtxbpP)H!q~b2H{P9S{qMhL(S7a+6dvYdB;6SyTOZ z{s1beL_-p7I*lkw!a4Lk7TB#gf6z}ID)I3{y~J>jh%m&p>F;>T9}&mkh$=;S9esjr zchO^+Bu5QWdQ1--oCgWMX!ov-?yfMMX;}Ic*iiRdV2M|KI z_g)b_Xr^#L?l%bted71q8&{|Ro`P8qd(m6=xFK5$@0<4?Oe!}GoH>|G`byNtBM_G1 z+w|1vtUD7CJm0}fsrX)vMFhKtYT>)qnHOgahaTYhY6Q^p(T+Kse$9JQCm@mZfU8TJ zCYT7`<$~I-wj2C#8^2v<`ktj&Ul7v(XBx*uK`ACZ`)N;bxBGeZDy>1_Ox4teo|*AA zL|J`j;^wnu5w4fnVBD^tFVDdoXlO+J!G*sgb2xx$oZCWbd|D$fU+vjXX4lcbw;gFj z$Ex*i+t*X+Nzn}4M>>2+&wp#LYX|TQvl2LKpdV2~`lgt1NnfzXxWv>U(?i0-s&?nn z09rDQI$}51NDsK7(sc3&=dITK>3biq!P7Mc_YbeXnPt<>HG1$&{HG zdfEdkWNZF=N6ZIa8>iC8(}Yku!WE3$Qk=^l+B}#W#sFVUn?%!|8feuq&s*9*Hw#u! zFx0oMog>W9uH|zN?Q9h)AdIjHML-IjLk|+LnTnzoej&hv|7BR+sb2?1P{IkN^WL#i zN3UGULj7csI-M%xk$MuR=!G1nacB3c4pD*JhgdL5(5tPjeBV$E@8PrJ@8ELqoK1uW zm@o_q0XH7ri5MEe1x?~N`h$rF(S2shy^Jdl>eLA^R%wqB$D6r+JhK}74n!pgux$zZ z5|^05W4@x`{GhVEa|QJr1=LL(puTt|k9!-R0T{drxUn>3C7N8hUcN`EuP_A? zKOk&Jx(z;Ic<)wtLW(M70ZLKXYuzv!($O>5pS3DINSVF66?vh7Di4Nf* zA5@n%Dd8C$In+vP)27dF0FA`vKJ!ru&?4oor%tpEy5h*wXyM8^eTBH{dHr`6ur;wIhF@|5e7}>A6PSHETeQuEH@-tZXoO5zoB{-uFSaOzcCqPodbG$A?Jmo$ zq-8MKGoa1I?x>s$ci7K)Z2B|8VqFo`t0165j_HIDL&oi~(kZ;&hbK>p1?JN9B~f+) z=M~Rerr#ihCO1R$D6q4-Y!L&Bp7l6vsN7w+Np`r0WNgR_%Ffo1Y(f(m0JgoJvu?_p znISwzCekbK@r4>SBh$KB9=GkyKCw369R*mzo9&$Y7x2_a+k9|Ku9Ej92u=e)+w@IQ zb?5IQ1m~!4z9c^DD2hpK%iwJ;DE-`6G*}gt4V1z&Dd@Va=c);iGSmw^oQS27w+FgF zcc#*){0gU|uRV09gDiuGt~M zk6ohfyh2KF&I*B!5F<{&Q`XU&=l4`HzxaVQa@>P`3SVe82POi5GHZ(sqO&GdP*nj; zd4%aKsmyFxc?D~t7GOm6RHSlyQ#3y!eyd zi~_2aGdr{8<#(`^$Rwy2?Se9x02=Myw>)3`3V_6%=7*Rf53YEjY5S51EmHdE)i~f)XS#_u)P#N3Dy`;Sq(^x{3^=j zhN+i8Xodw4b$z?yGYX7=NQfZGNnrJka)6*Wf@tAVyx0A1tEWwG zEy|+FjT1xIuPMj|s;)P9PzHXk9pJF~O4hE8ZwX{sjk|Wj*=;hW;+&y+W*T%Ymmvi+ zDSP0Bk7Gs)?%fw*?OWzYIL(BmstbIMU=G4i)X zXSVyXMc9m*BGvIqoL?q^{8KkFvkMFH`-7T*F_g1H&ifd{w6m%#SXgt5nXPR3ERK`! zwrnuB*uQbt(5o7~QGC^GUsXvPWYWOC(kt=z!sr9 zWp*)+jK?Vbdg-HKLp+LozPyImI+toVnrS))i!EPV;mGWCU3Wh{l+m^+edLugUxVJu zroyxW=eOXRrjWmZO5h{HzIXLUat;>@65ZBCujseWjnUDYW0vIETIfOrYN^)7fnC6Ea0W!99cbnnoEq+;DWQJdM<`p%BCh~3>WfO*x#wLbo4P-1U@Yj`u zB8r=JYVCCAsYX)jQ<%nzN>&~exV?Lj-32&gv!JM+-MWuZLzVTZ2Tlf17@f^5k$o(D zl~cVH;-s&Upd0Oh8+@P2i?Hz#t&EBjQH-ssq#=r8ng8n%4c^-(rKT=rOv>bTI)WE< zJ9B~xe;^qn$O2(__#8T;QgCuXKDHa+HXQ;*pE=y^`_7U=cqq#*OamJXHiggiiP695 zDd)J$$mN_#TbRQ%<+bVP)4?D`AGBj8K^u=XI7Y<{uEUC zhAX9Cm9dD_rIC2)*LFW7JMO1l%mNaridd7A{Oq-RLC62Y$zI5|Spq#QsTl>aW@-b( zxe#fg+T;PumuwC{&6Bj2^g6prGWxgEmHnP5(3vjJDzPQ*5byPR*+7GK&Ts7Asx8;z zQ-+iTmim+4W+G{SV3i@T98@LJ!Nr2DbRL~g^`59%?DtkJ0cK$9OT0IoBOq5uLxijn zCk_SVjToRB#Q6`_(tC{sU;t&YGGD8n(1KcFFiq}GC~N}tx7Q-qhtL!nGLKHw*bcKS zL!Qoah!J?!m#m>Jj4_>IK@7?+f3!^mL=z3MgqG3$5C1AwzKzO;s7??i8w;IrBJKzE z^S-|p?u&<5tcXKW@e%Q&QKZ?NXKM3@n&a)?gOp6$tfO}O{2_B$U;|P?PA*vMzAtzQ z3*A%kr+{IHS>D6Mdvv3mokOwxGoLtFQ3W$*WtMq3oAiut?*JywfsxqH12rVBW6*?h zjHZ3Y{)KSKjh2g1-kLft-Zy4ZQ2??Q#GZh4B^cAzv`Dya8j(SIH~{}Ue@jJm$Kl@6 zHrrFp(9$AQS@CiYhptM+Yovs0wYbbBFGg0gjHB3xVIBo@?&Iv*z_|p=QrlcfZ?lE?i`|_ik{PhfO zZ6H`jj_s)gX5(bwUrEyLdz!O3&)xw*UTbAlMIix^a6$Cq4zjjD^%#deu6e><>`uWG ziM<4-?tS4vXUbLljIW|OjEOWEXr#V)Ipy3d1MMK-G8Q3PBxv|1* zkd&3s@KwMN5C|X3r6#+?KV0tVkSZ8@1>&$+3&CRDu|@7M@!ExDuCQEA7^iB9Se{{bo@_v1ju80_HCl(`f;CM~ zC=Ljaaim;(8S@8nwKt;WS~n%1kbViaVU(=P0l-CMqlv7Y2XLX;zA}dxG6oEzYW0ptZLRb4 zk{-%tw=^vvO&d`s77>R6mI9;GY$pp5FnAG}3g(IXd!V#nE5;J_-iO4+H7Lq9&-<_j z0R$Ev=W&N+mcAKx3q{S1pyo6n^|7JvL%mzAx2&z=2KDZYOLQD~hQ|yXP2WadnYEe7 zrno&hZj82C_M}Uf^6O4E$U>zIQC|buyAclfcY5qe6@|n(a8!^@Zbdz9C09RPhPMlo zn-~&lFd{WCSwK*cC*vuRplo`unhp?kG&ri7dqbK>G0L(%8SbdwI2J#x^H880L(p4% zMrlk_?y)cY&WD~MlDM9H??^YLf0xg60;1dVE9pPTS1CfREoMMbVOJ&jWM6dCt>}su z4)=6IK5v$g9Z_(XK6LyXU@NUQc`)!{W?!o|_Yf1?^NmsdU~K6Td~t1YoqY9c5; zII_X~{qND(I`BWC0&7>QZ=`VqbbtcG`6XYq(eKMLdXIU6%5{FZSBMggzcB>B!t2^c zy+3fm*v*oX@NL(0W=)vc5}#S~EnM0Z?LYt@wW z8dG0oC;7{`Sp`FNeX~0dbnye26C6#X&FjxLkJ!ki5(qfVKQE1$(rpjK-J<-RbBdFh zc5-0e7#qO!5Qk@;L)C$G@UJ=r8uWHWf_RWL@QXWNWnM<;p}}OaQ7Kr@?Y1o;z4CIa zzfses5(4iEk7%wcpzXmTjnV2$flxcaMGDt-H!Tl9ABwIOzR2eHYzg`6Jfv!))z!hy z!b1QYO7%%#^EAtE1pzzy<1#t#v< z(vt7l>)KdX37BT$Fr!8*w~R#QVlAhmEFKp=E9Q*4e9CQWSJ$^`x${I#-)5&E-w5hQ z)c$-X{Tf!;pj*j(}5f&_YOzF{z}xrs_FlF-~#=ezoT z2<>#3U2YNyxLj6&dbokl&m#-c1%vtWgoLuNven7@Ue&e(DGiMLN45 z(BW&d!#^s^{wTLP64W~CR!ntgnY|=4oUZz`4a~r5&3o;a4g=|@DUHaJgMYB9B&>aAL3XI_7+dJWUj(jvu? z74=hqAm@}HR+$w~m)0V`g^oQzN+Ekt)isfQBQrqLMEU%NW>K1P!&s~v?ylp6N2yh= z$`d*E`z~|bliEtc14dWA6!){DxIy%WwBRyi1l3x-sxVxq2<+woqoP{=FG_CCsL<~( zg`yYP;sxz@2+DD*+e=qCqr|-qERp5;=qr^agLlq3MFrMw%U{W!J}62x^Ua_~;4*Ov z*W(*NHF9qiO$);9EfdJk%NvFBXO-%%YV+N1muR=@Rgf7i$ZS|w_y45wB5C)j6QPm1aT}(060Zni0FJ1N6cNND~PMZ&b zr-F?^q79utKJXL}7n~#{!n6)LE!J7e>GTR32bAND4_2wC&5Gqwr&5L~~(29Ih<)=wr9CEM=X($)LqfEjdgvGpRxGBrfY zF9O~4B85ytJ`x_*{HN#a_M#CowXk<;@Ek7m)I2JFUHfDQcd?x4iTAM$CQT$)AY^F6 z#K@|!Le-7MfL+9`OPZ2*rRDdm6G1r|Ex|31WFE?rQ2d1C$aw2QOxRp`3cer|C7rXdl!R4?Z^4TjnX@Vbke{4DfqXI; zUL_DMLS{{94H;<#_wIVn$EEH^!d?rQ*rOo$KxS&}2fIj|Lw>=NB@gDzr{Pc+2N_tH-}#ZEImITC_fGPkF4h=)E6vqI703{B)16afPp zX=*#TFe0Po)Rra{VNC8jA!Q}EFz`X1WT>n23#vnM6Z`-*J z`O9EAN>#&%$#Y3W9?f@ScbiM85)*hi`p~U`4qW2(;E|{@!x>!Nb=tmAqK9jdVH;y9 zu+{{q+CE-Wl=tQi$-rpw0C&&p)yHTB5A-0`X71et09CoE{TR;KtXleB^-! zp~CsWQ0{eiEuyGeU1pCIy|#%U-W}YF8l=v@IXHbGC(fXe!37U#$}?q#30$1v#;KW0 z{!wzzH-UTQRB=&6ZDpNxplrVGE(RWE9-ie4rK+#67%|*R8d@~3rK>G0hYT`t!Q)O) z=ePP5wKzGIhg9|M1JA-DsaZX8GVoRfL;y3m|uKDFm8 zErw=)PK-f#)_5s(V;y>ZTIa6{pVo~qE`gMxI_7VcXoc!2w7pWQaU8w7{a7V+NkMpngq!Y7(D^%O#9 z#gzLw4>t5*G3g=UxXgHmhJeahiccz$2(xtH`o)t^0kr*}fUs9vzLA^Zj>Ecv@9P7j zJ}A~!YoP%d%DcG)PA?JQ1=fwV5jBNIaB+22I0s#7$!6-*WL;LPSv4 zHLvK?VZJCmy!S=-;eW$E+2FvL10?vY9@uO`o4$-fF;t_cCl7jSXJ~HmPpVWg3Ne#s z4hqoL##eF<%duGL-r&GvNZeo5h3GN^Yc&|~hcb5=sVT0(Tu{rER-&q1nshz*45sdr znI+NazW2R)w&F5)A)PwlQjLzc0TrwPM_T7QT?bMVq`161)@w0MI>oZ>MZL2XVHM-1 z^y`{D2cMt&o==`n44zEYA$@Gh>vFZh5gqoRr3z~sVO0E1dw~jwkst5cL=&B%7ycZj zs8R##TL3pFOMzGd1UPn@`!bQaW?%)g`=&UP%Kq#mjY9jAcR1{Ysg;!J1ynT)m6RG~ zkt*3O$1MmDHkJ{+8ylLguC9&c;Pa_1$%QS%HT8F(W?UE}Sfd-M;5B}-+TJ;gCnUCw zOo$W8Kda%ugfI~n=7=?3Ie^R6!sw(D74^=_gvUBuHFqG~cvju}w6?l78VvZM90vG^ zIfX1A?DUzb-OAEvSYt0nn4_wKk{`vK-^v&#!SP1p^9m)M$(o0~I=H&i7jS#+^W71qI4}zW0&?^C$dp-% zIG%jPPW5m)FXBqAVL_qmwvHh=g3jlFUHg;J;2NbXMAT*FC)#b`z(mXNg85=@g5!J` zi`dpyomtodqx;%h($HT)-tQkrV&z>e-i$)YG+SO;3>Qkf&hT92-iM~|;dM{o#%#bB zQK3@EgwR-vN8)crR{PiAn9Cf4LeTE#by;geSqxasR+h6>GTn1US{k|O$qBj5^|vrl z_o6{Frq$X&{@}v8 z1Jt@a{3={6Jl^*wo{@uKAw!fz*O@IKR9MFp)8D~D#C2R*S!o2hi7vZdmi{C1zHB%` z`VYKO4ppQjzB8d#E#6#V5ZYb9#OBm& z5FA|EdKF&zIGhJPaGs95?^#>x^U@M*R8$6KWocJLI^=I!l)8!ig^>L<=WTn@T+hdg z{h@9YcH7Ot_t!`KWs?uWwLc&4t{#`pHFw8=3ie2#hb{lU{(fLlC;7Kz|E9j#KL1Qv z_8pp4fjtgI_HR%z|1@1)h+4IJP6SMYPaYmIh{TPdz$j=B*b|;pQBZL3)1g}kPT&w- zfvMS@znl6$xLa?HNUr^~O|D=uZBZn06c}$2?yu=agl!RRXgHt#ze8;QvgtgaHxS%x z9kYgf%*+5~CR|yOSC55=g9}UVO8D=_{|l!x!w1Du_64#@F@t7i44GZI{%!vz0}mv( za8Iy<_+QZ7Un}NEd{u!c!H_G9&xTXG=L4$I|B#nCnv|5(M3PeC_`e-)PYZ+VE@5k2IeH|!UikRFolF5(+n`Y0>9 z+|fChB7Pa&*g?VK|Bjgdfdc+^J`CQt=&1xc4M|1bK`4)k|~z~0okhiH@-qGU_+Y~&$g z2%=jl?@5U0wfa9V@{=&J9W6SCuONQF)_S-W$k_Plte;$M6YId9ToC@_!?CU&-oW3N z!4A|3LE_nj(&gZ;Ki`+mFQbg94(XNe6CF+!c9`225Rk?6;(Dc>)dBta^g^Zca(H^B za(~!j?)H%USX=A^mMr?3%kj!|(ta0^QAO#n`x$(HKY!ilWcy>_U-=naYWS1(``#d0 zz{)e7UQv_?uK_=ANRW>AHC?ryy+sz4=xuJKxas=TB4dG?3Bzebt83QP<0IW}K9k%v zF4{$8PxLVr!p$zU+Es~cFoo(LMEwUx|1d}oFV?rr(h52>{=cD{Ute(z1WXntK=|`_ z5P+NMdil6pi2WinVxW&mZ*aW8SB*s58@60wS-`Z1QPCBP1$CAQl2s&R-g0U0Xgj5r zW-MWfA}ngPgl9pez+N~1M&@1{?FmJpit7jNg5;l28+{*j#FcMxU*dCIvHsKaX*=(t zT{BfXK#ZQu+djA_vN8(7zh7D&*9R&Xy?5ki@5#O{u6;62D-ybccZ{MStmPaX-!93G zca^~{-$-lGe2L>PkWK)ffFoe&pS00rTD>J1@&g0j9Q{`K(;M4gR@xx@`~#x;W`kG@ z+50x4LL;vpGcb^%-)acAWHTP{v)2*hoN!?DDJhIQj@+qcdHWCncM(5%j;HdK1WyMV zP2Wt-V4(lmq;=xO*KK%G2^#9BI~kh~a%5#k;WKN3-a0hBUTX_+xox50crk8-8#qjK zl$eSHyo4>z@EC5(&ZP(bYm9Lm4S1C19aKoiv88?F^jUvPow%Z8o0S&0;nEoe2c<;{ zaS?utkF>V18&{F*w5lhUNAC#_Pq?3?5^*<^hZJ|&(U2XgxvifvVUCV=iA|@2 z>`#5qurT?kLG7I?Z&!ajGRJEMuDBed%Bp`fYF!%}0zCQrdodxbmB_IITiGt=dy)z; zx}$FrJszwL0}<4?Q^yOA<~2CVgTH%kiPOu2yHTRk7k&lvfdQZk-hDIowum}{dj^A= zA9+i8Fh)@^X?eWc6k1A%!#tOvmDsDTzBy>XA7LWi8|}^`V+QO+JH4B~K5oY81A9_7 z82EUS|6QW}uMgae7kER+lz`@0S3;`?HA$Opk8ZuzOw89PKHOy;l9I?EIXC5uNY$qY z^ON-Ears(6-x#ryDr|=-KbniH2iiU>mwKtR6$AUT3-2c!2!pMpuh!Z%EYk8|!Ls-) z$McYhk!1hXTs(n_mc-zJ^;X}n%bKH~YT@~B^AuFjgN}@|Bdbl}Vr+@vH=r=S++ ze4p=m2IJ2Jb(R=Pyb-(=gW&o3q82_j5KnC3=}oyiuMZIf7xrFe^RS%7=2B=imyEXH zaX9>HdOp$w^%yAOo{r4?IZe#bsGsn9#8PurUnr2`bdbS)P>pafqt(${O;Bb@0X<8c1!NW3^QlIQigFut$0L`=4_WT!wy zsv9Ui!k&consDZ~+HonwHMbTvkVdL0Vg1tE^2y)fCqx;l%L8YdurVZmhM;8g59Y-{@etbU6+CY&=@1Bo8a8E|*7xH?g&BdP*AgxBql2qYaT8bZ}*5L_WZf9nai zu`_xsszj>GsM$?7&<)Cuz4{?ehRQho7&7#STHW~$4>xDw3MRi}S=!J$vkAND*rm9ZYZ7;F`C3fjUJRquIa)+`i;TrjQPr0$#6qQVx-V1Pgd4>!dfGqZYY@7h-x1p z8WM!`C9Ozw1v>*KG)xlWxY&$&2zSl<8+k)yP-w-7Qox6NjDWhXX`YSwDCV2fHkHWT zxH7NT@g}H+-X3l=<2#PsjsVeAVydCr0!FL3fTEKNeLQr#fs|2ft*oR*JmB3Ej;NqC zU@UTbe;3eKu<(SMB`f6MlBP#c_(M&Y*8}jSE^VCQ?2+7MN*kTVAJ`_}0ZBQhRBlSY zs7z2JPGc|FQ_|14BCQ|$1%W$gF-eIm#CSN%vc+#g;O@d(wl7N8kQgqPX+))Sfgu&8 z#mjZcW{s6YjoO(Gvp>(KP2`*zoBkUI9n5D<}?)`Ozn3;tbQAkXR z?sUM6qU9q%ax>V+=7t-L+SXS0WrQ$%3r|%`p?E1S=9AOu@&kFMNEi)o zH#vlr|FMEo0sgtUZRqyfy#VcLd-I~j= z55jYOvfKZ>tc}B?87bpq7JcKy;`;X4LBA&;o1?xcRW2?`P1-K;K?6tI7x4o>q*uBR z{KRHURLO^v2s9zmgT%`lIA^|Vxupe^In%$eKvcc!nPzJ9JTyl9x1g$Gcwwf)y9LGY zfT9%p1U`MD&U)}-2XpCO@)b4*N;9mHMnblKP!nb=`YjlkEAv~J7e!$qr+S+g_IgQI z1SH2bJFy_(w2@@#_X4LLZ40D=53c z=vql3Mr(Tq5;9T>zdUQS_Z#BDhnu{Yh_y z6kYCtBcP7hNs066BrG>VEAL=bt2b-@c#7a41P2>-?QCW61P|j0Z4D6z4}~pB?zjE5 z`Oj=ZjM(`<@R6HXPM|-$MccpW)JUg<+@=S$_=oJ46Y(19^z6r%F!T_AY*bz*y2?7>eK7cG!c$ z`n<-|Gb&8!Gut();wWxZx#YH8P+y-JTRK2~ICV^P3MnY?;cj@$B8j$ZtSPf{yfs#YoL>VZ3?m?I^?sc`iBk$u#*pZKra99&`O9`(D;j> z(qPA(swZon#Y>crmIs39PY2Y%0`{f&7iZKt@jhc!I~9*m^XG*9Gz z;fo%0WcLY{8Q}b=0bLcUJ6bQ2D1fUV+NNMyIT`JGjBKpm4oz=ZsT4N9UM#~UrcQ(H ziZrrNi-v10sH;t(NO%n{EFqN45(B#uu0^e=l;jTjd=s%{WXw?2P@+g}o3lqu@Hs`M z%LO4CO`BA9?7W~VPzDNg`}9oR0|#kRqnFB)d7Q#e=ygko+N=&P7V43 z-d9Z(6p*Eg6>sDy>#1%U??{Krw4(|m8HrxL-?^3!=6z-D&))?1gFFXr%j^hv5zB%H z5H8*jmYa)C+`0app|S(j@b_!H`fB5#-4NINxI<7eCe`1YV#(xC_KU5{u8Qq#aN+EakkH(2MRGw&MD9qeXKwOciJRbd{fCHK>t2fU7WBbNyLEk{Tl`)F zGKU)lHXU)6z4@anhsP$Kcj!oseF~jiEeoCSn3!sIWBVf5aW{eL_FFlWjO6hg^hz@b zrMnKsnMy<}YvINPGT=Ib2NrFzQI}Nwv$re-oYR{-@UGL2XHP%)_Ik_U7E+n!1V6V< zJS(X|ST7btE+-fFeY2XOi4}2Tw!!St!w;P~oxB6+R&}BY3$+4I2=e8~3Z$S-l9-25Oy>})gTau8g&Rz#iU0_ z5zWOGHXI3PW&um=D@=Y-(Yc@Yh9wA5kga}Qq(w&6%7KoW&H3e~_=&jOVFop2>Nv;Y z`H_+<&D^r;Ms-eieMhDCSIwsUrBs=#34ZT~X+}`V)fkM7NQ6^K|KjIo9*T#2U~e&R z5v2xO%sFp%tv^WM^T=1E+KoVoP)W4ugrjy0!3h)4JW}tws8|NnN11Sm(D7H$bj2*z zry<-N0~q{D$L9L7P8;#VF6gLD)T$xSYyuh9gIP8V0N^mZu#23DoEcAKk$!<`_g879 z3{~_zk&czp119AX?Fw@Xum$3;`Wt;xi3!?C@uiViETOo{ph0(p`Eq2+li!&#wmRtG zk~R$)X=Ma&EN^P>*LdyHF@iOkvqoJ}w8c#z^#LW~;KbI-$?I)lP4MoHvV%LyYT>0V zd;M~b=YPHs*nj6xW(0GKB8v0_I-;u&`*x5v8?nkK{Y7a|9eqRhP$gn)L z!}mAD?ZnPtdCZRDJ{=>?%oiuptQLl8AO(gPa>vG2ry_@YGdP=&@FamW69|4N#wSGu z@s?5KwSi}FzrtVw?DaQq*!>q#3@(@4erssK#ub2jonzar6`~hIz9$mB&d7)Hm(?Pn zcoH~_H8grF8p7o(PTM+4SSzxIo@>SoFUqs)KX1v6WC+XcB+Eb}kV)cTs8tSmH}e)Ym@G z=Ug3(vpg>&4q%DeV$MTF6EZW-RK6uq~7;;QWnb5>o3nFqTo$7;&YaJ%22A5 z;nm&dL{RqS5MP|e)agpF41~Einr`*(&v3>bD3M3c>3B9<3EsBynT$}~1*Y^b^u(R- zSX;KLg@Zeq^oJcd9S{vAOM)QYw$+>Zl_biHf{~$(dvYe#T0`sBE#c8{j>+O{C5_*K z;Z!Uo*M#5sIf7Iw7pkMZBMJ@VTd0tjA-{n-u%)~;G3a`xHA0DgPTD5Ae4v3yqy2_} zwH+4UpjoG{OQ-cJPB5_sQ{qZS;NwhbUUJxfbB9KBObUU+i|W7O7xlho$KV3blQO4s zRx6;j=?WMB&EaN8?{_86fX0QY7OsQfXmx|G89uLp)ec%T`&QyOfsS+@-ZB$2VS%QM z^V)3HQdbTZU zr+rWjKI_~7l{bLZK%Kg8irSj8p@~#Uf?|B6bJ3aTV;PtjFcgA#QRlOZ#lVNr_~MX= z&JPguZFV?qi}zQKM^KN!&EAG{+=u3xclA(d(9$XbekiYD=qoclL}pDXgq32z{jry%1o9 z&^=(6!eJ}yS|y_LkV}M!Izn<>@CVD8wyO?bcW2VAM@n6XS}}KOiN6F}&qJ>b>!CME z09}pw7^wR-2kW?y0pKqK`!{@p$dd5c7yy9`Pl?TVKkJH#I-_HZs)yYFq2v4KJUQ}( zHxyisF_2<@4g7Y76l-79TUN^`l_QTz<$-HW4+uPrG}G87nE<(g^Oh&+0_7XXXIQ|M zAQZ}}b)l6>rU`0U|8|L}12pi%U91~m9CyNE`0HC|cP0DS#d-l>YTwkX7%RF1bWWfz znA)7y6ow016d?xOhETEo&uzEF*=BKSqPyYV48Fq}h%%Z2QecaWdRR8B=M1YJ@_WlPDWr@J*(U*SKD(E- zBlc#P#}%#lVYx*U0C0bv&DzWK^S5_aCg%%&C;)o*e3$PWw&fr?TcajhRhW%o?lK*xv+g& zVzn~)igR;7Qap9~!yq%9m7%a>!jegltHK;H;mNuDu%=jnCcUP$kaaG^D`vJ-cZ4#R zIbNVl9hVg6Il0F9QBX^^W3OX|?ar;T&6A}oAX4J@?c>&Y=(%ULp}ZI*-!!G7#A(o| z^2^STq=HuP6$J6|EH3>%>1bb${7r?5GL0o5kwcYzUbx7DFvR$;V>)@2pJa&PSSbO< z`~VqKJ6wwS=S|YrV-@Z2!w}fipbw5AmBnDybV!A>fje@5@15_j0x}|9|AW65HIn9; zb7our9;mjdtUSoh{gZ-ST(Jj>zesGY3moQP5iH33bzZ`4az^k34B1J7!R17WA8ZfR zD*ql-rc^$(qsb&3o=s#PA?weU{uCmR4k%rnA64?-C^$P-4hUS^`(r*PKd#q`q^MSX zMO|PyHu4e57D0gz)#6w^-{xV9Zl?S8*&U`v&!T9t-AIZdYza|W9C0Q>qnj)tezMJM z1#AxC$K#wh7037%0@MFtS;mo~CX5Vn!x}FI%}GbREey+|x`MQiyBV4 z7fh6~w;e5KR4X%Nn$?K;@WO;kqIx!%^MN3D1CKwlR$TERr>yU@+yBKYU{6>%vNY_0g{2 z8<@jl61NLD@u0)1RFlzXNpLY3*hH3?&iBc<@D5%>}B;1q4mF9&n|E-(tk;jPyB%5~6!xJr~B!^g)t8sA|r%c|7Ov zu4GDeh%IK3Z_y@5t2hC2f6!}PEF%=yy&D!c*9^jl&>6Z`1=?MilFlTXrN#| zqyKdi;`#=J*+pplTI^O2k&sa|9i5m_bgKFXjVEk)>Ah85V(@7RGd)Lw!7uY(;x-i( zJGR4tjIJy4M}u4XpV;CxRYnY{kSI|*L7X|4UvvDUNa2VW zTxh)Jj9TpLJw8ws@aFXO6}MsfHTrb6#tc zW0)1y*iwC4F#V^_-Lz}8h4&6W31weX7}9xQ#cp+M936i*eRIFcVaqzGjrpnYKFD3K zeO|7(d^KX$I!OfjJzamGE<>XGPdKACcUe8_I>q4YuP^LbbWd_Ig7>76OtKF&uEDGB zc0k6fHH}y1PX*)9AsrD{bmn9iJ5Jx-8&h5qmg^;++g_X0nTET#^lPco52%}uR{W)n zR7z*M=&X^zmR(dm2No&&Aemaa$WSE3<-T7FaM~2*gWO2AqR$MGL>jYI0tc%&PA+bK ziLkG6^69&)^l+qAZQskQ&-zo=pqqjjxX(@g9MQ&nl{Rfi=8~!SnVV6-O2;L8a`UG# zcGS~o4^u!IO)Igg3x+8QO0Q1_Okyg#7`+?8RWG@tf-Do2&!q78_pKK#GKn)cH87;| zqx1y}zx+~yWt~I**p(hL(+fq!)z}iGHTXS=`db6`j4QHqdvy7Dg!LajrFN>K- zYSg2l%ikSUB6H(nmsLew9(4>27~(_rS|Y}^r+-7i1mx>*TM8b2F@3(oa;SallODp?ni!EwYQ zg5Oxj^zIC8>FEsn)6lgo`#L#(x!xC(G3pb3a#C4e9eb%*!={FU(mj%q7fzaeLhQTM zZZekOW%b*dK&*8}rzD~7sg4ks7~G>Tk!7RjY+dZqlEm@E^o232O0JfiK9R`C2w%`c zAO4Pft$HG-h2YxjyV%_cF@7#hrM_^@ZYf2#fQc!liVlomUloF?`z>3cjm_l9F+6}2 z=g0fvokrsX_2Uohv9#uu>Js`!900a7gH0#ADq^@+Q!$X@UT7}&^}1!xnK02;;cfjF zWbwKZ6R#n_*mL1j)|Z(1UY{-aH<) z48$cYv_{+4g=N>X;n>FcxP0b#o?+~v)N~fl`QFA&aE-Q6cK{I=d2J{V4M@(U%pu*y zQ_3f6u0|AL+lfL$dd%m z9Fw{007CFB4>WhH0{YbX%J&*h7&G&10KtFTt(Sk(qm=4;`!6iDDF@V`Q% z4=HdkIUKa1GQo3M-v*A+)>q5V(OmaWd3N%w?~c%*Fb{$!-7xx7%wO+BOa=ru;2$rI z0&UbGi=^j-1SU4C*pR?_cj0$#;0E)M8Kqn6(}-@4dP|T_S^e~suQfwP`cc4ccPfL^ zoYf+_AAr7nx{mD3jvE`VT{#c;9lZoIC5cov(L&13$~3bU5Yy%OJHLcFO)qDl`pGbr zwGRKJnv5_TX9_AELK*$8fDD(f5j?FrVaJeO_$69|$`TSDQgi=sCtPHEIlcQdV6Ft7 z%liqkD{V!NJvfIN!Hqk};p;8g7-JKrj{F8r&CRo*DJ%-k(7U0ElIT5YQh9r)zT#Ak zH*;^oP4(*a9J!&1%Ik}KpZ<>J@LffQPH|i|q%*I_7}13^6Sn>5U;!ZFWE}>xW-Ns{e@+bMsV9gA+-RX=KcWEUe!%k7cP`#2cfTZyiU zT$PF$s%=T8!nUcsJl$L63E*kH#talHeqezV?(m)vMEdFI2>+-tRZcc7zRQ~y-Q7)r z>=*GH;trJ^Xf3a5RH(zRIM&4+qzh#D!})uFUZfT~>!I{=fh95F5asu@j(8p-4ao(| zNAV6++Lk+%`LI)#PSI(j=pk1)gV`HL;-!3{sH+BVw1sfiq{Ez+!pi?aqgU-nX{_E+m6u|lU0e{mM_F;#U;f z^O@8Ab_z5@m9!_IzuXoN5jfx`?S!kv6I)ReAh7omKlD-~(ewx#V6kZHAF0NTFl6{|dYZT_I+W(WuPWUX zniG=QmSe4Js4DwI?LLmV9jM4j9n7HxNXuasvNB;L3~T=^q~xS+$t}WBQmGAz9bQ?{ zkRh`e!_uT$esEekoP*L(E$PxntE7_^_)Q0wc0C?zXNj<>j#2GQ8+587>P^I>>6wL> z|3VhAklR=oVT0&0c@8Nr+FUO4mV!qAB2J&T+%U>|CJV7W`&Sar%?ly+k3MZ$swNLF zIx{%eaies^oKihn!L=$)v+Cqebu#@;p@Igc?vP<)<=+>kZpng1d#4ex%U6H$TJ;X}caC+}O^J0i06GA7??IMBO*$H$pWk5F@2G88pUjJgPMyGO-t*j?u&iJe;yUa&%(;Rx@TR{ir=Y-DVI*F;RBF{V@ zuk_|xn-dvQm(6ZaFlaphPI*}{#ni;uBTCHF)X*+2E_N=eRQ8EwzEPLOKlILLKKYF1 zW-?bhOi*cT#X+ex9lEv<1MZE|W6=dol%|C>5g5oEonP4;Ximu<1RMM%l#}a%gF`gg z4O35ISBm!=i{3+S>jhOt$zTu7YSfoZ$zN=1wz*BHe2TqyenEqq$LT&hzf>iU((2jv z7I_}{gD!BxiDQr-pF2Od;ru&8dZY)s;yM0EGV3`$I^*q9ODAcXl+nMb<0)NIFWG*J z22FG<3x1$BT#Iwg#C2cy-JMKTRaWGkp=+-B8=@hwqIiuBw@mRR-`)lb8d%hiZp%jF zk7m;$^y+Q-3@F7)ix7y09B2`lSg-6&tM*1v=*^C>nG_+!y*$+`?bVEkU~_}|fb$K) z&iuT3P-<1}!Rn53u>#vqohP$)>4y7_>B+&t``#(vC$VU(FSG@pu~AWta|aW!7xP5Cr!qO^ z=^Q#uas0^FHie}i=LNWjj2{*)5T z-y<@ULDwjGTD_W_MIF!X#X2#34?SY7xo_m8bKBL5Lear}Txm{kZr&W)3M=dg^4Rkw zZjZIi(!h~z^^<4M2?^z5}AyEoE-d7BGOj0#+I6nPE1Ay1_}zQ)@U@|#F$4i99L=~ zha}fcmjl=r1@!DS$Z*1N>!&45bmrAcOFVn*Ur5_V%d~tu?X2@hIvD} zdTf%Z;Vt{t-uea?mt${OY8%G+Da0{gK)tO4Nw8W}f=4C9-PafUM9pQnU>j|QRs>jA z{5jjY20_=$?VJye@f6G)^W)u|E#LrreyuXB9rEz!RT^r*Y^AodYps_vRlI{)xIa%r z4?q7mLg!%h&SDhkEhw>CJqZPQK4>|@^Dk{msqK7@`bTz{!*6h7v?aN@5EMu}io}dM zht+T4;g8+~A#VO)2=FMeugSu(hI)Fb zpA{FFsX$;?QL`Rz=@-@I)qAJe7cVDW9*Y(Do4C}!o=YR$$jf1Vh}?*WJPe;EXzNK< zP_NGPt$h`S5{tTb7ogTdoPU0vDT7J|lKu6rlfKy2yuv&0-=k;{d(gBh2(G7-fEU4bOfzXdT_$=zV=pR@80r&WHxlNO%hMC3ntI8>Ue7ElM8f8h9Pt!I9sESq5G<({4&{)X zBv>~2^gYEKxBS^RmDFOqgjU37mmd*1B~%}{hGjt6*Bc~ou?Sg7Nf_9gj2`VgHw}9D>lS2YuZ0@C4O}QQEo(A_AGf~hUJ&k z#jN8#j&pyhn0|UJ5TSJ3qgMJ)s1s-zW@J2>pZ;>wXE9}lU8+4KgDT^i{e&K1-eIgkK`h;OTXZRpaPgan65{YGQ8{(SUkAKYWt#8Nz`lW96Z5=ehGkGZr2V|~# zl^mDz#L|_?omi?O3W1F3&3ZdO%In@#^EH0^^2DQ$a&FJyNgF1kJ43nM~O& z&W4@PD3STfm{BPyyVWCN#NCV_(}LPA1PnJ~mu|O?Ba5eMNDz{Ze`_d>IIt9Hady`tYY!YFGGWL zH7Lt@4NoQt8k`B1aF<5{c4x^k4$WlQV&!HT8o-S`5jl*AL$2D`HYFrXfgKC4b5>&*9TJ z5JETc!#6GggURUcR}U!Su^AkSEY`M_Re|$*zBun@B<5%DwJSwHl0UN;tjE6UC!C}{ z&%7*{^AN#u4zkRRMU5Rf4Eh0j7u5i*T0I~*TrQGKsw63|*Yg$(ZkI~77yqr6^=t6% zvQGcM&U=3m-@Snme$#rc78;lzZ^CR+;rmOJr*U3vn5QF(&#`=}M>O5ktrU^SR~yTo zaa&{1ofCb5PDjBUUNk?{d%ExX`EW`cz~S}8j`JI(RgIa57J3hL$qBm?mweRXLU?-+ zuziUZU0tD5=e?ZSBlzP~BDfY3jy>w9<{YEOlJrDnFsm@P{Pwu%l`~O?J(yX$S+gNn z2d-NUP*%AN3vr8*H1-q&j;x&c98LlHtLnkdmhsmg*C!^E?AjC(hKh7L>bQ}C&laui z+(eB%q&BH6^X}I5$-GtT$yiK~)I0}zLE^6=F9rsv@$f#OxTd$7)r&aq=eE8Bu3O%r zlNs#LgjUfWA|gTC?^*8NIV|Q#FOQd72kqdjU(E~rrLM^>f71ZILLk&Tn}e<(SJhwj zhv7+zon60)CG5IZiY1Mkjo!R(l#ptTT(5c}_hd74A|%RZeXh@2tEYqvk8sN{C?R<_!9(f&% zY<<=5Pwf_vR-ws^vzp<r>w+ z1!YSqssx)NCYDCuHm2Hxf7g>Z@6T4JhqY!2EM(9l!K=WsOm`uoF-108TPLaT6xCCq z1jU%YJ|Alh96U3ddK@gF#gb?Gy=3(q4bJ5OaPED5;EgZ5XE&m2mtc^N$lISA-rl@O zNJt+C$TtqGIGX7e{$YosxZ3J~Zp$qN9}fM!tAz&? z!ft5G_KM7sz+Zsgzy9cTY0$7z z>Fjja(OY_8B!}CnKh;FN;V;_3DW+3@AIlCD?;EH@;MeiqG^S%=Vp{inm%zs6?(-qx5Q|K*ir89Un zW4uS>Nw-hyTl_=7|G{>6EMSrLMbaUGpOn_dyWNeTxw78p>9yjdad+T9Rs{N;v8?nm z#D2%RTZ5k8@9v8%ou3if+aWxhVKlomu0nZ+cNIw7I9Gqt;&1-QpOSdF`7;i?>$pFH z=yg4Wo>_@45+?o+qxN8erXIWN11$tU_v1Y`(vK9}3UQSH(sCW!SV335fmxs2-MQ4D zOYk!Hxw?b|vE4a+*U~!bB+rU`-HJbc*CstVCn`mLdfJPDHq|CN9h0(pyP#r{{R*5o zwj9U%Ab*@IU+F-eYX|d9U;2}ZB{AaLcfGtCJCJSmK3}RXcgV ziE`8DngsC=rzaTaulz~vdx4wU|0r1V```9XmyuGJJBOPGv!a5UdC za#9oH2evz&lT)Y$0 z656;6?yCZ-Xx3>0E@%s@jr0_`?wcMS+o706o?9+#2ttn{lNXWE5Uzs~Li9aye9`ZrPtVk$WVnuRL&8KiNS9NJq1+woWYW%O0s^k z-k7kBWP9!LVK3GXpeUH)wI{z=WIW9=y=YWMG*cZm+zhDq)`^nGWn@NIeZQY1(jZHE4>bzrYXF1#`-8 zYjg9tarD=T}QltXYx}pDHRU zo{KgGVPXr8_r#DTAuE<}LIkkvq^z8#8zMK(xXLP=;{Fk?hUAuCKH*~C;X>|wHP98z z_*{Q2_)Z^sk4eMtptnNB%YP0E1RV7o??xd?#g^%PNZU!a-L#B{o@q?g+i%?edgo%# z$cj3ycWFZPJwewKmg*ob0s6lJc@~jEmWvj_@x_4Yt}F3Itg{z(bGDSAk_&5Q*U0fA zFZwmMjY0J>PaUpvVbJs&Z_PM}4#7{l(gr5Ked*qzTLp4m&>QFr>w+|L=K}=*r)oo; ze-PX3DAt-KP8DOQ6&ev?3WE~eeC+LOZw1$^&Om=L7{i>7CP-6liDB?CVs`Zak3)J% zb*}rFl_A_+sxU7bhaGzmZ0r8MfGl>LQXZ&2#Bgxq;~!S#mZOa z%7W1xVIJtPV9L-v6L^{iY8dnv7?W)eh1t|kI^s~b9r$@3y`-FQV@s%?2s&>3h^Jdn z0td+?3qfE+G7#3!YHAu`NuSc9DwvBYVpRvS=P}QMcY(VG-+;aw_&y;P+3+d6AqB#` zRQ-Mp)_1zZ!db-yf03Mf=9qwk4+t(t0B6T1REBWX;>HdYY7b{R)SHOHfHr+mLd{+c z*H#+|7;49nER&ie>-qM}vTg+p6U1RwkZ8c~dY*x>7Y4j%GlVK9Je74$ILx02o4=a> z+bgB~o+3OoicVDjlJ|A)iGayrsSYRQNc#D;gWc5?0J1pF<1j9E9 zW~r8Qs?Hb9?TIq!tBfX;m^HM$-s<;Ol@SZc%X1y!E2F1^T3T*@dbVHC`f--s;)D5^ zt<9#`Dgz}3rPO67KeK$-{YfUBANUFw4aXEliqbuI&Vq-f$>aKaQ{43r92>UZE$<|Q z(5`&{3X`pm5GcBY07@@JzPXGA?m{DMPNW;}GRJ@t{>VCSkC{58vR^Lxzc7gcWcGC+a;{0<&Sdj4roWGcdT%s&=hpAV zg&6{&H|q=EV?@;x0mRRLoP834Q>Im>5DQ-=wqdNrB;^U*#AU4zC(4#M=uTwf!r8j7 z0eK30qvri8nAc^fyA9Bd5z}J60Q}sUSl_hcE*;!TMvzq2Eqe8)6I@x43=g6;54lWM zM=Ep4=Uk98IxxE=u)!)Zi@$LC^q3ju$zrCx45Y9k5X1-~h`GpWl&8;*GZ)(*AJ6O7 z+1w4P*~hw1s1ejw0Yy>#Y!f>}ca3*m&NufHn*=k5!$+E{Fg}QdfdB@BLt>M(Jz3rw zdUcWy^RS$E)i&aqZ$2$Hu9g3iE+tkB=18CQdp7#eNmr6MxMJ$$m5F|Il=?pDVzR(V zblen{D(E=k3Cw> z{BoG7vw;*uJ_$JVfLqVSjB=A-5ipv^JGw6k$eG>}a7G~B<6^C(8m^bGCKwpSyX3!& ziYTm5uOkIo92Tx)*=Dm&bB=JIfvXsYwx?`}4Lc)|=|?@|M+H=kl3_4dAZcOEAHOj~ zKU@ZmPBo2C(TI>*gJg#Zr2eFHvEmPx#g4k3gN_mU`BTI`NhCcBk%!}(>at;7vP66M z8p4G4Iyz|&PVUyK$pR+5Unpx4w=)!}$ik>Di4#mSIAA~m zpZTrc6W*ng`qxAXTCe6MTe9J$FZ-TSAn&kfRN&7k`W0d4jlDDf)o#%h0T5UwqCQ7q zUc2`(NQ+-^>TNwih+OOnqSG?^=5!XL0TLu9Dk)mXQ5mR$#Xm~yo+j`_(p`U5W*edD zrup|P`>Ab1+!YM|>i#Wd++nCRSa4K5F}!)s`1C=}-uaS>F9dF^aOlV2O@aYu^y0(G z3=R;S5RlU}H7&oDSy?XL4&7i>m-dcPJAf5%u5+Vb2ag$GdBqaBPi#P1)oIiJ(nm)GeyhUVAdYjtH_)OYMBrV$1~yJ7NpqEN<31DGU(yPFa@K*Gtsw;$)i7QFfPZT zpz%{-uis9wpN>O$SK60w=({)tefc_wR`qm^D?{_!VvyOqk?ihC@~4p@<5!^%9#((B zvu1DM~MQR5Ky5>zUzb@&mHqW#C+u&Bi?1&hTFkb8b3^}x z^B|nfuX&xn;<<9uwuulGY!?(hn8-~hJ6y!eWjLWMsu&rm3{OL5*4qlmPm{Gx5}D8N z6$#8S%>CW_@QVQ(|E*I2MtGzw*nCw4fhP(5ra~hAz;fwkAa;e8x(r- z=2n0gc!F$;5^iX$e$}bTFRZ;)j^TR+2C&GUn)yG_}`G3YSHob z0Wr#|kk**COae~-Fa|nZDchd3%v0D(@%1}fQwOA%?9$cMqC7{p{5s^*I{i^X*hp5 z<$-I`;o=`as~Fou+h^|6aTuTkgw>W;LBjRCGMpv5|LCP?ejdg0fkB_$Md5`yk0lr) zQ|12XM{IGCNo_y5<=PupA)kJYqGD9N{{2sQJkBV{&3F8~SjL9N)zmdq+DS}GukWq_ zz<42Jy7Dfcz^{eS+&3%~7@xGSPVR=Xj*TPEEq-0$zq+$65Z;~o>d)j)2lB20$)Ra5 z>$?lFkL_22<$quvXL#paqBwkx!EqJ-Y{t;-iQx50I{9hE()}uYlfHPdPxa?4~ zB_<2Vpin_Zi)iaO#pIBi>T|8c!>!KFsI=XR7|tqMUG>B`kj?$=K*FPtti+-=y$7!{ zb@IimE5kzTVXFhGbq1P_aM)=OTEdw9VjPKQ7`LJtx`Hw=Vg)T90-1JYucjnv3zZma z=7<>T3{#OxiF~FbI$OZ>Tsq#K7BbeeiQUwj9+nRiz@0Q6 z7k^A;Gmj*xtAsPHZX3nxndU7Cv&iDoWrEh$#7!SoleP*SvZSnn;w{172w`p^+RzL& zW8EY$xQ1{Qi~$@@(33E|ZAM#yBFKN1j+$n(u+0 z;$C~Ttq`y!ch5v{I}{9|TT}B>9Vh6Vxy|=sFC&LxvZD?&BpPmi!8sfR#!JiF5<9FS zwyi`2OMwXn%$oXjut+qnq-;~9<^E%lvI8L6+iwWCMWo9Rap!cg!MA?xeZ0#V3VQdq zNizlqW5J<#*1X8JI;3`Wd3LC*klhu_;B{nCG@#T08XO0FPEnc}HTJWz#`<7Q zBNBxm*a2D;RGfYtb`OEPYGO-M!qHE%gAexa;GaQ`mWlT+)$@b)qAI{$tai zYPKouVw=aT$T-q`5-Yu_b-RM7P+#x7e*4(VZEcia7viarxuJ#~0-;CAl-RvZPO7LT z%j8&O5BkFJ_M{$+WM%hpVvEbV2;gq@$`dU~!@TcvGBeO;l1e1U_VAOrNmC25ryG)#(cj)tm(SOf zUD(v{ku*L@t~8$tmRp}%Ob~#)x7oySMY62BYOY#H*#Sk|L(}m7a6daO)q7sQn+gopX*5aqD zG(*AJWxaJ!;gi7A8xz^p=V>&WYSicgu^aIsN^$wAo4zAXC(dO^d_Y@6pQO7GD!iW8 z%ly;jjXD;9?190`G!elT6P*BVj->z&wbDX4Y&w4N{6`I=HyzC?vT_lwo@k^U<9B>987;-vlGK448y2g+W zNF!&Rt|Jg!oYrVmNT;jKoFH|W0J0J(b28{$VgJAnu$X{3pO@xmoBBf9F8yS-m|BwD z5E=5IuRGn=&_8roOgJX!Isp9$4BnbIhnHtrT%9BDBdpPl1Ic+y!xJOIdyYcd0w2G% z42A?!O-4}kn;}rf?4Hn_obMLsZe(sqZYAj%q?J8Gb6Io+-=cHVwrc&2Q>jMyXRv7r zl+foA*@ak11|229g3S7y595`%88UV0h5eZ+8a9`mP|V%b&9(2m##YzIJQmFth?r0)3&v7!ow*X_U+-BmLpO>VR&BU~71p z%iO;2_mnR_ERY54z)>?}Shv265%jK_I4Z-9osh?E_hMGB}WGNJbT35 z9P-4*^be!)yQJ*c6hrd)*JE+u=nm15Y`;L~GFJ#R5?B04QNZt~o7^EiA#J&^=>c^` zat7O#NrUm!Yv;gAKd320`*{4>^EHV>IvztiJ`iXw-!XI;!Q|6gl&hN84O13@S&R=h ztc{^K@lBod(>PXf=D9wd6g+*S>^OrHLs@nc1uqy(AFhc@0YU~=bC(?S*gz6I7Rod8CVH~^!14?VB0*#D&fm!t zkzdx~Sww|vIw`qRcwwX;`!WrzvEMun*lVo@%jrB?~IR#DOGTj-z&2$DhkTYJ-(y?@&|C# zCO&0NY=IOGG^dd?KUm0MI!<{&u`FVh5=*UGitXN{bkj?PlPfWN9Irk><%e0qN+KgYY*L0bQQ4{|tDKN8$2+zx zv8quvE!VuOsG$l~5I(XoYMA%GMtd_LmlL1fC@MjzYnYwNJyX+>-c^aylxJI;Q*2N% z*Z8p?QOM5_*-m2mm=)YAfVK^{Wk)y@10Oxy8_|%j_A5tD_pB#U$_ZH7R{Cb7(W3kQOna66?5z{xDz&jg9Ir% zJWyd_sK3G7bn8Imsd`f9qpBDv9f;1mgQ~hwkI(09{91=ivf4T)`7i?{TYWxnG}?qz z`;Vc+u92%}9oodCUa4YB3yha*!gM@`BUFT+5iixiNzAoQ$bJDQC$s|+8A@j z^E84abr@NzD!NF3^IaY+rTqy_7?L)1hcgG{CSVy?;I=Ua*NHu4o>Tr4*Z+7)|LoS$Mw z*Xb9uDGT7d7UIEXM!=QQ&~ItdM(U3JzstrQe33kkYruj6S%Sj4 z1TUs|#4U10x|Z!~Xu2k_{Y#6*rCgfO45@JF-|Rt_85}^;vQqhNkJOZ)=u*Cs@B^W+ zs5M;9XN%NFy|kWs@MTqgbKRSC>ut~{z3|ya4s1lV-D{wrKf+MHexU!~zVYXye@A%l zC7ko4s_tyogY9~4PB420!BL+1xKl%KCnHJCk8>7>OpcM`qo$DLq$Z;CWgE+37(8K} z!O-tZ^Gt7TV{!_l1N_m|tSXP|EkA+G08Vf-t13amLVD@^Zf?qbms{C) z@!Ro%_l7kk&dN7m2?pi2mg!r(T+MqZJQkf?`-{(-NT%|`f{cDa;KytS$B@8)_epF{1>B;h8iK3 zyCXvdPA6mllR$4R;fw}%Y3DEd{*7@CrOJ=QaVL}F4`@8(u)cGI53;qEH@*Ed?rndf zzjjtcm9O^%`r$X&IIlhMGWI8$PqkM)v&s?vsRWJ`);q!M{TJE;+?kCHz|!@R0J96= z8Ltnninz6^qk``<^^I8AR@UP*S7q}~f9!w$<^VChwPAi9n;9*|3!RQ*lDX&yC};I&Gw})!;f~xy(?m%!r4fO899vXebPo5K3u}LpfyMth zX=k(ofRuksZej*Mt_p<#)+;9Y-4TwC1Du$i)4n@MMVB!wvSf#|E>S95ToGF; z|LeinqT^#@#L8Ohikb%_NwX-bX zbpN^i{S^w0$#PbkMXOf#YlizdODF59xrkt7tqd5S=i-qV{A4(cjk9?u>-(aw zC_^Np#sRr$w)n)=jvMe%YJUg-Bqh0lU;Glm8<-6SC!DUT z@J=xjPccV=*GXdeBu3e`ZQ6_b~7CRaC^6{by;3Gkj^)r)?h`{;JqE# zNW;Tm2?}hA&yPB(xMwFjY$b@LP39f!>te-^*INt-O{yZo?$m+@LsHgoE^4Ju0BD=t`e_nWa6@xO2Y3e$s<_9XD6hfiNM)VtF<3#{M}4h*OBM0VkmZx!(%JRxnqs%Wmhqu- zkrXctoW>}r{?Hxl?bwfdd)Sm_=)Ssjc4oT8Xe-2oKT}UZkp4jYb^X~pb{HJeDLGrJ zd|~*x)p3-Mfpb`2sa_Y~y!iRoHS)`dC}n-pC`Y}Kmn$7K$XG@n+WD2;1t&t!_k;qK z&n@)iZR0Ze0n!)Rtthnk_pj|v4A8b?x2n%=1^npiDrB|qEvJKvPZ_+^yKvv3`p3$$ zD^Dh4VuR1Ci6j*)v778CfSAiqoRRKV%4%D_gl8ax2+ZKltD_#5T85ijH20N|W*Uia4dOHA z4;Jo9tg~(cb)%KVRAYkTyx%C?opXvxjf!OE<(2nwa$^d>`cid;ax@;m`T?+YJj}4i zjTCy6W`}`vd9hkyt#t_Z#>S>2pZzo>G@ZCJvYWIxmS4w7L)syx&DficUeN!EX%WodYcoC;xk(W%*xCsp9fS> z-`nI_$CsrMCh!+j!(DvNt^A?? z4WD_&1WfSx)Vycvb5iSaZOwUo@2Y663GcYFA36N1w}WP|x?M!@7Wn99anJ!*>Ts+- z)p%bY2;Mex-P79xLfuG0Dk)^(zQ6L~DLHJ7wzG|Z5 zbdlXp9h*pDIPzxT*m1V29*I1)!M?B$&HLRoK599FNR6yS@*CKjtGH^Ue&%~ff)qVw zuB$iG}L74O=eB9z^}{x0B2XgGI?Fwpy1FruIJokDWYPzMfBVCK)RHMhDr%$-B2dod1`XbxgvX7% z^JfBS8qD}4TkX<^IP`khz znM&I^TIbiD(98Sk57FVsS!puGz7xz|`+=SK!(O`{?cTF?58iD03b|&W&Ja1DYgjqx zMr=oC6G4R?z^D7R`QQMa8PuQR9SRHi%DC~CG3N>UGT^SrLJ=lDFJu4&(>*xHxwy#& z2iV-^dK{~iseX4{E?ulGPs*Cc|6qQ#x;+!H(4(I@s`|U0G;6V zf&5}1=v0W-Zi(s)RDAzH^@-})a09}tQB0)H@4b{ zn5@t@$3N;n$~rbj=YZy+^7_W+V(b_GV=Y^&6fVyFGevFxw9Xg2i<3I5D;J3)SCc^78;E@&(x1H;bYp)p;~f8*b<{A1w$ zV9Vrxok5nd`Y!l9p&Xf|y&_?d$bwL1s2jeUcc8r;^M0e3%36kNq0-J1VX|1E@qF9} z2BIn>9p?-1D>s)Ik6UrF3f9(AiHJJ`(c4r0;c&^(>Dlo}LQ&-dA-BT1)X*F~C+z|= zWlk6K zx;+#8^+$@cUPMDnJJKHv`9nwH53a4Q?o`%x3&i4ZuNPg4(NehD!E;A1C}S5dm{_b& z0nlLNdT5K+cFAmH_Am4An}5-mMLkZOeMl`&p)deh&qW(rywq5x6w@&${|;u|H>3z{ zS)1h2tt?R~R1s61Nl9RA_W$XMS(Q~rtdlm%g2w#2=tvT1+T^Y2>Wv)SFcW?n>1|?q zH)T%v$&0R^P=d?B8@&I#P5lUG*#TQ8$cY97!pCMM77om+xZ~rFZBK*m14tIgcwtYL zp)EWK%8d-XIvmax$vf|-Imsvso#&VoR8>RM($F3*)(~xMY}WO<{P+{lwp_BGma0jau zx+nXCpcoNchUV)CJ5vX3{_xWO68>;y37lbdDc^PS95G&4W1n<)7eUmwxG2& zbyYYPI(mE|`+P-aR&?;`+yEU(sg4};=FibL&mP|dqQKQH^LPvyZ$!=D;>u^)Kloh! z)zwpzu!u-LGabN0i8w!58CO!mmyzhLIU~96=P$>@0t1aNXdcdP$i&Q?9|0O|#DMOe zx8k;S4II)TvDowVW~tTfwWf!h_WbfA*|MX(1BKuFk3Ajzi}7&@y4btl z8XX#{QI$5mZ(3Yci2L}GJs#&oQkmrJv9@)sqTaHqi<}*^M^MFx)-Et+3|)dagU!ab zpV<7pV&y^Rr_5<6$o*Au)~|Gwqk#|$4%dmTn@+d5 z7=xR$rpK8mN@uwI3o&6)a_QsJ>1;UUh37=PyP9I5+$7#ZgCM-VLzw?FFob+^3dr^h zoaG_V&s46mOznPC$QjG$jJ#;1?q2|y7uOQtRd(+HP=ar|wQ6hA*BEn7dJQ_J=TTyo z7n+s;D;?{}IPyD3s>mu%?;YFo0w0)ty|w}XQCKW4=JbjS;};eT%zsyK!nMr=D)5R1Gh)M*6&a!zprDwL*+uC zN3N*`Bj=2;WNoYgsW4lFW+Lz)_4eCx$T?6?Pyq@i_xzAVfN$f()t`~Fi4th~#UY;@9`y%|q$2Twoo z;i;|i`83C_gLT_W5ti;}NK2#cdtTl8Fn^l8xUzfl`rAk@FR?j=zf#Vr81V1@UERy; zZrBZjpt25ojIQ}MknRk|Cf0eqsVh#5D!@o#B;Brh>yenUG<3l{rJnSmnnGC=$1%Dx zau|nhnEQRGfe)_-BrApe-Z*r{4Dj2vE8#e7$T#At2XuWTS% zPGXevtnG&%Df#_&Ti7mSh++ARt#ytR^R&xl1Xo^ag+$D zv8X-An9Y$~dJHpVYr#rYaoWYu@bH!2hC|Npk0ujj1TNFPB|F=)iU@hNjPP}r`aeLA zorLOTaw#fdN^jmfs(5D=ZwyE%{|3a{WlB$7GD}9;0+e}6^w%XPb{sQbx5%UfWf-74 zgBILoFIB3h9w`n;P5I_jg@wALiD3Vj1GD9@LZkQmgyQrP=Jf|-Th{R^hazEdMAW@X zo^)A8JQ!xyJwnBUR$ny!oA>KjupOy=|6Ejg&R<8wPkDI&S!JH-+C9>ju{1 zf_1(V#_QRc=I;+P^59r(YDV!NZRBGp1WgwkDCww6rGo@$b1AeFIjAo4wcwWuKH`!z z3zXst5r-r-&;Itd-*X@q z7UhE5Gva01HK!FjTS<;GZ~+bn2Bj34hgYt9I%tcx36!N2ja9ZiDXa9<8AV(xtP~rx z^b3Z*T<(Z_2p%-(x+R~d0sqaccavOPZV+T!vgdI8-`FHLxg%^;vGyueG?Y&o;HA{U zo2e_eL6Rc^qbzy@H1SqUKX*r*(2I3-tB9z+nn2VWW|Uu4|KkO4*5oI1^WNN(o2_)M zA68;pI@kf*+j3KmC+IS#^kqTO%XF=}kVj%_I6BeMXtLP8${?U2;}u{{GzF}~8a-XF z!*#Bw_G5gT-nMG4k8?hTAvb@P#m-Jx>)9kPtFYQ=xUTl?Z~mapmPm4D%@EB3Z4jr* zlr8NjBlA9b5XUkvw@jH&0#bR!zRFH`xFj^HzWy$)rm3xM-aCwXBK_PIOH0%gzx_!{L-pEYOms^R-tXu> zQyZ0NX@g{2M{+Lh#iXc1LwVER!3%`$;;mN`;{;6|pwKRUQ0U9Jok}U%FDdzO8`aC&R37yqzuiBFcN>P`#Pr4!aaF5qHN)wrVz}&{`_Hr4( z3vg4(xzYdDd>(>)j9Ys(_-GQpIqk!N16eXHEva#$cpjQu+r3FS=L)XqcezVy(e3U! z%15*e?)(?$9oSEOC^#%IjXH6sCPm_^k+s&sBqQbkh# zL2f#zM3NBj1^%F4Q@njaK7Wnpoic%gjO!o$ zDa%Q{SxV+e{<%U22t)b>Mx-2)5yCRhDN*M9jS zjmxO`${+j7iV%L(^GChaRKwEH`0Ea3`svJS9Tf>KeyMP}pZWO$m#`oCq25%J@)g-~ zse+_uz8rqDEvJb1`9!!!QnpudLvn-bmm|jFpBbUh&8@Bs`UO|Pzf&n1m2w3lOJWPK z7-p5C8U`E$<~Jp^d}(Sni$xU@A5Lv(^{Br!TPBk8MpTfLiJu0UdpTwy1m7PA#eQ#M zDi$&NYGum#+OBM;n-SX)q))nwtD*Y7shO%30*W#Y#%P;M;KQ4uo4_V2S|#!+scCpD z5zv>z-L^YRPzh-$L++w3$V)JE@oK90&x9AjqW^?PvnT_Krv^U_zo~-mJ@SjFwZ5VX zsgBY4WEI+}kHVn>Z?28~SwGvz=7wK+xo@V!7dT!ag}YLckkDdq4iz5bd8+2~>H>`& zXd-6IJvclMw=P zU)tB|PsPY$#aA&8%1;Oe?#>1l())KAiTK!Okc8mWC2&~ZMu=_0Lb1+pvsJ9ri-Hyh z;S7VzmXp`Cw_-##s zv$N&q1r|^om(GVo8X!Gf&mE?K5Z2EGf?pXSvY8jb9{&EXXS13bfz_K-)I~X;f(6X)MvBb8+X}KEG2YF|V(r)@ z^cy9ypbYyrpR%Xa;!ZJ8spc=}$xn8E4J~ltw`9;|>8k_$Yq$4qQvm0 zF&(;6mt2fnlIdd$YO+gNj0L5>QKdu`Sq`SLQ&@}&*jL(miEhiXyqKPJQ8v2<2wM{y z$TWApPmhFM^V~1eJV>f_A&srpal$Zni9lXAiVtMRIaq*^7pW0*e(^Xp!xox<1-20y zj5O6G)bHb~KL8SaKf_0{So_cUo1uAkp(nudh8z_03NRR=5DkRDlRpq$wyXt)4}C6D zgwX3x(V^CvKKosPbddIU<$DfZCELxcb{S^ezsD6ZiglFjcX2;(GJ0QITt!tGWyua9 ztv?L?mJ~pzH|f`jXjZGIS7)>QGQEtlww(|Ul>w3}e`S+-9}>Jg>4E46OW$!5z@Juj zH#9?~!m?o2@ZR;lIE(^67Z4gwG2p?@<V)*$#YQAy(?QP~2r&Fh#93M(Y+Y(XCI^uzQ(9~I?YdEc+% zAcSC7O2!W~BZ_R_?DJvBsLc$kT*|*`93@PwM;HY(HCRTo&F{}?;HWBU>yvYaGp#e% zQLBqPqEPg*T>vDq?uIIt;ZY0?H6EukHE%ET-ZxQ*QkCtk`P6tAMvM$_iX7J4_*=$=nV? zpNY1gTRZ7vkmb{<*?jXj{bhOh9+q7!dRb>X%55o)o>q?>w^TJ}S!|{p$!AOIbO`PO zhUeTod2lY?krRT1C&oTPbY*l7FDm~}vgPZMmRO**rE4y6R7k&+8|7I>QDm)nxj5`Y zseji1L^C+XMWHAPvow;6_K@QHoiZ}9liLhO|7LrkX>4>t-I4j=zr++HFA%0C!3S|S z0w6XgV6)dI{^w`!)3IE9K zs8K*|3Kq%$7fZ)xx%kkFf&+SpYv6Qo>0-JVorEN&h0JBLA50wYy+rJb8 z>@FXkvAJaX1V~7D66>Vsgq86s+_}VltA5j~SuH>|GfXK_Lgxe@rxC}|qD;Fhnf06x zmdY#EA&|xr^X>8qB${egt+6G2aq^3e|N8~dBM&U)=@xewtM;1Egt*%BNz`R4Mdy*k zTV>^7?#B%w>hcZTK^h=7kP&7LaREYT%LtyawENsx_*}yn0-KP?KmhMv@#~L@E(m3R z>Xx^3aYtFz^c!)KkVUM$AxR%0+b@UW0I0(aJqHS)=*3)lrw8woI@sdvPo0&}cFh^_Ip*J`)?m7{OG>#+$A$4*kWnH9Dj zMC{wS)(rN2!6!e(izu)=!)i)Q84>DzGf^b`+6i3@(?Vvl`>)hX|vZRpegTgfeSu!R)aYO#wy&i9?^{4pU znTAqhRx7~fa?DO}D_I)PemP)?S5qb?Ru<8C>s}ukJm~vDkH#LaClD1N_T_>j*_dx5U<|8 zlCDDzb%|?dPDk&))k&(M^Vpg4D)WcAwaNPzYXHg|BCaj|XhNh`5elN`wj*a`f$oXN zhEvz$Yxc{%Us;?SW;iTLcTH>Cb`7vkO?Mdm)~Zh=AW^7i5cJH2S!3o~NgoeJZ)UsA zE@s1%EHMiZNw6@;8p{WsBzCz+A?My3;&S8#XJS!FqFMXC1kp!j7)zf6xZm1ZEHIIe zKE=T8ctBI{lIW(5h1RkAcpNeW*I)0A3}h~m2LTC7g7bI4EVhS{@P$Ma0dTwvO4+K# z!OI0rIJnQJi^dRW3%*Nk9uoGA3<_VOFw9&{XH*Op^QH1z!ZJO`$viH(Y7Qq z#<&=DNg?$&@`{I>V3wOakIbU6SCj;$RsLAP>dTHy;%f%l_|_`}JP(k+9>Zhps%y*( z4zW;*F?sfh;|zqb&l|$ro6+jO+Z2g6mvrsy9Q&9Jc9jR_(=20Cf0~TCnS%UvWem-Z z0&gp^HAX!Hq$M~j9i4bn(BGmz{8@UK`6LQDj+QgNq{45SEyi87DTQb2k{Vuz zdnv)muXM|3-f!L0vzHZIY<4i0{?bIBa+Z@-!xbBfutoYKhO8-|aWj13qTvu}#;T&6 z-!}xE$@^PK(44qNYkcT0m_uE6EYKEq9=WKU+KNp2v!R^xZv%6fvJF}&*$_6yuixeN z)O%*rcH^|-WjL#%Wsl8X9`Nxcso@n>d^<4f@9XkecKoK_WP~oLwa5#Q)$RrMg*UsW zOPTS{2J~P@QUgt#SSM9MObNBp_aOUM3K=~A)~1Y7b+;Emd6P_zs9~tnj#2WBuMrk$ z|Anso1(egLo|BzIi&FcndwnQm#m9NV7rsiV?nXhbOVY=*?M3B&WGLBAKCxiWo>+2l z;tVtBiedQI|G9 z7NatbPEL;UMNpqSos8)qURnGlU4a7{%c)0Gb3~57ny6zn&MAzvuehsbzzKU-X4|l# z(dv6mvuH|t74yRgQjO_EUtU*~wFX;$PV2M!C-Cn5#vB}X51LXD*+-)b0Ts%~2Ja6# zr{GLkvZ=2}Ngw*f^g2zK{BZ40b_Miiro7- z(KW7Fp+vcHk1r^H|JtJ;-mC^ipB` zub5LQ(^=JTCg!eWG=KY`brVyEhuJ#zGt`K&N$q<(c`rdj#4Hca0XBSCVWx@aOM9FX zVIUTbbPggg&%y}%&OfyML43&7<9tTZIpp)Xb6PK4RfX(JGJ$Ud8^L;o$69eB9%0qk zaQc}M&g>7p&zI1=9wF$Pdh-g}_AwsSIk^EOOlT8yRl2SRInu+!QkI>MoUFG3+27GC zwY$&`Zmgf>{Avh9BfZ^Ab{ukmj4Yb!3zSq-UH%-jnkt*`I=^W@1XO-8xw68@Pr<@h*IW^*8mnU^=X|F*rB+9_zC{`y`3F!}|ymMjen z(1#oyA-SJYpeGepV#7Sg%Iw~_)^wWrB)xE$*z#Q>sgX%S@>N-HA;lCK9|Uf&0eKZr zVDM`V-Y8WXG^FpD{du}KTOU&iYVeq7y6gGk*^~A;>zHeXeWdihZaHgG7Ak|LxV0IU zL=IgPc7$-sl|CT*Q7k6B&||I77tQ?Qp&?I4Qz@ckcYr<%RF}pSOVA-7l_UW;&gBMi zuvo?LYBbzTW-WR~AyjW}p%U)wGIW>#mB?7jmUd!}RhEr?#%4UV5W`0qPNFCCHJ!}z zhQ;#WFF}N>^d)!3@Pavg=3wID$+W+uBF!Fe-ki^-Sx{V?i)zhz(}Ru#2%BErddQKT zE>YhpgYmIgq-O;j6HQuE-Z7jj2b_H3M!e?*BzShw-mQzWlVzHy9iF)eE#9pb3QqQ3 z=-I{hj$j7wF`F^kFbwNN^}-ukV@G)HQ`TTCPHt35)j(L`bl7#)tsRDn@MAllez@BG zDpOf`_g40!I z+5JYdkm~0bnjCf24Rf}!c~@C^+Qahd4%)6;hDcJJbid(BusYJ{-i&;elKKK8>378V9p7nuOjk<>)P=Yc9_*98tY$6uN1(@1Y)ZTZ1g%MbEkyaPVC8d5A|aX)oNq zS%s$*YkPkgmSig=SFRJy*pq4iNO?Y?)_59kE*k8ho?!+2_wgG_=&eaYLEnJTo8Sn# z&fya~2|HXK zG@+2mX?Z6WUR-P)xL6eLW@9U=dlSMyrG#yqeH!O9iFCC9FbuWRS{XBJ&bJ+z!r-82D+O|F}N+izZ4{sN99OAI@C0_|0fwV zoNr8i8~)BldO3~V6P)F;gnF-}9aCUPKaXjT%+rZW6r0KQYhop9R!-o(CvoE*F~W+{ zx>-cvPv6?x+itQv@yq$h*vp4u;PI^f%e@c-YJPP)3N%RiR_Tw^3WpCx`ZuQH)080x zbp>fqfxJn7Z=F4C@0AyW5nS}%zl!mlpTUC%?tK^qO*(NN(2)7aKr*cz6J#)-SX7L-4ut>x6FhvT}#E)%Xs zA*hisPdaB8113dgC|)&g)W0q9ZJWF^WAIhpx2uq_t%x_u^DMRzUhU$X9wv0uoz6&@ zTU-=}=eTFFm`$p#7f(Phx9wy?hgzZ=yV_#BQ~`%x)*pYV~duTcxi- znP2Hd$7ZNehm?oxH$F{!mvxKW4^^yUGwajwXA%O1b}WJ1M14=QHPv<>w-eRt9`MVG zImiLw%-j>4yI;E5J)TT7`dA~0Rlrb&9t9Olchuu0g@R=1rYs5WM?O|-aY8sQ54hg^ z;wr3Blyk`!LCYQ?GxkKpRwJ1Z2d3Omg`#Zpzm|OljX?=GW*3RHxgKFAE{=T6!+`pX zN_@}M*hS>OfWiGA>i@(^X{NoQlLU<`GrT&(WC!RQ5$JMR{T9J2VRriDiEj%IcO+qa zzGbow+Cm@Tq!FPy`m#g#1Q}03+4IR7neEV#Bkwv-Eq2ZR|JwTMxH^)oZ7jH5+&#Dk zcXxMpLU0KX;NnhjcMDux0~dEqAOv@Z;10p{yR)-1`@OTe$nVK)e87f zQOlqW%)=?Er{t9W{XyQ1oM=GMtYvTPaBg>6L2rL^Gj3@GfDb;L;L<~zv74*wuq zgd)E2TC`O>zvX$38EMtYe(BgpP_wTLlozXl!i!GXe8(dWs zba@=<7`1*Z{yl|D3AywdtYiBkR5PKl&0v%Ybde@TIt|yJFyDh~fdj!8Hczww+3At* zLceXLJPYm*X4_nLl>(92A)}cZ#scH&4z^Uy*Nq_WDW8sVZnwq$lnji~Nm*7}T535E z319}TH{u6zwq?VG*5xH9hiq(^Mc1EbPkZ8ZumIsnKL1h9`3Yu0_0O~yc4P$fx0~mC zJ~o6fvP!^h1|b^9liL%m&x-G1{#D}-M6R`#AiJz^F3Bb)@OOO- zv~U*Kv9B3Dq*$0|C0?>D9-S5H&0s8&_&=)XfrH2z(mP1IgB~NqoNZ>Nr=~Co2)tg! zwgpc-;ofm_0*Dw{BIg`emvxwrco=2>O#FXx{_z0J7OTzby8X1nAMpPd`mc0>iBQ>{ z#Pa7~yRps0JG({2YefHD=ikNn#ffQZVt+ba`AjVvS5Qy@m6w-Cz-@<<2RvjzB~^H2 zYOsVc#)RZX;UgLNPn-XhU+k4~LYM2%g8X(b&j;Px+dG595nMA-Hu~MhH z@8SB00}_{jwHI&b75>MI%LLaLrn6Gc3xUbY;>VaeZnVRnOpd#(qlUkEFgws6o0%h? zjajP5+D&45mKl0Dvu`auBFDgytIwK8Ar*h_H0 zTNiYo^nd7Pqh5I=li;kBRAtjwJ7eI88~;a>p|JOZdwkA1BeJrHd>;--RXrVZ3E}&Qi}CZ-lxZe6(Oc{@mdM@0i}rr+-tI-KzfEJNN6;5DK$Rb5KBJah zIXf^S|0N^^FD{O+WzX&2=xIvWb3h4h*7UwZTMonI5u>B6Cw^-#*~Zx=96WSXVx5RT ze89`7reukf)KGuO6(AWS;s*J@$Ayq<5dS$lJg4^L3H!Kg^aRZfZiR}iCAxk5*mrd> zT}<)CxS7u9lvMB&7=K1kLCJrP=TkMMZr6hx))XmqKv;(9SOl(<*?gPyf{VzT?C#NC zwxYs7Y*)EXcihbH_R8s*i6JB*tiV%hO>^gKa>)fFhx-Q)xTQ49{-|$t(ORo}4MzYo zDsGc+_{3I}e)stzgD9Lf<{eS5X3|$|>Rw(|x1&#`mT49*?fPcp<*AF7JSt2y8IsNtbY;- z-7HvE4-y_(&ZLn;BBFDTdcE_1@*)xPs>>~zFH^(!Cio4ot@!Z+1iDV@&iMhF3{v}S z&u2kp+aewe^mD`(qS{OF7eWt{zgWl*Ku3&{qJdBcXvn(k%(+e@^{3@IjqS>G)eytc zuyz*v2HD9byej3@MZ#t$h3@Utod|Z7E))85`s*kV7jo1iXI9{awpJnsB=arPH4If4 zob*>ET+N&0V!nrM63`qT3qdEQ@CZxN&qy!I$CEoLs*!WqsF8QG)R6si&?s%J z0c>n-djp|ifkp-F0puJKdF`v_7TG-Om)j>^Z%foJGl)-7R)>KHLPZ5haa8fvIJ@72 zJ8;BG_UfVhBEi3C3`CnTQ5-7(uXAL_Sb&avsSFfS#o`5UnPJf;C_1DQ0fwFrmO<{V zqfg|72Cwxd3DT0pIfhGXoM+yGQg9=+f4w<2UVLNUZff*b;~E~L6(M>P?j*K^@PH^i zn_6UVF5OPa`HYb3AEpDYfc-lHk)=D35JFe~cZG3^r?c>8_8Ri&>gKm)On`I#|LR@= z8>UTZY-dDjRAgjNljAat`ReLwXQNe7X8SqjwV=NdmLTPBSw6oTyv1fK@0wRpF70C3 z-A}JqZe|67nBFpJ^Dm$g_`ZPP9ZM4P9kG%Va;t*#U-?_bLv$QEK3L1QNS_w~O!#4H zc{+%u>=3<`4)g#Qdn220EhmtEgxO>xKvJ$!-@+y>j%~c0XuYJ@r6%5-rSkNFTA~f@C*U?y3T01yDF(wo z%5)}aBe#k4B78Y%r0_DPM&y~|hM>RVc4JSKOv166#K4#|%5%$qRfku7ya{A8HQ8v9 z(4X-kfWN+A%`^{ZKKY-Bh84*-I~eHh&Q)XD&5CrCnkv!H(hdO_1gi209bvkre%fth zLSF2_!NKRv-Op&|=H?oD_EG}2?df(}$$?HOx}_}7Z~ZTP;f_PK1cZnLUrgVac%8t4 z1{~7E-g|A{Upt#OwJVJDJ0Fr@Evu?MP$*q}4T+tF6IfOua+Q@DBVia+FGt0y&PA&V z?OCRM=?e1U!YTo?Ckj1*wDlmuo;x#e*v@}M@&qZ>hA7WN6@j5 zynz9cub-b_{5ebbXr8bkqcH<`efE%RO>7u#(P6b0a%x~idu6L9WW$aJ(#WCBnHv*= zmrsV1&zzod9Pv*bf~|LOr1}Mln+8jZKl>Z|&s9)PzCqvL-y@=-HSVLIPEv!*SpNjL z|3MlMDC)8d2P_NeIQht|+ycSj^8HRRY;ZTTmAZ=2V}#GABa=e_$GMwZm1Kt^*NAkP zE?Bo49wK}>Y$$`ql@d?JuxM~@X!cOoYYqHbK=Y{Q=zl{lKNt&KFUkyJ<66Xnq0#%h zT&f$90(+u7!S;^@BwbIS(pR_$a;Va{51J1B7TM#Tt06Nb4g`*MTnuOxpj?mfnD z3vlMn?1pj{J=4T$kq;pUM@h+qgTI(WKt-SuQe_55QvVN$=VG>aRPLxGxf#$-d_aWg z9;~5P>n}IWxocH=*J{Vy^fDQGdS^J;2>%zPLzD|N=v0L;Yd;it^zHX8ZQ_Hy>o7rS zX?RP!D(_u~I~mJ7by0rtyy;}BYA*PCfCs;*hhE$cbh{(Pnn>NSSt+0Eq}W-h+5m7N zX-W#6vj6VNHi8^tu>d=m@zsk=NU1rrqe$V%1N=6;k=tnxZGJX|La-Z$H(TqRkQjOX z^su=0+iZ+Q3qowDjCw&66@L1=AJ7kiZr8}c`4N75x1dT1Adoc`X`%I=a^YL~?-r82 ze}9L9c>Rn5APRmr%yaoX(<{`@g6VRDVdjCR}ci|WAw{$a_&h)G$p z`h^wwu+8Yn$CB9>UpNf0n>F+odZ10Tiuv^Ev?HZ_I_C40#@#}bcV_;q6^YbS5S3J% z4fc$EeVm1%Q3aJ9l~7;dSND?mzHt|W0NmxKfua&_8UQ|RfM>qe%OpYt{ZN$q)@6ec>_+bDMBN zFINkqgt~TNHn>0x4Q{33M=!No-PH3ZE0^Y~w>yc+L@5I7S~B9{se8LF#_82N;8}&> zyc3Roge$Lb)e{I{R!fb$W5b}XmC4AoXLp)|8KvU%Gai&azGp<}4{=PC7#B(4T26LF z^081Q1`pXO<&eh`ir0Kx@q3fe%7vVF^)QQ*BkeGX6nT@&7(2nQp20hW-G9f=ew}K zn!TX5%$W|<2oEF18CctBmRBaZ;KKsl{-x0BV`B?uVauiU@X{2yPQY!fz%i0#`*#KGcm}sh(hl~V+>q!-#?>C^85Z_ zC)$HM9acc;yXtHRNYiPh;x@#Z(iIXxCeFY7cKkr>bzSW+BN=~p%a)L^7SkAyuoY{= zYox?FkaaR&@X>P+Tk`}&wHx8nBU}9~^?^2pYt4?O>B}MQ$7ryP)70ilWA=g{816;A zSFhWFz@-|M?d8>ov47M9Fh6OJsi44g?olJ2Ro)(SI}LUr*)>ZWe)eO?YCIyuPsmFQ z2Q%R(rqmIa%3F|VA62PA#iq=u^J5sbG;*w#AzQuSMpFqK$ET z^AWU@52~0)7T7CGl3B!;C?ZL(bj)CX2WJHqE6USr>r!!qgIgS%<~4+5KlpH^lu%U% zf*{dC8xm>YG@H%qXx&cYKOM{FrHWD&7IAP+AeSSE^uELpMFLaR?n~w6Zc%fC3wn2w z5}df5c+zT&f-}YEq*O%?L9JMDe>=dl82O=u zsBPX}PK9A;A%cp-CkLOAGme5`UX8akoMu(P!ojP|eFq=_?LRh0FZU#cH3i#8{nf&j z2FBfc;dN5B#V$?DP@h?!yG5|+CjueQRQ~0NY`MOXdfm8Vti=Wnj%Y+7N@hMvg@HAACi(is9Nm*Z{WNic_xYCLH- zyrT-+iV!pd6zkzLn-8H8j$g_>Xn)H;r=1u@%vCeti-LaYk zK^9?C9qUsl!`Yer(ZzH~@tw?B*!d)gUwAeqqR-g87C&EvlgKpjEA%JIV3unL z!xZLJAg`IS(wlcgPfB~uo`B{FYPjF(!KdWxxkyuysa#s%ec`}%E zjDQ>Xav0XzRG1@WYMMYe1{`#XK+bBMES-C8M;~+8x-9T|p(BZwFCj;H|GC$U*03*7 zt=D_N8gB|pu`Y$~AolCkBm$@f@PjI`n}IC7HjUcLBHO&lug42jmWb74v>!F!ECpm- zz%x&n{H?8U&Ja7QgQp#uB<9|P_poCj-i|L6| z>LjVM=AohYI2<%p%i=2$T)>|LpI&frUdPf)$H3Ks*@mc|yyK-_N%b}Jl$W|2o;n1M zB_#Qw(ja>=rYofhfkc z@%{W;M?Xm&qMSZ!i<^RXG`UIxO*slxCW5M4W-&ix{{pYiVPfr{8W0>Edc9jk>wuXn z=>qAClrD@$(MlN8wB{a+-k5H{qSOmr}NAg zy~OmOTn?@Wx_5P7dz1L7H-0g~d2PszzI~v}CGvNG(D17@Wop8>cHM1e&(YWi00>ww zXetD_%9=Ltq+FMD)vFP)TOMTd=qT2URGT*Zmsd4>Zb_pTu+QuxE52)b`+h*2CyAo@ z36g6bWryD3ae&({#XGu)DRz0?I0JNhAEFm_0oPR?UZu2%_mrmVRUsaj++sszO>2lW zU+xta(JpPVX9m6XGQxLtOl9~#AFt;yeUV|1z~VsxsfQ>GID5}$MEip0h`3(tP|59D zFbv6sxcH$S$7n1*$Q0s?Q=1|00`KV$E2aHe0WPJJ=W`_0o18`=(;)LX#U0y?O>5uZ z4rZ!=9nV(oAm6FNbYchL&W$$OVN`#qiHRn;3h}8u899S}gurf^V;9i#qYX`vuYTFBL$J$^j zwETDfHZSdefMa&DJW5QLe1?uKDvaMi#jyKbKAUEwX-pVLA}7@W6Erm8b4$nzkP{AO zvLdWtZI`NUL!gCId!;mE9Wq{4oD1N%ipQEt>6~D2+x%7ZeZU3SK=DQ}3B3s;!I#TL zBjd-id@cZaUp}BHIcG5&;($0sTEP}y)iCdYf z{9S8*_f~|t-a)AZHN2Ri`e#o5z<_L=8AcFFZJW-tr|^`UTn`5#V~IIV;*B|u3R!E4 zieW%ol%VyL8Xw8e!4EWnId9wVai`0sjs++t1U^!QpIXK}On&9RB zl+fkFmT01DqS9BJpOfB&niO+9=TG1BVa1AKheCy1INTSwuSt8a_+~$Qur3%sO{6_z zz#F;XYi?4NV#^nF3eIPoWQF~sACt#C(DrlE;-=cceUd-JC~Ef46+iM8YGN*Nxg?VT|5_R zp*CBr%1KWetqh*8)t|1OGkEA9%X)@3QoK!3Rp$oIozSy0Czy_1d2@T8g)`A>hZ8eI zZQ+iq4HLlL)HUCKt$|H6DQNBDDDLk#xaQIlET~}eQq=wAVW0L``39%l3ywu`x(P$Msd%3jAcU>gC2^oGk+?_&)2LYAOyxTha* z8IX8^Hkx$nDt0K-?mVKMOv>%vb8q(EU5p6Ya>aX7baX_RfyFTil~B6E)VFhGkrU^o zvOZ>EcX=z~ttn8P8sHs|dl~f4 ziAzxsCSqc`7%Rnv#Oe-~tFd8b86xL3849w{cQ|8YB{8}H;k#^W;T}5Vu&<9(II6!K zTfs~rh&&Q+@0twGRvCdz75Zd3%5nC?62TK0Ga_6QYb!LPcDAnGQpMHGO@>E1v79E?tGGd`N2f_H}e?t2Dj!wfYt&@rJrND$iaSx=W?tgVPDhEg2em2IdCJUyIB- zBednC!*RO%{7{p&PFUasRJrJR;|%%46pZ5|NZKG(n2af+w~kZ}_F>qRTL1eJ zBo+xe^@k~UtHf7W?5E(0w!voB^T8|DYl--^y&RM6rBMl;I_Sxh4MBV#H5*|$nNsb| z+LAvZYpv4IZIMx3_HM4|qb^q8!7m(zOU10*SQ?VVL;<7|-iz$HcMca*cI38eZqGmA zvE&Zf4cOux-Enneq*U^ELp?<+B^J0a67n)~3862xQbAQ-xIya)lCEDhcQc(#zx@ENv_6gh%gA6D@-83?HERpU;P*F_#kG^9-UO zp_Ht?nJSh(i7BiWcC5q`ZYATOv;2Ai%83v#qfPsH6ZpWYvL;=aq{aJDg>wB{MPBpUF)zP{=G)$%hPH`r#03RE%$)?^dB>{DQ?5eM1XJ2;gnH0R;EHNpA+EkQD`m!( zH(n`5K(Hr7ue4e@B{45?W7;M76Uf`lcyBSQY!&IJ=6sVG#jJc6=R42Z3JL6=D{A&OfWeyjS$lPl zqBtUBV!l=zoDlL8Qrc#_1&>3(G8Z$w=Zf{)Xf`UES%q(rDc1?WoV$+}eeHr8Qp-V3kXs=}E8S56hf? zLB;N~?|V>43LXm1Y;I*TqavY&#GB_m%!bBB)@BForN?kz;R7eu_cty~y8UyRG2Sx; zq6aTVBdy%RDP1LaX3MClC4gD7-`+>HtP0{9<%CUo%c@8}x_DyA{Prwn$wM2i`abZj z*fFc>m?`r$VW%T+h{Xm|jCp&q{D{#>lSO1HH(oN+3XgREn*^{FlLe`+MCJf}kk25f zT3i*D&x&(%+lnW}K^_;!RjcV{W`aSejjyqBKCsa9sLIwZtn$r8+nC%N`($`MX}2{2 z_LDPuY+ToaMbK5;$Ad5VW%&-_^ZlVDxqqpS5K2P`&zz3rbGXXsXdZ1nQ#*1K4G4wq zMoiQ_=0=Qed9wJ|&t<LC4#-@FK_;}oi~@Q3XEXFv0^cM5(03hu zOzsIZ+y;I;Vqsw^tF4t)Rz@QtCiY26`Sll6|BI31LXJ(qWrN8@gm!##!r@{T?-72> z!QXZL7%LY4=K2v0bDiyfcE?9PFyia!TSwODfB4V-loT(Vp4u5aCIaXG-^stc5-sVF zx83RBR_6ct4Oai4>=28Q{I@d((&!BnEHm+Eld0YM|0zdz$&FViPu%Qa_=I5=D99x* Mts+$;VHW)V09l2^^uYgL`Qvuih_cIE-ds~1_k8`JqpTYqnp>^ zoj9(VJot6h=9RGAP59$_Q`Z|_-?9`^wn0I`)IxqPW$>mOp`biL5q|wr&M|gv(n%@I z?)>7<@TE|G=|;U*_xbsW&(dB6t5!0l>G-mbzS1)4VjGN1V$?Azi{y|k3yKO8&lK*> z8`U4BEtMDVeeQJ?o!?3mgXl8RL_P1)WA0d+JAb~hv+@uQ4~DsJoJ<_Vj1vz#{TY4k zsrB$OJPk_7){gxp|K$x2LD4kI!%4yeYM_&}la) zuSh{n-AQ~bUo5bLZ8;FJD^Y?s#tJIe*p~ z^|ov2dhOv=XZz#K7E@f}@mx_JH{N0rH=^JacoDjf%&z9w9gBRpjxHl2^0_&XFrUS2 z%rTQ;x<5mjnAv#XXEyUgPwBaXt$_n&ywV|lPpzfY2n`uIxzOXi)x~vd8X;j}VdwSI z;oUKle4~|t%qf~1Z}HH`ue@QkoOxllG9c`!Wq5YH7n~xUEYJ!&!p_bvv6!z?D&p?$ z9?j$C9F|va*h{pxF{#=a!>VX$S&)>J!~`o;yVJ!fvA8i+t2)>0FI#QDe*gac6#dR< zqmcrw{VFwjG``K+gZR65?+$!@d4<_*OwPy0XRO#Duze@+F?$k)Y}zvx7KNuzpQ7Hr z-A{OND445M_+xpZ&C}NH{Ah8dKRxg)zQGG~IKTc}Ww|({Z82xUc{SH~C@1RuhYy3v zf|zdGt>hSsyPMOR4wH5fBu2YSy%-HBlj`MF2U%+;6E#l7ckkUBEHhKRcI{dwzwd+3 zfq}z~KKEe86v8s&WoCOLI)TE$*U=u%NUcWgZ%k&_Uz}|kkC)|MzH((SiU0PbU zq@;tgi-tyga7f5tmORz98#k!nsk?bja@(?j9^kE14w&&Z`hkD?d_yq;CzkYpjk6c1-bto76?%gEw z$tt7ezSQ6p*>nk`g^sAtK0ea0*c`S?UvV@XXH7krG3t&M@XW@`#960Zci3xbXlW&7 z)5N6HCF1Tsew?$lWr>c<@cLr&;*2+95eElnwO5d^^y0*LI4_RCdFd%O4o<>OO$=Dt za#nVp%R^SH&iZJvAn*BM@|4Ra zw-=__^73-k@k+Mc?vgYzCt?A=p6?%Sl-e%K?5&S0iiSV$O*r2rPj~5vVU=tTr|vJ% zYG8Wv4JB8(SiqwGtjzs*ncQrwM0js?xICfSW>I1fjD*u+V<1dXBQufDYvu6I+%Y@> z;^(!e+wI5gn&;L-n|rzCQ+;OTlWAYR+?lj)r~d5i-QzIrmOfSMl5H}aXPyAF<+MGT zkH~gA*{=fYw>#X@ss*=w#9|s*ce*W#+(yR9(x@-Rhv#&QZ_=^>9a+G$NB(%MJgYXm z5iXS{JggQ|IqkIdYUk(YRp-a6*!cLlIxPVdR8*q0b%#mdKdEouqKL<`NsC6%46Y1j zgNr{aH5(sVt{NR3T^TRWM@%(4uS%qR+P&J^+In}RdUGX2lBf4%vp(M>ud>zG+xGN*A?*6@cB|Cq}m$ojWP^V?An-z_Zb;>cB=WJKjZf!*RVA3H$BAzSr(`}rU z2u=6Q-6#bnk8{^aw}VM!r@#gVa+DeI*(_i1p6!M_pi#?k*{E!BH@CMh11J9)8~a$@ zepIjOV9G^aK_M+ywVaZal>cDDCJ^EoiEw_+_UCXK^(@32;3*W8m7|b2ZV>Mzkl?l- zHI%2G?TL;TUs|^UMn0Gw5&m2`Y1;ine0{7myRR5UsvQjl=do{-_TkYHducv|GRQHW z_4V~ZAt5>sJ+&sB7UMjdwCU|PCYEi_+rp^O;aaf-p2@^o&3bodH&L2zughTCQTVNg(z0Qj!7nwqJF$L}CPG#H1;d}8Eq zK0@=chRwKHIqn1BCdb7%hgjp?g9Fwn_Y*TO`|Lqu+ts1Yn-~}@`?#q`in-@A`@bh-QUBMhl*oo?<;p7}g<^c~*;Ic;VHS7wZ8F}T2 zfxptTu`(q;o9QAR&D07PH5ci%$8Knqs`wWbF`NvS)%y-+D^}+$!(y^Lf8hIP)8k@1 z@eGWV_44J*ere({k6Ho=%gcH9M|6-8&8yd0ymlPc$Ml#irY4Z_mU@%%14gHcb5%+i z?AJzS<@l_u3WH)|RtMrEA`EPo`7PM59z)onyrl#BG0i=cVh0f zpOf=E*=nv?;LV$_4K|Kvd&9^Vc2|eHpHWa0maFC}%s~dXcfxe|_3M`(#P_+G?;j*u zz=_tj?D92gkxk(`Kb)iKrlzDU@~DLnf9XQhrakKWHkTVPdF5ag&FjzX z&!#WV5*i92^vjRQ_CXSZ8+RtIBi;fz4BvR~s^lcqvu8gub72_y^W3wI$?8(=Ce%`+ zet{5jNqe@TY(-j9GO`uOGsiO@FxS=*Ob0%4zLRjl7CR03m6V)Z(Yd}gguFU-Siauf zt<-e1FS8ba$s=y(k^lnkmF-Gcz|@qK42@dn{jxf@lPpMxfFpC+F^3Vh>Cz;I5OjLAqJ7)oW4%;3`0e0KJg=--M@7s?{eUD-^ zpnNj3`_`}7A8$3$iy*7dt^4=p=B6cn3}n`m1Xk0LugoSx87>DKRTt+c>hX9F9~xe8 zP*S$dpBMx5fRP7rG+nKRs=5{pgtHZLNx}{YE^Ube(4u)$RtX-!4~`;T?|#Ol-|=wL ze%y?pet5lnI&U$-LnA`X+Q+=^NFNfGBsjV4@z)DjcOgo`%XD^I|PRY1A&XY;sW>u1hP_6UZ3o*%f5d7I(1KEezUfq zprAP3pxACz0sFy&EXWfyng~4YjAfUFn-`UvO;kuj#$1`KF7H1wa7n`^B_&-3)aXT1 z`TOo90K=;7HmbpNNkV|o6SFn2Q$oSlF$vUCSHnX?mmoF{san*g0>Ja&uwRR8YinC; zv9Yn~cJ|*nQr13cYJ-Vp$JP$iI2kir~sT3+=8#PC{yFw!( z$c2v^2+wD>E2`}sO2<~XcN(I}V>fG^cb5{8d|a&G+2^uZo8IJ$BO1(Mw~~U?7UfgU zCSfZD+_Vma3ud*LWj^BoLPF$f7hM+iC{>E}{gFfu0TY!OYv;pNO8|?NT1;yo2%R5CJ>}cC7r35@ zp`rI9Jb1C=y1Va=*Wcd%eaRK)>Gc<>ri8YpR8n!vY6`cIBJbm^drVqCuHth!N@I_F4W3Juk&m7qrt{WqnV3uEKgQDB5pp{!o~X>Pl~iV8O2`SxE5wx@?yfN@)i>sw3FYqL7z86Cji(;+Mx0k(>U z^&(++UCPf<7~eStmsKawgvzwR$^Q|vjIC{n{pM6|9H#?E+y#Ung;kf4GP9Uy7PFQ6 zZ%8Wf&lOe2N=?#>ii#+2L;)I8`u_d<@p5{?S}lV?)}ff02Msm#AlUq(t-D=9rX0be z^WAh_qw~|FN6f~duuj?+qP-z9HtmfBGQRwEXR}UF2C2%h8Y)-JK z`G>WlO!IqRlFCHju*^|#y1_AgXK%u$TYmWwxn#WU(Ys8D6M_Mck;Eq?DN ztM^buteq5AjAh7JPZXX(iHxk`KqB9brlzJ$$nlhvlzpGEsdix#jbQ_TLI_FOX1_}4 zy7dk*f28K9n-+onv0oocCG@&C8qlK79Y?fb}{cw}nZ5EzAefkm# z%duLQau%qBs8!1h!FR$i$ZtUcy-i#5HHcU+%VBe>3chC7%a5}Rh;bND>0rJlZ>~n| z*!;wYHn~%AyUnRuq-utUgU{nS!egOzdiVz;TT5P0enGP%o?DelF>e5}SYnykc$QX! zClXx3X*Kg8mwRywLC}20%gZYs#lX*daatVBWJCm9&J99Wso>o{QQAz&1fIXh2`aKz zU{&A^5mRml>esGbMGOlg(Qx~Bt4ft^CK9^LCadHTas~nea*evvd>DMR%+5Ov_0(S~ z18O!TxkDi*goFm9q{Jc?SgJjk;!Ix^mUjt|r-x9{8A;EFghQw@6jFx~^mx1wW5MLG zp>_tTX9enN41A6hhbbpP;4`8*9r79|%^W7IypU(0)~r)gud?m68&*#b4!-LKMf^%{ zvKIp*WA>?-7u0DzJyLsXqp}b%g0vnYOJa_MMYu+Y-CQ~PTofM z-3Gc{#3=!F(j0JHo*}L&$l1A;?s0Jrgn^P@Gjx#59&E ziZs=}Mr)vhY~=58aWXC7>RQuVpv6bb#x`OIe2Ep%Wsi`GP+Cgr4X*=`lb%35w%4lg zoUAb>gLMjkwfCk7-<$KqGpBGiJU$0uTJ10l0xB>kC}P zEE`(I=|w<@T7CrFV->%HMG>TlhyI9(j;8KVTj$5eTl;4pyF#O*ji*go23@FGS%)hY z<6ZoK?RyBgkTsgs!W@l|XF{poy|$erS0S4o0DUsxDx^rk!oxG++Ua0yuCiN2iVv|^ zw%*xOz|C=cN3N%TS_FV>^amqI77ih6hFZlR07vusv<(Dj|D~lRO5PTm%+w@_I1XGe z5i6&TNdg*$?7<2Ey8e-o4~gmMdJG{?S?vuf;!!E&SUSZ4z?+-(B4kNQPWFe~PYfV0 zlEo|<$}LQG1|~3@BefO6p55M5Q^1?@SW0Y_r>&NktwB zi`&JGbP}5$@>aCOD0NNR4+)OxO^$S4!ZYQV0^8?h_J zRzpDK_c$4!-UT}vKe&>0JKkl39pPOda^&pIiora4V5OM#+U`Su%2wE1r$Ry)k_3RC zW?LK_Lm41gXdDRkxksJ_bu>a)#WibPq06tS;fiCk`jOa4hlb!+U`DMYr{AquF}HG) zlM6EHcSwO@*iPCFJ0)gC@08b{i9?B-wN0rusHIxEhWP8y6-=%tzD?HO>ns4J?tv9A z0W(JW4TUElJ`zACDwE5;DP&Wm?g{~J2k@yaRQw!qs%mOEz!@v~;?Rb}`>+970C+h3 zE`_%_pl(i776UDggcPWtmWDMw^>b=g-ApDSDui%mI5iTjagy{oNW;tDe+?lvPN{Hk6~BOu+5z zczO&#HX8}}08lcWb{3HMk2n)Px3e4s#Bzx6i+^0AzXO#Y8Xleoz$c+UEg8j_@M+q6 zd`|le;0lfV)BM5QN+Cc{t5x*WMYl%*!HdKzlV6QKK$rF+FnunN*Lc1yENsKswUso& z5Q-cLts8HTpt|RS)Y*>&Uzj80Fj?cts#1ji5|85ub0g!L0Sit3H3_VM{k-;}YmDcPL1 zQ-I)7DKSihNR%NMNI=8a0d9$aRqnk3Supb8ld;R)#`7n>| z(ifhKQybtJ_iOgQ!#Hm(V0Q4>t!tC#vF)KYl zB;@2&q@+#bdNY?BPB5mv!OxeVpv06El9NSlIn1YN(EuNi@?}6nPEMCsL%r(-h9x9y_SD(0s|d@Kn@`qAKY-7r7O}Lm5DJqLVD0JA&bk@cwh9nr&iiYbKYt3* zD%^mp2Gl!zth9jDFH*_fpVbCbE-N7sKw<>2!+0Pg2-+NwZdi@lLMb>bXWjz*$%oCQ z0Dr&z;Q5vierszh^f_d;wUfYRxvj-#Oda#T<2gcFiB$wm11 zv{Ha3k&>CDRl87#a{91OyYLyHQE6%E;5HWxgwan;OIrbwYy}ud{f@{)fU9xCXZ`*C z*o1`nV0v`3cTiBiV$9ma8}!_pdu4BLAJ%mn4Q&7tDznS}+M~RiFs--fHrntDB@*>1 z(rJC0dFNj*ZM0nxJ}8yKa(*@c1q0H>qW#;||LM#BdRfp|gsJ1B z2g6pqBMs;FB@K7GBf5!U^qrobUsRS_6H=H}#u1bA3g!?c9%;G+4ra?vO`WU1bL{{OSi|7qF(OD}J2*~xfoD(Aq)I%2b%nA5f`C&s zVoI^(@I^M&;5J&CDx$=p-Q( zl9Q7Y16srQ{NLI0ONvpmK|%i)8A7jSJoWF}g5H^5p?4d|we9VRhMNQ>CBnG%Ch-H^ zPeU^Vh&CViXG#*1*TCftK&xumcIpErPX+=Mff)~Ov_yi;4A&h13yxb~k=PC0s4O6A zgD1QK0JJZU8YBz?`NV9{^%%NyCQChu$I#_lTQmh06e%G!&$n@egS8(1vs+zPY_us2 zM~hMs<`uvL(t<B%tiWO3=A^C zz)z+_;}M~EodM>XEXE+qwsOZ=n=(VQz7F8bQ{k}v$Ql48s5fu+j1=muo4tGY?h&KD zpZnqLjroNIk>KV4{A@sOtAH!|puuAceG`+33M&MmnC#;rmbCKB8FDRI$w+C` zW4>BBT4EGJL`;kgO>8IxPyWDP%%&q!KviW8B60U^)%!cL;sD0vA-l^~=bAw=L!(*# z=KFifY2trk5r&z#ih!t@R{|fhMO&UFB}@>I*h`di6=>yU%kOAsWfl}j!ShP2LzioR zZV|8tzm=60hMCQSy5!;RlQ#HTh7l+fAgb9Kib_fpmCx8^tbhKpGH3cFfxJ{8Aahtzy|9_B1(I!3e;kV+O^n(c59u^*M3}o4U88lC+ zl?q;fk(6xSw&4MZfgP+Er}#~{{B31QYU(m{W)z{}Q!bi$FLGq_$3&$Kg7g}iz`W9+ zpDEl2U5r6se33S4T8w#LD21#ol*0%y3#}Cy35hQD+!qSCiuX=n8Q<`f37?Ct9iYAP zyDiCkRsyX^3Sl64RiNtTIh?ry4W&t|7W{o~4GqxbaPRi;snj?YLenJ+=&cpN)e1ma z)hhGAT%^*mwAFrgb>;Or!J0;MyOim7$E!DBBU@acCGqe1{9lPhOTrKHU-8L}`8He_ zDXXFq-PhNrTdGp4E)w^``;XT1Linl_E8qr$|5}PD;E4J+gaHXvNgJTSSMxVMdfnP= z2uk>Wkj4Kz#f2;FYpvaz!&UYw4)tJ|&g3p}&(Mx;c1$D!Nmrs)!ozN&#zVS&A9fG8 zV!+B=u)Kw_MeiyVL3b=Y(>Wx9Lm8ZU)ZUGKNb>BQt65g58;aU^m>{@ z+0+AJ5pS`tE!W@~1D-T~+cmAFz;;nJjXVK&lLAAPGH7H8lviu4?0i~;&dPZ&5$x?- zIhOVt%DjcT3REJ4dn&wg!J#E2t@Bo7r(h|EG_TOa=1grgO~0p5!t*|}QA=xo(fH8= zZaOXC{mw{^JMZndAiM=x2Qyz6PX8F(lcBYad)@P64DoIgMQDg(5)IrP>fY|fDF11)T zHuP!9w3a$J^vjDt*yk;Re@~xq*W$f2xiz!GTj+L#Zx|?_n}+{6p%t9Sb!^^lhmofQ zy(j=Ok5wb9eM4759^qw=d_helAs6JB9l_q2 z&tsS*)X3QE^H4Ak=a{7(lMo*n9Q2fQ@_yDOD(x(;cheignxq~V{hHOIFUSP?vL;hG2NpL?Ob$9muuv%ua62A@AX84L{fpVNQvI0-%iRELY{tlQ9i9P zbs`hwi>`ZIc}oa=Dmdjb_aKAXn6hPa&;yxQS=JKapVi&qnT!dZUbl-e>uT?alJUX_ zXz60Pp8K99^}J0?q%Z%%RUpVMX?`+oO+^WUPwx_bjZq?%X5pOvpd3JV`Me&IjLkyNKXs2z@_({0NPV%mCnR z5iwVsRpeLX`>DN4*-Fk&J2X=-^9aM`=Wp{FwSLd1}o(7?||sz!^6kpYNs}%m;%AtHrDqY z7EpDAL!&6>IcU9*IJZO8_-*n2Y2DVaA8udIMnH>NR}=3zs%{yMvrrR3;)I&8S?V#n zOUkb8;z@kNFC;>;al*DLgf0G3EV~@_yYPut`%7Wrfc4zF?^DTBbc_h8&U~B#^4YCk z(NifR;RS`u`_7g8R*u+t>kmKiTPDTa+3_%QUMNIGMsD{S9bt=ToVN3eNWTkC6Sq04 z63doWz@Bv8wlprOO=;Bs_M z-$joEsl^X)qk_F}DHxLSraMYrI=Hwped39qtGd|fE5u~%cm~P$-L$zVHXrPWR zpS5*KPkLyyuqC*ZoxQ0U zw754&ClDQyIpBbQ5IDLusrZP>=)L9@qlW7d`JG}yPkzFK#1cbLYgl)uBbd6KrV`Nj zj799TFWcn(iD!IK!op)UGr0T*ry&i?xa1PgD2N*}6>q_p38IA0iK6K!^Aq_&T{j!rc)B`VRm^w7q+}_X=dYX7Z&3g_uy&e zAvQaWG=H6RuMQ2Hcb)K^>sH$&BsLqTHuL*J^VyOs+^xcX1qRRXMS|;ps=5B~sOC5Q z%LQF6PovC=yNvKcn9P#r=*I~dPPPx65+M{xjYEC~K8-AUaAjR)MXe#SA-8y4841P}R@LzV_e&%BM=suRgnK$A>ca9)0W(dk^mP77rHEFPk93@5B7$ zoy-PV?D5mx#xH(o6w7H+{OXIxADoAL?zQC?Jk=FYj`E_)Q{D*I2v4~%uN0!qdSMjE zL(^2k)ckhlTK1<2;>T7af#e+1B_4sJ0VDl7_-y zKJ>79MuBBc$#VHJ-c$(E%xp@9?(XTBBhD1z)H}M%8dgE4sdmCu2f+pd)jP|JVbyLC z8<;n7&gfvw4ahfG?Bt@UALY1h#rg{0qYB|R*vwI(Gdwom6K4^zmjV8{w&j1V${~%70!{c z`r#@Vt12XzoAvl7Dc(}GMsaCuaRisc^By*t)Fp)y`(RER$WG9Ru%5Cjw&#h6lxy)iT&PY(EP`#-l|(UEomh$M)Wq zSE0m~i#37!S!zL;Ne&P!v3-2G*~=ng!u%ud(`Ac!6TDdV4kSJUQk9}&Xlqk4TSePo z`EhESyxX%OVy$Uk2I`&(4Z#Ooa8U*-*l4I3{qK|?uOhO|+(uG;RjysNcst^G5KZ04R9$t2 zQiJ;uKm0VUn{?LW`Q6~>7ruch0u8Wz~_f=`?hvcU(C2QlZ9C& zCbo$QNx2(k?%Z}ilTU2$qS7BNQpxEnUt^0;+^tQo?|Me*A%QC`JrB)zN@{sS-IS#d z;AJ?-3DoC0tVp?W5Y3CP)UP;%bzkK1;6H`Vn+|Lqk^@L4EL`Xi^ck!99h`7AI z5yeZ0(`t8a(q|}}N6a2idJ&4`s<4+;o_uw`wDcH@xU)6%G8G!SN%&I=VM+DE*H^04 z)-0dRd0fcKXeB-rgD=zE|M)OAB*zbJo{)EA!2NJUT9`UkbH*GuZ?Za7tD)_}hJ5!& z4EDWy#Cmx?R>j83c{G%}ifT=ZzZMl;u0d=&gh-P0oQjwa|6tR>ZL3crIOTZnLu_E> zBZdb!iyRXpYTrb!C-i3_P!8t_62ATu!?DIq*S#^7HRNIV%W^G!y;7xQ$LJFVhga(% zj-e1cAvXD`s7x8NYSv;B4p_sX-#>+6t8uAwbtuO>gnyHfxsQXhxX!S)Kff7r`f9H) zJiXMe+P7BZy@aHgmqBIR7Hy`iv>%hB`_VKez**rkO_B8UbSfU6sqy(pKtu8hN-EEe zKCMi(Z%9v1ojnfF(-jhC{Y1IK;jC!H0J$61&TV!DHAvfvY-jb^_F#K2_x>kcl7W3vZ)Y+f!T#0;J&CQo8!tz7+ zo)|owAeJ^th$SoQbQzX@6SwXNFYNk&{KtnOWAeN&ma*Nb30F4rBfs3CmA`6XRqo|y zb`fc@gUMz$yQKkEsjq*0X9vVr#)upVq=T}VxwO>o_^+^fTLv#w7`_}=LwAr0qznB&0J zey_;o{&Xsk;hpb+2tTKKvraWa!#NWn;1OjVj=F6Sf#b|2wWCv{_sA@`q%Y>jyisZ}|PZ7=% zb)-VIa;@KA`ty;nbDm9>=RTWG>}Z+U{Ka(9ye$LwJ)`^J32d-(3b`sqAQY@x&8sdk z8)rF#PAJlyIy(dn#{Gv6mzq%DMgNU`sbvZAo`JB7|&d8 zf|o3L>ENKP38(ljcmy3OOvrg}#RyuCAma+}F9Zh47^J=$8CeUls5A+y{foT)DHmd# zZf{%1GQLfo(;Gh|Zt7N)&VUsH_qZvCO zES!>wL8ikKoT08`_o@Eg%HZ*;=EchXAxLwem6`r;TNL#4G7HfU)0e4zJt*WqqlU`JWZcJzc|*x8AC;Plv_WQy#R#>#^g&LE zn#(tLKDpj?zJ8F+{8C2CC~?^M!=_cOaa4T?jW8pPYEmLMjXl?X{Y99?$Edh3Cmly_tX5R3^85Zyu#M-O2Q@zQ8rA|Bg==dBZ53;kb(byX(p0i|TmZQF3 zzP~`Ja^8iP#$x&m`vGMGOZ^I3B4Ba-c@YH0ZE?tYM!tW48616^!@CTM#!GEldq1-0+vku~vG@WfitHO#J>nv}`qfBH+g z%v^!ZK!iF#^ezJvte6?2zDoVTcUE zYH>{bkh<7|ih+u~S9vL^ufQG} zgMbNf`x^BJG*TN6yuP%#7z77v-2I>o}5^LV;r=e~M_ z2*SFSw&{aQul-RWUn3U|ikLtz9~8*J9!-NGBuJMgv8o@j4G;xL!QnSV& zxoVX%psljvnAR>_f_;$%Qh5)W{l>ta6XfD=g??_QtyXoe{EI{CFwBm6oh}~waO*<; z@uvfW0o|ow{&10=D6sF6)G8%CAR-%pBXSXoK<`T+YSMV;6$;Rw3(Fjx#)9$y5wIaG zg^8(TP*{RjZW&I#C9lwQAKmL~&+Z>K3{KI%kg%%t@M|Q1E%-JER?U^`es*l!o8;=~ zr}fah8$9vg{+&Btk)t}}aN36%WbGiOkgu$){Osp90B`StT-pQ#gQ(DShW#$l?|f7X zDsATTT9n1M$?bM1-MT7L8K2dVak^6ohc*fA z%Rt=@0`y*^FnZPQPKeQPc8vm5d!T%*KR%hhpn-pP#c{5J&PxWCn@a_Ah9b-^TJEua zxLMe5a%?;A@T54L?w_CiJlVv^Hz+mkQd2#Sr(0Ud%@**|Szg;nPlc9r=0L!y24 zse3MM_s2WvGuCJ*dJ6^ywma!rO)abR^RP44W+LJiL~)J8 zDga`8OM4&w-|v`wq**Rw#q?s8fMGLikKItF9a4*4nD@?CGMXtK2Yb{j=f>tgaplv;FfZ!iLd zE$pS8d>`9NAW+-L=;#h?{9EI!ou>;R2bL2;_p63&s0N6VdV1>mX^ad_NTu37mn0L~ zWCZo(Ga(2m)L}JPl=X9@v^|r$M2oLUPK*zH9vi_E(5;(a(FK(boW4ao)$Zc#z~!_K zIY}rh$(@R-oZi7b+^d@?3t*t>MNZ3YX)}X94uUaNUM5Z9o zm4f_S3g>9&fB!}_q>BgQXI*6+xKzR4hvn6rm4g}FHC;*P-hBF?)u-r0YP_~tv8~aZ zr!Inusd)Zpj#-Wrh;bd&OuxZau7=&GX*oF^bHlEn$}WYoMZyqUdcngGaguS-b{9r2Vx~==j*9D_%V$a}cE!l@So| z3vM>x5I-&#KkVjR{>2ZQATMR`sv}E2dl$5RBVKOE5ujl;8-EZxFV45Ut?C@?YquYa z-Gvw}g$uq1$AebjgvKDq=1GM?TL9`)=)^j&WTrE@9$MDIDbXy&{P+l}Ycyimi|x9x zde1C@|7p*Qlk)Ir8u%vi0fL4r#HcjMguGPIh!sHN>F0j}J(e&%$f&bc|3eFK_<_U- zAffX@l)>)r5J_W1DbH?`hK&2%e6jtt&~Z#?$lM5@j%o&1W`WdL!S{J)Mm#1dzxw(e zf68?XfZ}%k%X}R%7Im2**KRP9&jznGLKo(&q$goFtGG z5|UC;QK44&&7LE1z1Sv<$~wSHq&oFqJYOM(NBH?Py6AoE2lI|!OG;eli&&?=bglWc z{(QE%VpUoMyTJ1i%%y$zDH(Kl5kd5%!}R+0A=35*zZ$fbN15;e5Zq~1Z#eZF7GG6e%$Us}tuue1#>${d^Uc|%n>qnA3R;IolR+RaR??S_=s1SnA`(#Oww+*J)iE9vxb<4ibN91|Ct)4piD278b^#4qkEo~NEEEiS1W^*$L7-(=d z>Ugd(5D_t?W;R+|r|R9=DNZ=^1Bt#T9GfNMvH&Twn#+1AA}=?>ZOmva>R|J^d!A5@ zI&9a;CW0gA>8D<8c^y`)$lF`Yjg)MEz1K*Xi~2^lCs!O3dM~ z*cAr~1<5Txna$sRYAEhCGq&zE-Gp`n-Nj#D2&Cbw%46Hw|H{cO=Gxd;k;(J(_WsEf z8ve3_G(zo%q{p#r9n4{;?x2=-!wF=ZG>D+Q5{{^oTiIv+NnAUsh*K=AoUIN$RhQR2 zZMtGn_+7K3x+NgZ(w^vELwrJDb=d>WgvzVM)_QPaEv>u+O&d8Uikyi>#M=b!hgw}w z)Wd1 z?(S=E*c9PN@9VTw7#2#fpKzew2GN{$@m{zhucHj&eLD3U7I*%D9-tU1Y(TJ%zkJA* zN(`m5(z#}jZ@+5olDCt1SX7+WX71H2U_Hk1m9i^@KkaP=+(nC6Of>-A#b+;#KDnN^ z>?!)2_O>Dnceo=7b&B4dD~SYjaFXc}9Iqz4fFqurv>r$8KMS|Ft<7uq6p(370mLG& zXxp{Q=?lPTjZs@5z%%1?$9$px`_p{H1{dl?~VrC zo8R`=3nft|N=s37;dXs;W7p|XmNPIPgo)6r#nRMgH^2~WwH(s2;Jg!ji>koEXF%JIK16s;0 z<*O6|dZb-d9IhI)&y|B~T7A8}Nxteww1y46?2ziGaJ(g3EE;qt2Axee{XBe$m|1Eq z?Fg4JEbK$FK>BypOTrfD5vA!eXFZ>xoq&9h)6pPzRzs-{vlRW-7hm{Ml?%~ zb-Awh(F{9<+@yEd`Y-88YhK;mdpDhbJqpa#NbIGbcgm-frUzHh88Wl41d{JpjOV_9 zebxOedxw~aQB;rA)?S-yKeFJ7+hd1eTT90^}&dt$(08w+GIqs zA!cuGM=@4uPft|#j676HEzB@XGuDT@$a=kxG$PUn^zZM!zVYG84Kgm z>bg3fop+Pf;HO%10!lS(45qdYb4-3CJN&TGdiNW}?)|x&5R>3_eP*OER7_M?q)1J= zwGDOtr>-8lI~Co)#$@3qlow4Xuu(EEUUo2P@3F6Z8Yc4~Ad>ymYlP;}_qOKBb&TvQ zxw(lgcorozS5YXhKY>8g3PWqbzEKc8EsO0D`CL58-Vya7yo~R5PodfE9Z!OhV)9Vh z{vH(H2T=+4v;I7;zDh|%beF%ACPegQ$NlgQ{fHaRV}?c+KDg!cBLxvlc)G$Cz1OI} zbrmaCP*4y$Sr%S|QEw%4MjcdgCe!F)lAh8k-#sRVTVFS}k5WU`POBVMc0w_AvAa_5 zY$x6U|7j1`4s-csTw&2as45>v1k2l3`QBU*{oQ5TpUp*siNAh z`_~YQGuna1(XRTP<2cKA?;i^DB42iJGMhB6?WfY9Igh`4Gj{oH(Nn6gJPCTOdVp|+ z@vqVMt8LbZY&rZg8xiUxve6^m6phJLkrzyxPDmQ{@k@}W3wHcOMlwYyZcC4nESMSw zo00bD8a?A{$wBQ5`UwAZcDn60aiV3CDOB{v?xsLhw68rF?T<#cH#FZJ#02i`X=P`; zSdE0eht=})786a*bu^_doYRzy)7`!H_V}z|2meExz3=M$h_;u>1t6c7m6L0P|HMJL(t18JFKFq?__D#3gYWOI z=p-ZyRSC>roI>V!X8=rhs3$K zj))4liznAlZ(oF#6gpchsd{Zf{&>OIzc-ggA=E zzn_s;&*NO0&DAGXSG$#-%6{e2hPZ(!ZZhn=;PF+gs>4*zw5PXktqO?=5r_oxtiz2=l?6 zQ$yF4l|S4vLDtI{Ra?KHudiorkrxxk-O_S`?$sxhoU(3j*RL+74yBzEK?_J|K2hOw{9++qB%r_k}i&0XVg z-|YA3fu-*{8v1!@JDz(PrF%A|PfL$YPm%R}o3P8|=Q+2E zI0+V3*NEHsm0S$xKV)MnYs}H(k6p;kXozH$+3YPj?hz7ZO7Df?-VVHxl|4r|yw8Xg zbgO@0;I*vmJ#}^U%=osFuTS(*RqNfknJFksjV(;(F3z1FbA3qov3=qE*hLjD*|33} zA$N2=vHL7jZG`T}nVu&q`I%r~i|A1A-_dZ+WvWtBKfz(XRA&w&$(MeOKiko{&5zDC z2vmme;yT=4pAUZuGq<~qQ}&MQp+QZp34-+NMqXUc3AO_x>ihiup%1--^d%I$>ZG=B z_ECYpLMx3_K^SlTM${)ptCVfYU?da*FgDx%xyYL4M{&gp%TNq+c6yA5YI{`Vk~Q@V z-;4QmilE+4MPWR{o3OrX=*3N&YAHj+ zz;JXlbD+b-^2#K8`Acrn@$g{^xzjUUIn2)f&~>5Kh(7nYh*x>sH8vNlhhxQ zU9D8D+S+UNv?!VzqN~fPZ0F+nE2^WcJpb|I-&tW3v}C(Rnvp=!@RQ*o573Yq=nFcgRrVJ)p4D4Xy}YfrSf z=*IpwDN-5CncFF|xcV-Pw1+kh`S@6rsCcA=4#b-3rar86q3`O?{hmu((@artMylCu z7SfNl8sR0MRy}&W&=P`<@ASi6ctsFl2=6=xf0V;dnQ&wp`B8q#iJYZ|-r-tOf6k-4 z+ArCLy}Wb%7X3MFV&dq+*&1+1T)qt&&GP-IZojav$`qlh{Y*Olr+WD#GRJjzMj*o2>n=;u?LM||jv|bi;2=w{K{K5I*!%bz?1lEjXP7r39|A$xbIy;k^YQS4rrgNnrfMPK3?VM~+ zo4+Ovi9EiXqAukh7NWzmLXYaB&#t`?s1E+Gl?gX@Ru$Jix6tbbSrB;L~QzFJ@+DCe3oDKLgTk zmr|1D9LAaU;<-k|NTn<0*wIt^)BYJzUEhlp=er{d3H~X0o|LpaJ45H%)oQpm3aM@f zYFm;hCBy}Jm`Id#cSqLIf|+>?3)NoAsWsa@qG2y1bIWl|Rv&r?PA9|9a)--(Au?+y zA2P2}t&*=bHZ$t^;nBl=Sa+iREt?}{bx&WjeEun9cUO{4ZY=V!Lw>+!>MNeE%5ISgXl^AF80~R}t0iikkKO9$GyeEH( z`&)dWtJ!VZ8TXDFI_=TX7pNtDSDI1a+KT|;c!0PEO_pHG6l1BdQCAQPF49XCQDb_G zF%zAjXBWh{xItowoyTI#ka|4$e(QeiYmErkO4kr&jM69lE?l@FL~WC1a0WQufk@*9 zF`xJMx-{Ra3>=2Xn5r+GbR|nx%F%}5pEeLkGNnn0c%Uk;7p3AY@ePcTb;gjm=B-;L`s3msPHjDYE%xp5I>RnMPr7)gHTPB zW*GQA_CN7UvN;8QcH$L=2d+ArSYSzr%SJa-IPrcqGUVg?f?81a*Nz^n2x>(>sm(YsBN@MQ!svm}f> zSepth5*Z-C|8Vu!|M_tVdUUs~6080!aEe$ned-0}_5AXwOkbDgFkq-!;~};r^5f;g za%$B4AvG9eN%TPyE+D#oE$IfqwcEJT3|GsSODOo99A7Pe;trwcJ)}2pzWB%X|3-ar znHc~P_)46w-1RX8<00dh5_}#ju7c)o7#V?5ortp*DUDm8EXzwb^!<-}_u^ea1-I2b zI?Fwyt(nFfU|%y(FYjQQ>lI*m$*=;c8hFxYK46KVaK-w%iusLR3WbQ zF}PZE0IgT#aTCrh!aMO1F11Qt6}M9Q$ef+AUB7u2y2|a?6xh+zzTa|i(u{U4fBiZO zCoE9v!-K#$z1rGZ_jUV}S(un-2FEMWww1(v!)xX6T9;QTPioYFEoNgmxj@TMi>obb9nhv!Ycf-#?y;sso&GUl`i= z&CY&^81bI(OX&kdu|~jd>45ql!-EG>d%JK4CbuB+gNGHbZHinHo{VGDpX2}a37EZu z&i$GjU#Nu`aZ;Lm45SM2tiCOcR=t>umk|E|$rRMCzP?OI&}{DjNL?Sar`S}FGiiV4 z^5cX>mIU?Gc0M+s;9SAYCFreU%&%REF{ z!PKMR)7{Yz?S+{I5oR%%r=CM~ImGv zG3CI2w5(bmEI-FDA>PVVLt0Tsu^gbnLi)|*@5oJXBdS$uEY15$H@=+TSly*ew`&g$ z>7T^$X1p|H&02jAeI}DXK}gX&I7aqxn5+%}c)(xKS=pX3?+dQ`n4J+6*!<-los6+D zJv`iO>43s)Zb|QqQ~e1!2?_=V_&MOCX~kn1-36LtN2rBv)J6Z6)sYOvV73AQXn?Rv}2E#o~(v;Gq2Xerdd(j z&HMZQ5JAjHx7@0Vu9S;lbdL>KsW0xa_xqMM>oMba&X2rSoM$5_x~gb%%;E#v9a7;L zU0nFc$;rEu1Y)2*Zx7ROn#mO~hM(*_gRx$J;Ry{lC=K$D#+%WFH<1wuSCGJ#_Nue9 zGX#W*;p^91&@iXad2$;!4ucGPCs=mHR;r)O zg{LF()?*_+sDU1=538#dkp2DJ4&i;tQMa*hlWP63G9X9xo%&on_uMZ@Nl#0AJ9#?) z$k510VU-k~tZ^pq=R1QC@hv~)S-ESLymlqs(#H}KKmQu_C)wY~F=1$YuGA-;>1Ssn z_txXRD((gMRU~atYS4zAos+}B#1+$yQ80FT)aPXc<8iB_6%o)S6bn!cFuh8>a0dN@ z;lp-di#u>@MPIxy7+1n?U=!VH|C={IYa4>vywXd;6a1kAtx?IdXJl1>g$lWhMZ@hR z_Ef(g^lE}{EW4Stb!ILTk2#m%K1?~H*o>HF_KUnn<=40h3){KM?dD`u^0oLfR)PY% z4Yy{3H>qU1f5@a#Axl3DaKDQP6&<~16&?zkoa?U~9ZcvWvROrE^q?5LA)x~q961AR zZG#7C57_TChd#S^TMufb?6c4j5ji_s1{fM#cvA<8W9A1$cl4~y zn>@S7|Kgil&}8PJWYbw;Q*qel*121mn!bXnGDCd-F6gJw?d@$|$5pj%XGKNDf0bZE z&~y9<(lCcaiVECT&pr*+-$=-}nSSslHoR=@PzY&lWA#gVZHt3kdW?i&2BeuJp_~%Q zY#>%v5zsk}sHW_H1dH-PP5Bu%se}v`lAFvun+%lBZpICDZA&D<-OlS)ULNw@J1=7*bNY%Z=MI$lhZp#a$$_Ro-kq6%fFHfQ%mB8t!(^Z??e<)AxQ4qYgpxd*3C}3 zE;8Jf#KYOggLCS6ZrQ(}?y$@dX}j@?wW3~4Wv9 zA5MDWjPe#yP0Fe~xKEbcC>e{b$5*&>{5SSbLZu+ZHw8B1uH#=+ALOQKylD671AK`w zafA==fhCDt(}$W?YFQb9H><~zYvGhb59p)T-3e36?p`g`T6g*`>ryyf*b0*R6Kt?9*h`~rZU zisipcZ0@!uLFl#S$?^1s?Y)|7vvz*ViUEErvTdWJ^iA%|gJ z^v9Bt*L!+;PG^Yf?@?2~g|c%TKxiRt4y2raJU(_s)Smzetb6jbXL2(~_beFNlh{5D z5aGt*K2O3a{`~Wa{BN1SXT%GJ4d9~TJJ61t8+CPFYar2Hvzu0*vMZ{pKnZBs!L#EP zmA8i^LLw}QPJxs7LQk?#0wD55z#nU0V;U-|rREjC==*3bm)^1L>6(_x=;W1;vbDDt z*P7yWRHbwg8`>Sa(A?w3PA9A?C2q)pF!;FAdWf`~<4)h!ojdO+R#v`vw%b40X*8Zb z-_h3EMcz5?Xsob2+#fa_Hh$A`8XGxwMz4qbue8oG{Nw&c00ARjJ;`YE+|8gsIXZ-& zK}C48Sd8*;<C4j?OfreLv(v3{JH_3aKLsh&_P_M^n0s1MjA0`3gcKok zaf%|hb{5*gvE-K(|ECuqqWEUqpZ$vV^xv71;?EJ~o4`Q7PEi5DDI-LwDf@a`t;uUtq6-hL=K!M{dbD=MO2dcAdx3<2Qe) zKPhL>yL_+Cn)psI;bLq^bkn}d=3p=G8i{TJ&h|sKgXxXuZ|puTIluwh>nkAfNVywH zqCgvcSw_jg>w-w#pdw%-Gc-fQu;y2vKXUJizj`f6rVTO@I3?5~JTa}oMdn1kkG&Tw zhDJuw%UG5pke;T>^7Z*?5P^MLtXBfNkJr_a4)MM?O?c6+SLvAkA8fL_2M&_WktvE{ zEgX@`;j-(I9&F}T-Bst1J*lO~-kOe5;3juFudNXM(|;WG$QU=W9}$y75|J3)v8kVF zVCbCsM19NIVy<|=ZPmtrzA+_E&fDJVJR^TSljGAb z`W$jC+cuEfJ!a+Gt=Y**Ez!7eBa5ycr}0O1b>iQnb7|Ab8Ig%w4c|lVs_B$Jn6Fe; zH{3`RLaK?2l<#`~FXa)ZC?$?7W0%20>|KY7#voMM?OrTU+VK!aridsvHgjsh`@)5zopB+4`J`E|2SaI7 zv1B|^(vP-zR+9cQL3AOe3rX(si6MhJvZ0dxTLGy*K9rO<9;9}$;Mjoy5;4j6BC}xBPcJEU-HeE56i9!?vx#R zSZd)6+46Sx4R0?{t&h2K8^)Yc5XRPj`4DDe@P*K zVKyX%TGJ4b+gS7`0)g1asdYTqPvvw(^a5ndryvn-szFnks~jA*az_|I1Fj6`PhZW-umq32Ns`yAU*HfNQ7dI5V+|RF()2_W=AMR1JGU9j#=nOZk6%+*Vt?SIGKnYCx z>LOvyD|}JQzaw1AU8W9p@@-ASj67nTKTaCjEc$!}$NCu4{B##iua!C_ENkcrC;J`izirl)4 z0;y(WQYbanzU5$|(W8)gqYpWB5FWliVsOzxL2r(h2sb8kn$}~!sn&TGMpvd*yo$0*bw=J0OB!4Wf^Wf|v zN}*CiZ|z@gzGKi$->X$YO02KM4ac4zWU>q({9KmvNk&rrkS==)NoJ8q+Wb<|GJKrR z4DNXfpW3uEN=Bhulis+UsDk^xt7V`qf>XronzfOd7uFUf4w~o+iE z<-krGauE@adf{r#a!edH$<|q{;M(noft++DE$oti5bRpd?{R^1P~h6wR>J ziyTaVkE4B7$*Y~$sW-8I4iag6!Hq2aiYPevDOLu)Z;0vN{0Uh7Je}{6|J_89CEq)kvt0Eg;TX0G#C`s04XJf_v zWgLzoW@XNP|D_Lf5-N z!$g(Qu^$^Psm&#s)dEIcWDgc2r~T?b{^tW{B`aLzZK>nH6;h%)agqR(`!f7&rbK7eEMH8(;gP) z=K+V(3?IK5q#9n-zA;bi$SMeHH@ws`RB8HU*_>lHdrY82?fR-OU;8keB8+eMxhi9h z(WeFsCRG&+v8dyw7;|$>+LH(yJ4m@8sfwY5|NYxu`Aj{iB%j4W3lcVTeu#VyE=fgD zdv(zK(t5^ml2a~D??Visy7NAp+yVF80@B{GYe%z*%?;V%vwtxk*Gg=3-IPsE zG)fm`ZcuSt79zwAWn8Ooy|^HzE`Kmoh{!#(4O=MuRd={8s2A7F*@tLOs;hS9_ENRC zG8{WOrpQODdt-~DOi4VZ5Pd-O)*>@%km86%D5RTqNXH}3??jP5X?(I0|K!)jqklbE zFGUMSyy&T#uD0lfj1Gkj7LUcUantwvl-rEeU$CJG!06r4&OV;Ny7GGLnjzE#$>}eH zBJP5z(zQd6#W_2fEC$l&&n>;aJuy;#_Q|D&+{C;|r}#!T+|usg-G0oTO7vTaQPf%Q zC!fa!jk=0nu@>nhZ8_8NY&?i`o=bm1oAG-4N^df}e#JM1R(BhT$+gm{^JlAoFH&H@pON*}Lw4rN z&JGCYUOLnTUkE+2&<S^UGStqsI)4ej*NKL)Dbqw~E=2D}4z}wnZ{$aLo=M`mqLkgPOzgESMk2s4>Nk(`} z>P40cp1rXn2rnM8Gz#J+ixwE5lNd|AY1=&No3Uohq4U44Wl(*13D>-5tJ5ydc*EcK zQ`vCK-!M*kH_=&K)}ZTjf{{j*%qEEe*FMSiRVH|rI`pz4mC~*^O$~J>c*Jq zwh7&iHsJ{)^(u?p9HM^Bff|yM_WWN-aeBz2T=0FNSZ88m!Fs}|ZN;UNh@zw9EJI*7Q?2uhTs zT=$WTRbJ4cAn{s$)Mu+`%07AYiq6`Cbo(7@qjHAGZfor=mTVSEE%hxco^RRqlHr+U zFQfIMN>i`iRLMGRPix`mJ_qqSyQ9^Q#`FbCV1Ul znpbY)AEOjC7<~Dx9DrJ44ce*H+{09TTgp>B*T*9K7D3=@%B;!#o0o{l|u#5?C-TgVfwK) zBlm(Aw_TH%_g06rDM>_X+pt4Odd`!-j~aKvDknGg>54k@cGd zH;FfYSnt~iDDk@`ADzm4Tg{qESsxaYsB`h7Ua(|MK4C0W4R_Pn!Vkql=^H6K{Qh08 z&G9(mTH$)?_2?L84xzcYeWBl!$QN7d{XMS^tlBvWmTA&=6T5F*t&>;Dw-NwjgFQrUwr%UU! z_R}*M0AB&HEHw=%jRIC1d z5@k&FDneWmzr_}BL2A#X zS)2M8|2J&bNAJydeFi9H{!#9&I3?gO)|MP2j^~-*2McR!5oWRItRFj}EM2Q>+dp!v zYzubAMz3#B2$)fH`)|i2&!r~f?Nr9=^{QQNk+|f&3H^rWpZ$E4V|W=KDJxGAyLO|8 z+8M`Me*O@{$sZh#S*c~Qz9{QS8F!zM{9R2w@onYfs(%d$?>QsB?<2igE3#hJ6se3K zOM9!?KM_D~W%9LY5Z8X)-kQ|C`Ai{^qxrrQL~PNfcTV%U$=(V8BeR%8nMA z=H>PrK=~MzIx7bWBqJ}Qt7_A&?(OVADQ;$kGe*bryh=Nl8GEWPv2rl^Y*0mT61|SH zI%$QYLHk)_PK34I^yI0B;c1V^MRx;vys6tnACvEr zcx^RkT5J-v<^TK|d6i6DTwa#hdzk@V;)@{|oX8^CFw#Nx&@SNha3Zo!M%>Zm7fh(spdcTn0_gneuCnCJPXXV9$wp_`aKx_Ik?6F_J4WGQQmSb0dVN&IOLKGSKsgRCqj zAfC$ZIs8h#5;fZg4{iwk{nHfgx>JcuTv_z5Z}6@`-K#WE8L_$bKNz94EKg|iLsQ3%wh ze82A>Mm~2=m!YA!w7FDZ2xmnsuzHBY6jqoupdV!)Z>LOQrR&F=iaGUB=&5nzJaEejK_4=`C(|5mP7R(wR1=4Ysy-7MSRkA=|Uj^ALv#8vFB@fKwL|khvUa4>-G3#CYxf-DyVK z+L29Fb>|PK(-|(zZZIOt`DXwzRlOd$GCfW{>Y1(a;$FS5*Xa@S7qYnCpPl{hKgIq} zc&5Ls%raWN$9GM8qczk`XyQ({(eZzq>nCnaL>j*EIiTKSjruRT>~&Qq|KN(5l2W0U z@_EpsXVBg$Id)3utxxKXA^cq+n`^XTg~%|%rs_2+Y=J!E)7FkObwa>kH zB(2}`j^whgAK0y?LJ&UtQYg9j2P0>GjyA6XdqJAo+|S3S1S#YZ0sKyN!^;a_?=!Mk z*I^LhCQM$_BX&&GwFA?J6JW5&%Ue+L%;mLR`H1}WoC&^HY0{QA3mR&i`z-IURyR0w zuWbEz7~-ucdF5Di^G>twB&9Jv;7R9GuvL1&vt4sLXKKE7MhW%c=k=i?D;sxHhOui* zTEqi%bpI}!AwJ$BF-OM^bLM9tDsbvmvN~A&l@c7I?LABVD8BVtIx{5Nx2{w?XD{lV zI|+pIw@~ljy2WNK#q1q!*|2auf?lkKpy1`%=!yH|qJTFCM{>3H_da62yr>l{ckGF% zGR9MW5fyZq6%jZ38b|y!^rbQZuYYbOalZ@OEZYa=!v1_`8nKmUIPO{T$7c=a-`=_q zY<|YfydWQM(oXjQ(&rNYrO&PUn??^dZ`){k zQB)*)NE(hUuD6;JLxP3QKHK+7|CHis6Y}X8bZ>1^?BkhGcCT*muF9Le=#bWY9Tb&S zf6)8{J4r(yY)avx-ZxQA`Rb!nB5Wi-C54PE{`jxqR~O-8)1sEkdES|({GQxQOT8jJ znOsbUEV^p8(-iXZ%r-Ol19T`Xb^3|(;DzxF0_7N41aX_9y-@3n(dLTl}%n_5^W<&4%k zr*E=m4DI54TWh!6w>Hj$KEz{E&!S)Sg=FgA8m<_Z{WCZJCR5dG#|^1CJgckg<(JD< zqmiefR+2W+%YpFr`@1&!!#RVfbH?HZwBE%O|P;s&svcm#Z+s3 zq1-=0@6%+98P#Utak`^Kp#1cB(cDe)Ovh0FN>@a_7gs-sQaa(C=pvOARxoDHpBE+z zL2rY+J|Bd8I~qpV_Gu}<2Ltj_eHTeiI606j51Q`_yZ6$*9dxxKG7mvHc&tdu zEN15yNegNA4J>sm*NS=~ZwMX=$5Z!k#ump#S4Acc2Q%{LZkY99g+`rOJQW}8@K}(xI zw##`GP$Omodj~tP@^XpK&N9wSt&Kv@X00VW3AkUsJ>rm5q$Jy-clMXNgD}8At^+e? z`T#ATt5wDEX8`eX(m~D`7qYTq=_vvuLDH)@0bIS08*2VARTF#r>RpJ-ap(W2M;Us6{AF=U|1GEp^( z$-A4VB8Je#*Em)-TM3bgV;+-+k1^Tz#Z3hn*7>Skrud*)ChJ~lLg=yUH*3madpu>X zD5!BF!aVU`&tJb@?4P^#w7)$$3cT&FI9KQF!(TG&Zww)bz9DG%9emx(JB-<^!qw$6 zifO;FZB$1)s?;>e{*d9{ z`%M{jt%c(Sw7nztGR_fF&6f(Dq}!7ntMFp?UV^8RuYuI_ZVZ%%NiJgpf|QVOE~`m! z+G*rgwV#=gk79pAf_(LC99I63hYJ`UYrR86m=Ran`m3F~z^V(*HEd#ypG-)l8abC34+|4t!0rYfN$^c$zVAMC}@9vdcGXbDK<#MRIg zi%_7?xHrFB;&U?9;Dh0|MDpKJ2#p)Zwt6H!_X7og!W{3iImJnC+wgku>xZVO>Ot?u?C!)>b~OjK^P_^JlHtmp8kv9NYm_ZawEy`&90sAZ0h#spxYU#v z-odw-C=W}P#PYE6@NBkom6+!PV(#n|ieziqHwcvng#`V#;_PsF`~POjgkPx76QzuG zqfO>h3+U-+AN^$bpU&(Lv@r?cE<45F6kAE-u4*uW?V%jeWXVE9ruSb4^L4lLRNk8~ zFD?BA>5&y+R!6(34~;jM(k^vvtNb%Fv!AAS&6sq`uh9R5gT}{M^Cy2fa>`qm z*9>ugL;o{MhQunGKe4z=c7w*bP)lf5DcGCv3z6J zkL9sm(HNKYGpMX%9b?`^`lg|b{#&9oCpBDl+f-nf2JjG2xVgDuC~`B*+MW7Jkwns5 z^<<;YK4KZF6WVS&48uGj5^H;{Z$fK?2c`NQ`0m?_J!|-f+|r<2|~7UrL9L4=&0x*i<_0~+x__a1`UD3WYAYu zH1=nwo+7#@BZHNIBLuKSbex<~PbocqZzCFfihw7fv#Sd@p%QvQ*I(8Qdl zv1ENdQF#93AV~@WM*Q@Wk|+SV*n$aBo4@MD$jvwM8NMp9POl(NBeCWCJ=A?|0INio!=UKs<#YiH6&)uj{?5=w*)ui3T;03{Oh^15iQ#Xu}hq^TSu^fvrY8wwLwSb(aP4j?=L?-i0- zg%vrX&xLxyeMNI}hF;_d0~laR=E~e$U6I(Z45%_#J}9ZG5<#zRQ_6!6;#W)C;Y@;# zWfEZQd4bj1@it`?5->lpTXjX-r0^{<&c&Ahtv=GqhuUy;^k|v9pL}=C&k};0tvtKuOTDX+*>4PKUvP zZep}+$biL6&Y7H$K*}eq0t>*v5)*=kN%%e{=F$8LLR8y-{~8#0JGe3jR9EtQFMq|u zgTOw|0;V_n>~x;qEQT<&+*HASww<~oRw(W}jG~^tRJ^~&06369o+zi;`eS5NjFb|H z%IMu>pwa*h(oh*-2j(jVs|wPTKI6MyK$MJ3C1ixyYjGMVZ-w@k4eH3kM!F$5NE0x{^XpFbPC&KJC{6`Bsv-MxF)#KdF@;LwqN|NUzR zv^iU!3f%q5%m;rB4YdPli=4SRBMh%j#_Alv8{}$NM}trSvlAb1`?>&MZPb39q0!;^ zhUZfwql~!}Ktze}<;HsZGF}FH0SNv{i$8hU#Zrxx&?6}=jo4gHKx-(hSqBcQ(5C5o ztgI2s%Vt2r+SuVNz#(yT2FOfh1-8SlV}OEJ&d7)k!O=Qbg>Rek=FJ;h;MKJ2WXM!f zQ$sviH}I!?*grQkySwCZu%zfUvhDP_X}Yi`e_cS@5U7`OHOhi%Wup<_HqA^z5ZFev z%?9zQ)^E@~Q_^QrE4&vQ8HwB7-hRW#$mlvJCnvSnWQDcvznbLaSIU!!{A@3HP0z#?a8vDFmU}u(e{wjeV^24UpPS^#JB!Ghy=7XcJxJ@QF>w2iivHZ9x^H=zCXZEu9xR;goXxJJT1M zr`YRJy!LW*TM~0l6#Ri_YY-L0?k(WjyKMqS4mJ-L7wSS!0ud7v6BYoktwiqZo>+k> z#Zl>a9?e}otH9)uf?;lECVeF!i%lUE*^fBs?-=Op0F3|g#}050m+L)w@?;YTz=J~( z6q1Pd(K9eGFwCv47EpWs9Ipm|YvlWYVW|;dSf-|%0-{c?(=d|>I5Hgqt^w-XM!ikw z6%9Ipq~>}FkUdh(Q*5lRVgYexN28+Wc9gVR1jk%gBB$$nOspf#evBO!S7FUru^*dDe;vK3BskFoF$i4I_ojEsyt z=M|8C+NgIsrLPTm1(+g4fLch)wuPWOMMQ*SALn8d2Ra)O!~aYi<*&O40g|d2_?cV= zcIr3%Sf>t7j#4g;Qi5DiIMM-;1ffIkITW;T;vNhGk8nqg%g!NeEd>c9GxHpN${{M? z#d85&Gv&caRF>)21MNd+0PQm*tt1$C;=lvuDT?9Y`Ft9{oSzBh?A1G1AHRADs3imf zdy|s3w*0GCUrbLyzh9sFqpB<4Qc4qcHY;*YO`qg|2S^`U(D7(7Stn$do0k{X+p8eF z`vs>(a09;2vsQNNLg;ubKK?F1PQ0;}(ZYX|vNlxo7XG5k+|kKt*0DNjkB}zpjgu26 z08&BX4mg@${mE87Jo6mj`@UhA>)Uv5qh<#i1l!wlG96LCOs%a=0*e&8wHd3dco&xu zhU(`5w`mS&IGQ6J4cS0@T=V1+;-OGLIB^Fk&$t@ zdYYw!bgaypnnX}Z+fgZ}?|=_05%A-J11MYrL9>L`)z!7TARdIrYOH5Tr<) zWOxQ9VE*hOs@sGX>;Y$bO|Df?v0(!0QRE&o8EpUd_p8|w@;+wzfS+UV_)Lv&Rx*c6zX@!OF zgM)7>@Xg%;Y&k;v2_VjpKNtlx8f5)mkGW5(iyIq*S2uSA52ydvFT58?%g`8|@%gj& z^767_-K{t}cVSAf98(`(C^Zfu7*T2#-~R$f8lJYUbFK6l?XqbHtJw zGTpxMO)-=P02|BSdFX%eNbx(NyWHQR-rin4pog-77`4OQoWrlBdc)P#)fYJQg7_|= zoAIWRp&=@OJLpQbI!ty*fipzq{6|?8&EC$=H{p?WxLdO4qOX8qZkb=Bq%%ojpJ()d7U$PO5JiGTuw=x)}ocI*e64AShf zlpeziLvo_NI_t*Se>j-frWZiF-m_nDN5I8b1;tRlm{;*1t3o+`i z5+(})7YzTQgIzf^QwGg$_3^&NuMSR1AYP3-z9`f$M+i4|I29fj=O5UI#Ev?Ff?! z45+-$fI5N-oD6RPk*_g?<@8TCm(!FC4$Z_|Ko$o|5q?{ z6%AAU-@f$02%#NXAJwtnA3R6kz+Q}2SA2fZ#T!05sZH`}?z6b>KlLYxQjD=ojEb>7 zVNaEw-nwJ@{3llrSzDH%UTnq`Z-yF$q^0T(6_-pa))RBNB!^#1|3YKg)T2{Vy`SG3 z^=lHyUw?QbHK)E0i%4)|=k(xWU5CjlxhZ7WVjei%_6Rxe-}eDEKDMPsNtxo>m9DYp z5#KXkjaOd>YJ}7!zQ+il(%0XBFMEJS0F9)&=tIJ77tV4>tPXcHgqIuQiO0lIHyBgvvM4!SR@c_&QyL zTatHRdlS&zpgAo5^a1Aic5!)CGAtz{V>euJyp#9s+tfz=1s!;~rUMy~$;k>T zDui&1-z?Tc@CUShK+8!bES&uQ{cW&!?HwJ{;KR@EE)8@i3z6dB-~c$P*pny71DT2i zTOL7yf{QPqMUu-K8RhzI3JUDU`ubEr+Ws{&a|gU(HsHx~OB^4co9?&K<$l8uZ3WCP zfbI7+BZI@^*a0A8O@VrKpl;Bs4hbAsDtIPfW#<6?LC=%5N5D>fvjP4eo_xlSNavn_ z04XagtHBr`O7XcLvcd6{tsM^tY=0}&)gdmv?o;P+a!pA|3F$GA)Q6U@{4o>(h*}Jw zfJ}pP0n7doSWCe_eC>I<^)$c};2LRQhk%80c5Y4resTyPjY+LFHq+NIFff2NwjY?e zfmRFf9y;aEa#a{1DgvI<)3Y;xDdfsjNcz4elqld7et75%vwB-QJ3wda10a$5JPE^< zwrOIzQ60@d6W#(F0I2%+@7?nTTF$$&`GDke3EfP$dGNU7=SL~R0) zdfINyNW>f{DJ!>pe)9GZ95-SSPeDu~mVY2Dp`?#`m(EmFRPYE0fEAHhN>&y@q6-X1 zTL2G-bo=&gM58+rJ3BkPA1rQBQBj5aq}3eIuOcFLV3C7GCE+r;&6AM#*A_VBkPktj zB2~H{6>m|LS&biu@8ILQ44Lx91xlen76UQk561*L=m9SACSiyl$jyY~>RPlE!g0jF zrz}a~5LBIpDf>3?!kT=!Ide(8<0efi|G< zgb6ELB-jOntphkM4qz8c)0LCMLU_jjIjIlR9tsM9DvwVbKO3RA?J?_FlR=-(9$9k z^T(P7l1GGv=MEppR%V2y2utM_5lMkKJYl~b!say-I!W=b$TdJ+jf#r;v)ocsGJ+xu z9481dsUJM})?0LTddh1vg_Nn7;^=w?k@UZX1y0vp6Y!NoQ-1w=4oRgWn252yYd=f3 z4>mp0exa8n)AF^Ek$%M}iLiU6ST~#&;Nt{W$v$oaAP-H)D%la>g8fDuaj}9f#a-;Z z+eZL*tG!#!8ZPoz)F;! zOMRi7qtahxZ!9P%cmoRy)NSd6zSrS&0LV=^ph4fp#cgCPsQCfWeVE4s&|~Oq(dOgr zh8zf)gZ(ioMZnH}iAYJIw6QD*t*Cee-)Xa|z{kUz;W7gBT&;OcH8m-qAuZ~!)qumA zxPP#_>!9YSn$!o|s8uJay*g4BlA228y1V!U(2DyfAj(EeiUA$0`J3OirhsOqS&rH; zI7rm+z)W2HU+*{Q0yRYfHSfe*yDXW1{-6$^r!5U4h}nIUh1`k(OdGh+TL6+#t;U%> zE-p^|=~GhDsTdaRPC%cW>GQoYoyi21iFvqWK2r?-VT$ zzxRJGG&-~VyRz2p;1}%N-4^~g%Xi=sRJ^>z-oTLtt97`PnX*i)iW?d5DHulXPrP9X z07knetG2MPQ1W8WdbpSt;D151?DtpIfoWS>UY-^~)jYikT8M+ASZ90fcNV^5brPJF z>clYHbkP0ad;~z>1Fs=ZFPk>E!bAO+Xo<2Y<02}Nmww7ji8JN)P zSj3Oj)QBPJxKPwaF$;+g8nA0dJ@JvBJ}Kw81ATHk5Zw2{n!}8#Ui2JfOILK@ODlsoWqo%_P zA z7MKJqwVq7Q&1FJh&F`-Dr=f!^7y|C2!_qH5FmIp*7$ClepvD~%d|tWEg1jZE!nbaEKk;UQEK~6^SWVHnQOpfkFSc)nqC|rK0^=@#Ez`sGxC%#G-SbpSe@MjPGf8&xY~T=Q;ILJwoJNpiIA%i z@c29j(38#pA_|7g0NyoG$c-?hMbz1u7aI8KSy=L0T|xo{L*@2IR`c)R;#SGRZYqGC z0LuVA0fp0E88{jUB;TTs>#YNQ>+}#J07*L~BuWe61O$+-q`Y$Dfc7*G!&K(aknig45$uQE|W=vpOydDLT;nNPAAsKHvd8mVmkkSLLG#=eJ-5 z5jdFVX9v3Af)7J5MhTfr<`ni9xWuX`wy^-CMo~c+L_zvkG15d-M4F0#bd@GGI*wum4GL0YLqr9H zARVHDA{`?=6qOQ@1e6vakbKYf%-nmvdr!G{-MhZ;uDgzFxfCSH`|fw||9<|z=hY}L>3S|au$JX5x%0wj!2%<6HO5v_0S9m;ZN1&g1LvkL@sX zr%+}cBEKg*(1~}TP=2D&wr<*UGMe8^zq)rYh9_CDW1>sOMU_=oP=(gS8=}-WID~=Ja@fgwdZ#E4cY4AZ&vQ3 zO@174{_)9_p@s5?1>c0+>7TYP$*Nk72;>kE;~%2oZ37a zxBScPfByKNN2Wt>p3;>oSF(m0o!rGEJl>OnnR<0emi=#;;xy;`iHU2yn~v+|4<@?V zK07rbAt|Zif^6)~EO%b#xUjYNSTom+tu=AVOnqBh+fSc9r5=5AXC^P*g&VfoduG5;L-g@i3lknb-09-tVpn$a+N)Quyxj5kEb(Y}|6np*>&A^6 zBmFv({;@Hhj^w&2o@2cLSJ<1|Z`fHD5lSD8r2gGCS*&-$GX{K zr~8I6k?fHuc5&71E$)J+b)COXQ#hK@>5|bLcJAD{=#w8Vn57*x&L1gvvl|`gBA-~= zdBEIU*>~XMYg+(FZRsv8zio51+k!`@O6zHPu#s_fOs3{h`b;>H=&3 z<2h}WksIVptphwOG3>CYdHov|QERk~AM zQl8Zute~dwPcb)pnsa!c3uYPhy?5C!mGI!f>nDc_8eJq6-ua9rgDR1>lB_~D0-9_g_{R~qc}^z`h>;>B{(r%0dtNyEFx*?TO(B;M}reFGnSf5?9m z)~#3mp4t6AV?Ew%y}m;y`RO8`FcU+yIA^cdSC@7*K6R>1G&fbzIP&_cS9h%Mr-X(S z8(kIW`m0o*jvJ<_?z{>wr+s_&9I3js$+oiUv1N`5##C*n-iDhPagRTYioo;W*2#V@ zIx#+2$Gf^^=4w9$yZ+8{wRfi`mb_Rw@>z-*85x;7SZi*}!bJAU@k9X%rMl$}?hDot z4?DNyW;u&=2L)W!O3i-#hDhBd#|x$F_^-p(n)i9rh2CnP9^Bn+W;R08Sx2EvdRtw6 zT_Ti-t;ziHV&CQXh_)4$MX4%==!j2-$(u3G%+k(G%S%XD-JIjydyFZq<$Et7Az`4m zv$J#HO#7!b#-^kl%W)=|^7B*Ap1oz!a23LGERkKULvAd+Sp++N<9QY2k^j~2QP>%PgiJ5gYjoS0aiWSNs{TN;*{ z(S6{+fmF}#+JWx6Wasp|+#Ih~?Q}mcVdBA@47&eNo0IlPd#Imff14NEMETgeXET{^ z4^?8hbYut2#E1RsN8>_xZKDC&IrP>x)@uHl@k$+uzqp?+u3V_@agqgA&ao3ZXU$KTPCjP;XJWoc>2X#Z`F;f@T~=ElSZ z4u^ruypgDO^7A`>eadoNuUkfEkIgp}3e#}ua=Y=-!G&7B9{FFcxV2+te)^mhN?oY! ze{!Y<|B1X=>OE%>V};)Cy?bxGxvLwVer2($f*X6>3#%fZlfKqG{YXd2jfEOs&TH1J zVNipXoY+yJC2W#6PnYk_6IwY8CFS(&w6U>iSYQ<>;lcR@eQg z6D>YG+v*3#aaqelG}nb&dYQRqzCY*x`S}#Jj_W2TB;!I}gnevrW#AAC6|rMl);S90 zi8VK)^=U(kv9452ZJb{C*9zzV`VWpyUpIxuT( zv8;5I7MD9{TWP_rtavKoTjc!lN710jc`Q~~^d>G*U^DCVlgdOh)=F8X{|T$W5!+d1 z6DWLL^3TSv?TJoFR`~DHFJ0-$MyHJ2+Fo60z@8A#o2CBo))MzJCF^$!u}v|9&#%6T zCwV_9smG)@<50omr4uR70yh=TEn~AMvgC`O8S+!KiwlhgD`sFuMO?V~V$sbbuk*FP zr%;AN`w!~;Rk`)@%((SzER5cP$GtZuP~Mg57xINxMhujLFD8NxKU=&w^#>(U-m6)X z%%5pY!^`Z@_WWV1g%nDD+SW4DZA|J@(I}NddDs89KH}diy5ZO##j8|Yn}!qef9k(= zW@d>}(USg2v9l=@k=*P8Ui$I2SJgE&0iVXPE&Ox@S5UomI@7#M>ShBgbi%};{DSUe zS$AIGLvL3K<)G^90-4HF6N>Fm>OzBP&zQX>s5aSJa<=Rn$}`@I!>fdDGGe9U9|{Bf zq#-`P-#WeHfcBV;8RK+JQ^z%`j`&x@DR`M-Vb$%^v~wOOYRmC~W2;9}_5SCJ)ROQu zhZikg{8d7Y^;cFN3X%##neL3&8FvU`;i*=R@R-aqGu2mZ*svjDy~FNw=LXJuz96GD z7F)yp)YNs@&WY3tawoOr`f3wSyb*Jcsj2<&=l5ngUM@kbN^OyI#m2VFd-m>)OHWr( zwkz9#qL!1Do}O+&A0HeUtz*ZQl$4B(FeN^L;(n%g-$m$m8DZSTo8B!xvhJN_#X93} zb!@Sl(-=ezMRC&{Oe!?{%f=uc-8(Cp%u+?R<}97DW7~t5L_m1lavn^#YTaQON#lK%~=)ySP1UU2nhH_rY6~%O~gy-`yiQER0_5DSYO8=cT!DFOiXH% zEThEZB3atGnNpG0mg{x~YxL~E#WJw%uV&d-R@_vwIZ>%4q|y|!+8Jr->2?*-Y7y&f zcVY*;K{b2oxHs0XC+qQnr)w5iojk-if|{N1=uzp@I;*IT((v$L9jDsI)z#JQ#j;F& zJRL^+gS){y@&3|&{FKW})Yj4ZI-}g|p8q;&5K6@xRSbV=>xa;|-tyi@*zC>19TC+q_h;HV2hKfAn{X+~=_%5$ zD`GUbQuI&N2@QDE{vi*$138hj zoh(1~K!{*&qEF#$UB0IQmVN)!1xiqAGzQdMnqQ)QWvs0-zV2$t^9$-Gs&0KawY(BONb%TGgGROjDUEGx|Jlr_sdb|{DEQTx~| z6sn>3IJShLyzl3%Jo4hV?`^r{+o49`;abW@P+tG}=*B=V9EoQ8+ z6)BpfQuprNOBTKZH}iN~A6hjY8Z0>%ZmO-`z9fr?6q};3mS(l~t6NS$Iod%|`#^{7 zWO+AxnxaOQ21^8PbPdcNv)q%%9Uy(oUGoNO2YOp|pnMu--aAsz36_TUc%^Q;G~X73 z9%r5-4Xu-l?vuvAIPl(`nN|)o^@@jkbb4{8I5mYk&~SOo40&Gqs1` zkufmR8r*|I74axJUtP<0;5CX^DqhIZSeauGqrQO*+mnNv$aqZu@#mkWEl?;M=z5FQ zgypI$?L#HS$2F@XZ2g7}wjZl*XJLIqw-jA3pDC@m@sVkA#a>g(8yJ^PjG6UO3vf6?* z6hgE|kH*_|cXyjuTeIu3tnz$qAs)>jk*(~FbjAm;u_*h+baUeLlJZACSzv@?)J>rh zDyNR<12}!IS@BP@^go2TOMO3v-uX?61b**$yqT(8Z=L|*6l zsroV+E+_||z`;k>wm?_}aU|vTm2fP;BDRM}$5=~7>$3Vv^G7;!zr0$Uh2JdH4$Z#T%jwzEpmasoHg7Mhq>KC0($d-? zRVpxep;Txd2N##}81I${x+sHQx-@7B!>7M94&nq2n1Mt*9!lL3G_(BmwdL+)#ofNW zl*R$$zHuUq`7PPwnq3mp&u+=U9k3yI*sQ@#sRSK{A0S8;0@&M4e=JMt>Jd6}I@fy}G>6 zWa>@oLZ!o7!6|p9FsMeFU$&;ZHb?3y=A}93q0x;?Nl_w-(SiGL?;}ozTkGy;R2sH- zWn7Zx=Vuc~P-Ym^-h7ekzGSPI3v*<{zFA3IX%KmxfX}a5!Swa{5wVcXTpqk}8M#~W z7a56?Tkeh9`>q#9`gHnns|%8d7i+UbZ_V~6~OH+S7(LL0zYl^3fx z?_dXxGpMa272cf2#>huW*=y#k)L*5g+AkLMW^ma6vc+s2^FIVoNDbsrBv*^uutDfC z2F`daS%-(MY~ScFr<>2sSe#xr4u~v-vcEP@Zr^pHe7M@`QR8|`mt${>Eq?d>jNSwm zw?4&&Ox+{R*`6aT9TAHv2{fH!3I(` zMaKWCWsa9;rWVbsrzwJ95mcOFG#K@+J!cnKy$0~!DUl|?DlICYD=r+vazI7n&!lQ4 z9;YpfFfM4M-KbntwfDcx;Ut=8csZq~rIGvjRE6a>xs+5@i83%j0}aio}muFV#DHO>W0p%ex{ z49H?~noDWeTC=PZwy%Pv%zeEHLM_I+j{@B506UQ@Z-Ej4ub0=*rckPU&gRDOFUlpo z#y>?#2AE=#z|Uu7+F?GFZkeTZT~{VxJ!DE3H^YrFi|q_;bVH37?Y<6$*10ubOSS3P z7DM%}d-}1OS!q^4p0BBP@EuekXy$3h|u%`CFJl}#t~xhz^unfL?n7OpATygGu; zD$ZNqD@xtd5nzvqAkE=-XBPf^@R#`t7B`^-!^?rQHiT&Q?MTY}aIxt`=~@Rz#}eXX z@M63>Z`uT}j*`LzAeDzK2;6WPXkPT_=x7;JM{+4=BOn=5?noh(xE};|N*cPGju%OV zV<^*1oNDXp;`8$Zlig8uOCVziTFa{-NRJ3Sbx(iP(B6NFng5vv;@RMv8=Pv}&09zJ zIXXHLbUepMQ%ORea%#k2cO8#VnoU!ruA>Fjk6gdnJl(nLSl)l#nX43@0Sh$UPxuA1 zrd2ZDY7gK|N|$^2hPr#%+3Lx8LkCFf%_&1`aso4{vuew%^0ASAR)A=z>15j#V!rgf zn5KB|&Ye5!{kSd}wrJoNs=8Vzu*dqwKAEyhp!iwX;Vkfzaaq9Fm!-AT*{~Yi@yg$k zaz%qZGln1&%w-P;FH|(LjT76Y37_rLc186Be%oQ0qqo!*uU`Ovdr0~0<(uBE0jjW< zN>JNbjx`UBqN7j{Fi5GeBT0WkTj%kyir^38abo2&sOZO0vAv)cLO~d0X(x(Tgx`Dm zbORwy1Z1J>pcX?O^uf5Zt$DaN3;k;-6=lZ=EP$LL=uE&@e%PtOkqmlN=5qMmo zR9z|0J$U~A=ZP z?D3GW8QGx%W4F%_g?;%G7?5>72835@?p6+OA(V=zX2`%so6cne7Mf?cuFZ2wh5TG{ z?Ae4a7-S6=ka`%#QiDDfLc}&sgWMwp&|<3yq!4Yj6Wk0S^b+= zxvn{DC7)+WuG)lXsnB+2ga_<#cXw}4hyRT$>iWDNBq%PcnH6IR8l(gDDf~Pq@F=cY z;A&~kvNN!&jLoYHm_Vt|fTpPG5!R3j(H?5lqHCWfS=BB$0vk$?0TXhzEf=EpGqqSo z{5gnI*2B%#cEku_6I>locmm=9YoVq`Wb-@c;T*`Z*T|mdEIjU2*^_^T9~vxq^XCCP zQpgY79|(zO%k?hW#?%hrfM{a%$|~j$AI=%KMz=D3(fS7iy?+DcaB6G!sfbXj;vYU- zgKmn(m}9tcDHgL+hMk_C9bf}TX7Fp|1aMtGK zxRY6qgc6SmwxiBdi!reA&&rycR@|TEOD zCa|HsMXr28+?F1|DKaZkGwPqb5|E~tr z&&^AR-5*UCkC6RiH;OSWbR|~XTB#&=ks!nV-LumPk00w}mz=-$K=u13RK|6-CD%#) zz-~nRaabVS_aGM9QOXq?mxHXJTP?r5P?=L-Kiojy5AR_rS8*B1gb-Pe^$i&t?v)$^ z0XxE@i+Rw&I)si$!g2Im8g1t0}GDVO;jE&8bePZiwffX74PatFn}Ic z&lp)d6Tf;X|WjG>Zv33-3m-SW$IgU1dl z&IB5;pDHmdO9n0?77fAlu&*2Q=D1@c#OEu;ouV;F!YL^!X|5ct?=KTQLrfGa0PcRI zfWp%gL1`f9)s+3ZWm!M=8 z+;-Ui?Za&$Zo*MGXc5H1i;q6BGpEi_Yp^=ie!rJwyp6Tx+;kd(XDnc<)P|*7&Us{Z z21{wAqApU4<&tw5F&f_K=Bzt+mcberEwn!hi`;16$Mac;;+dB0@?s`wZx8z zib7msFnrpH7vIa?gZvZJIzzN&dv=%9ehU#Be|5I|hYPZu3)sWkde{;%hyK-%0K?!p zS&I&kZ&^Uc|EqXt&`=>cD~#U$p|hcXi8rL2;0qCC3^z`X`wH7~Mr)u3QKSxBB)N!5 za~Yw$fu0INK(T&RQQ=ClxJ)DSz!FfZK2B4_<5DIH46|$m7D=vFmG^Y|M3}R>C`dhxid{?wv;((;UdE-+pD$4Wv=jiGhLI zQW9%Gx+jck7=D^pV``15X@Ce&G_lU%O4;((qmhXAYIIQRe#{~z!5~Vd<9?KDi4QL( z9MWSvMG?xIFPyqiiFprOtstMDib~}J%XA$c67e>=kW3;S5WwN}7NrIkv}_~;`0J!; zeL$dg$bpht0<>tQQisVz;BnT6i*jHV8N{w8AefM1n_#v3&R(D2JvYnq^-RkC^pHRi zGA*&&D>MxM=T13(ldoBE*3E%&ZVdgk)zV?LS)Otv9m=`TwBP1A7gn-e4liN{Gw-)}Q zJ^f~OcD7MoD`xF)(-Aq^ztm0E@5{>t{byvxej;`RdgT76$pLFy$9ud9cl7$3DU)oh zN59E4m)t};1U7-~n>*X2Do_#En%vi?p(nxa6N6sB9?>vFx!}{NwOv*w#013zJKl06 zotfi7ylE*SshhSmtDZu7sdhT*8eRRYziel+WHh-S+j7T;ONtd_MZ)B_$43xuDt<2` zUP>;OL4s^*Fa+H{-VU-8kBxkl`*2g>#K`#|^t#*F*!Vy{(k7+V2`0*}O_>&fBON0( z$$>Y(`Rt2=rHDnN_ebI+aJ<`^S0b0J|NAQ;}dwbC3P>cWHC>3{@_=H;Zp*Ot`VnjPpZLAvye<(z2Xg{(!Ba^IG z=dVhZNa%(n8`j%Be?8??B}#ffV#ciIbXZsFq%H*ZN3~v0|Mys=6zNEluLWcoc82n} zaH|99ooNnlQ{j!1IP%v7ELCQ^KEfD(5jbIC10<0{QrD2YjH-ELO7f0G5ka?h5HE#9 zOmqw9?(aJH>}x%`yfLQjV8I*VKYfyZoh`&zwH-v>O?f;6PloJSSTls`978ThC zO<%}Bpu&!zc*vYI_WO_3CPw9dSKX|-Ibk9rJG)}MuAzPcrTp;eX1n+1WZ8_}4{E^3~o#e&bU)QWER_94*HdZV8P4W=p-g}!AuQ#y)gOWNee7?HRk_Y#|HS4gf%+u zTvFJ{z&cnVXPQ(7M5@=@vjpHzP1xj4mdDs|k&Z$@S)ZkM^9^MCi5Em~y0lqiv8pS7 zplBhzQ8Dpb*jlTP6pnq=)hSV=kCZ|isQ^9~gQt{OwT@5vjb&F}@;AT;iK;l{|ASyl z)^+R#e=pb~{r7_{)eBCZB|B4>C6vODB4{Ihtcb23u3*_$YAs&J9_vsnwIZ>O)rUug zy-Y;%zB((ARWS%@9l?%40xDfnq0QuQ2`Cgm$xlcV9-KV=$Ez^;h}gAthj&*F(~cpR zl({UU>4Y8#GXcv@P+WrivjKlc0lj12m5Kk#D0P?~*n`uj2hvMI@g4xrX{RoU$5{)PK-F(rA&Mf8&po zXJY-r&vCraS7@wP%`OOU`6KSzGq{5xLsydhmhwy+LD#E)&aVoPUlqyC8UnZe-+heg znWU~|ylCIvR{9cpjD{<{%6yWmQrZ!zq_oWxQ}qbW_@AzxO|)VnnG!lEZJcRK2>_GvtG85|Xh-}@GI zw4@6U_lCR``BPOLba(-k9VhEFL9k^BfE@<=Nh&cxV(#=2QdZizpP++ZS+* zjq+~IdQ4;r#p3KrWHl(K9#s)4MmaVw5{KU?|M10Uc56+bB-GT_-tXsC7A;{inaMbW z^lim=XxF{hEB!JVITAFgW=)lTaGCd5SS)eZyn^81Ma$|M^s*XgmxA zQYbao;CPD1y!hL=r-3PvKmK&(<=g9N85!0!4pz7g*DZ4<-b;8i&dC$&az6iPV?Nlh zz!KlL_-*Cn9VQa3Z{~E@^?2_XWmhh``Qk_G_QIMn4AM_ej~+giwm?|dgLj?0-smAY z7D%Cdx%F>GuD6i7$=*I5CI2quU3Xc8ayC*hd#$aLA zH)Ia)<)gToM{yrM#7<IWxdk(wbj-4(0V(78{AIe^PRDs z28`lR+C!kDqo7r*qnBQ_V))RbGZn2YE#wDl503cfx%FgDGTrE$yLH^qv)$% zf{T9T?^A@U)3@w&qcyHHxPDz`%kXhp@2h-asnw>3NnwY5w$S_TrP%}ln;cfZAR0ei5wT?uvjK=hiVXWf=@FqU4S&HqqFm6HSLyh zVFw_TsiC1E^Z1t}kz?oFUiU^W7t=~cm~CUpx*pq|-^do;=+<`c)DMx-rusG)zc$G@ zDQ-#mD3*+a;*7d5BVH>h>kU#Tr!p8n;PBr*#2;oYrX%ya0fKBCETIPRmOrH@rlc6d z!qMwokC}dTD|XyBvxyB`TS}q7zE?)!D#9ZGk1LhZM}Pacl9W+*UFHhIfHLF zoFC@r&?SL@$g6d9tOMEB)8@+uX)?W4fJZudw`$17zJY*?LuE)U%ODW z*UW6;@e2+Y8gq6(&br%k7-wY<_-INS-28dz;l)qGsprzZ;B04QE{@AtWO3jkKTb{M z;Hx|mWr;n&5wzrSmlUOdwVS~`uD^Tt?((_bAFGzity=Yj!`bZz4kiG3OTlfK`S@hP zc{?lUhljha=(sbO=}?(+Wj)YN+3_VJ(xdV_2BXeQnHAZ#QN^)(6#^>{)q-uJR9r5e z*V`KV>+@R}wa7{y3o*O;*pnZ=hZ>Bw1S};7(5gIz;rshd&CQ+E)YN7_%>*(&U$6hV z6*k#p^jTpFmX0|1@wle0j*IgYWxW0dG*40&@Alle^mS-(?sY#}buF}QU$1I(uv>u8 zLl`aq0mR!I9TmTh(5M&gZn5UcCnNsaQ3zEPsyHgD9X-t1>h8|MkCO1f7Ms(*JVPSV z1<2k3OU3`8T9R8??2ArL1X^Z;2wY>`}|NQXcn2pC@;J}6>6tfXKQR&*@ za%&ft#10-$n8nsFZq*TgnI!`DE_em{ATKLhgjC&vMSt9`GY0cUc)0oT$9SiuYx#K@|8>7#F%c)Hvycl-TKnB+$8ONz*m9rm;x zr;$z@7+$G4+b2@lK6u{z`P=#ZMLOb?j*gCP{vWRQ_?D6z!Z=Txe8y{t-yki#Ry?At z{OG}hCsD51s|PeZ7ck}eb(>%I{CrObME<)<^8W(h?8*}cgHhF6ZN*P2lk%*~L3Qd? zIa>9TAFLn&eElmMf7l{eF{>4K<|pjI3W)I6wyqzBeL$s&h6H*q({}ev(HTCCM8$!Q z&Q3?v318$BHgkiQsNF%3;Uj?N#gi@g`4<)Q1mcmB`imE*`e?>Zh-uy0;edYi;e!X~ zvnz2N@gYuZu*0s-SFp-`;FOfL9WKMQ*4{egzdW(1pWM{1U`BM|1j?FKtFCTse%W0z z=7|TCbMng_b#?Utn8IC%R9+F|G`bT)Xp9GW`2%4&r8W<8c05103q95waF*qWFen_> zcp7f8UdiDDI;l1C@+iO3m%IwfPRna(n4^=f#bh4D&>CYVqleEJ0Nzj@kns}E*y2~h zMIvF~OOZ^_VfN>EgvS$C@?c$d=aOG(GPmjId zOslrC_AQOs+C12aGO*jvF9+7r9oP6F#w9)Z_zS?Tt2Hz<4r|KF%BE?BB4cM3Dr+=z zJP;V>DCPiBOM~cs9T3{M9X)VEHM#B)d5xT$+$Send;3`*$5yT}I{nK}HjYE6JKu`} zdYZBjdVLF@2s3l8Z(Bsdh{myZrvT;yQB5AEr|-ixha4RVeUQ_F{EP*9x*8zp8r&07 z%yO!#rg(_eRx*FS=yqg64zTR5K)@|$x5{id*QlouTzKySu!5(T*Y?X(zByerq;I-= z_ZhKP@y2AN=`)x&S_!Izr#4D%|e$UGLfu6&iXMCAeeKP?&Ls!8poodvdggh#Q!5pl#Jx)%KDwsMlDu1!*b1D!E zO2&AjFkD%pwi^ygU96VhvJVhZFHWdHC(tgQ55PJ4L74b6zm7EuiZ4<`wswb75Ns(a zEhTLRU17N(T8C~WB_)O3_2g0c(7pxVed~c5{0UDa95^`%*~#Br;(L7SOvS#8F3-Bq zp1a>khXgfVdfSoJO}k&$jI(kB_>@n;BURz(=d13<#chM1nvDZCdreJs1uM)SDqK2u ztXX)$ho4fk*#>_h=wYgT*dm;DHZH6OLn`YYYy{?*w+LsYug$>Wl23#6Ok^Xg>Y>Xf zw+9?nsN=5q6hO@80Di5KOq+n2Ubi%{tYIP|7>AQN^;mbalKHh&QxUC*> zmMu0B3^pQQg*XD^fZLrNJ|%C7=K@Rl5wZmgxotsMckiA(`!{Vm9RMHKZo6RH9KD_g zIUiAZoN>m9IDJ(%_=`&5*vZ8k97%L}t;gL1j*33m?Or!!xtHU*fmZ|=fb^1*ouwru zsisywD{4&ivQbeQ5qoh(xk<;NUTDM!+*m!?t)|Re^4&|%)`i}X-M2N`W=g47=l9)6 z-fE#bj-oQXd0__dtcQIQ(st_`O1n+rm1V-CZ@9DV61EXCvGA1{rsu~+k_)d*e*Q5H zR+M>QU|_w}ZzK@tsYq8zpl!KiJoQLtrA+C^!3B>MI*sX3> z$#o#l4$y>8(4r|W8-iPvg0$U!E2~(9xXN&jNM>-3tTOA|xyg%_?JlFJnL9WnfFUZp z(W7O;M2l$K2;~5k)_+p-HWTrxf?XEN`aDJl97OMD(T`4=G$|}R+#YF~r>ZR{moM$s zzmCD^EL#|*L(jhv7Ipw1)Y0Bv4=&sNP@e|L!SQYq)dw?yPq scG&o*z}fguLxTSjVfbJ5;v14Fwm-DW_}J{>kpZP`Gu)cA`QWer2Z3}@`Tzg` literal 0 HcmV?d00001 diff --git a/_sources/analysis.rst.txt b/_sources/analysis.rst.txt new file mode 100644 index 00000000..6dc91d7b --- /dev/null +++ b/_sources/analysis.rst.txt @@ -0,0 +1,23 @@ +Data analysis +============= + +.. automodule:: sapphire.analysis + :members: + :undoc-members: + +.. toctree:: + :hidden: + + analysis/calibration + analysis/coincidence_queries + analysis/coincidences + analysis/core_reconstruction + analysis/direction_reconstruction + analysis/event_utils + analysis/find_mpv + analysis/landau + analysis/process_events + analysis/process_traces + analysis/reconstructions + analysis/signal_calibration + analysis/time_deltas diff --git a/_sources/analysis/calibration.rst.txt b/_sources/analysis/calibration.rst.txt new file mode 100644 index 00000000..e53aa80c --- /dev/null +++ b/_sources/analysis/calibration.rst.txt @@ -0,0 +1,8 @@ +.. include:: ../subst.inc + +Data timing and signal calibration +================================== + +.. automodule:: sapphire.analysis.calibration + :members: + :undoc-members: diff --git a/_sources/analysis/coincidence_queries.rst.txt b/_sources/analysis/coincidence_queries.rst.txt new file mode 100644 index 00000000..96f1c4b3 --- /dev/null +++ b/_sources/analysis/coincidence_queries.rst.txt @@ -0,0 +1,8 @@ +.. include:: ../subst.inc + +Query coincidences from a datafile +================================== + +.. automodule:: sapphire.analysis.coincidence_queries + :members: + :undoc-members: diff --git a/_sources/analysis/coincidences.rst.txt b/_sources/analysis/coincidences.rst.txt new file mode 100644 index 00000000..2d64bdb9 --- /dev/null +++ b/_sources/analysis/coincidences.rst.txt @@ -0,0 +1,8 @@ +.. include:: ../subst.inc + +Search for coincidences between |hisparc| stations +================================================== + +.. automodule:: sapphire.analysis.coincidences + :members: + :undoc-members: diff --git a/_sources/analysis/core_reconstruction.rst.txt b/_sources/analysis/core_reconstruction.rst.txt new file mode 100644 index 00000000..ef7dc52e --- /dev/null +++ b/_sources/analysis/core_reconstruction.rst.txt @@ -0,0 +1,6 @@ +Reconstruction of EAS core and size +=================================== + +.. automodule:: sapphire.analysis.core_reconstruction + :members: + :undoc-members: diff --git a/_sources/analysis/direction_reconstruction.rst.txt b/_sources/analysis/direction_reconstruction.rst.txt new file mode 100644 index 00000000..b22c2ee3 --- /dev/null +++ b/_sources/analysis/direction_reconstruction.rst.txt @@ -0,0 +1,6 @@ +Reconstruction of EAS direction +=============================== + +.. automodule:: sapphire.analysis.direction_reconstruction + :members: + :undoc-members: diff --git a/_sources/analysis/event_utils.rst.txt b/_sources/analysis/event_utils.rst.txt new file mode 100644 index 00000000..802a4727 --- /dev/null +++ b/_sources/analysis/event_utils.rst.txt @@ -0,0 +1,8 @@ +.. include:: ../subst.inc + +Get signal and timing values from events +======================================== + +.. automodule:: sapphire.analysis.event_utils + :members: + :undoc-members: diff --git a/_sources/analysis/find_mpv.rst.txt b/_sources/analysis/find_mpv.rst.txt new file mode 100644 index 00000000..aaa7195d --- /dev/null +++ b/_sources/analysis/find_mpv.rst.txt @@ -0,0 +1,6 @@ +MPV fit +======= + +.. automodule:: sapphire.analysis.find_mpv + :members: + :undoc-members: diff --git a/_sources/analysis/landau.rst.txt b/_sources/analysis/landau.rst.txt new file mode 100644 index 00000000..bddf0b87 --- /dev/null +++ b/_sources/analysis/landau.rst.txt @@ -0,0 +1,6 @@ +Landau distribution +=================== + +.. automodule:: sapphire.analysis.landau + :members: + :undoc-members: diff --git a/_sources/analysis/process_events.rst.txt b/_sources/analysis/process_events.rst.txt new file mode 100644 index 00000000..b8fbbcd9 --- /dev/null +++ b/_sources/analysis/process_events.rst.txt @@ -0,0 +1,6 @@ +Processing of HiSPARC events +============================ + +.. automodule:: sapphire.analysis.process_events + :members: + :undoc-members: diff --git a/_sources/analysis/process_traces.rst.txt b/_sources/analysis/process_traces.rst.txt new file mode 100644 index 00000000..7716404e --- /dev/null +++ b/_sources/analysis/process_traces.rst.txt @@ -0,0 +1,6 @@ +Processing of HiSPARC traces +============================ + +.. automodule:: sapphire.analysis.process_traces + :members: + :undoc-members: diff --git a/_sources/analysis/reconstructions.rst.txt b/_sources/analysis/reconstructions.rst.txt new file mode 100644 index 00000000..5a770ce2 --- /dev/null +++ b/_sources/analysis/reconstructions.rst.txt @@ -0,0 +1,6 @@ +Reconstructions +=============== + +.. automodule:: sapphire.analysis.reconstructions + :members: + :undoc-members: diff --git a/_sources/analysis/signal_calibration.rst.txt b/_sources/analysis/signal_calibration.rst.txt new file mode 100644 index 00000000..075e0e81 --- /dev/null +++ b/_sources/analysis/signal_calibration.rst.txt @@ -0,0 +1,8 @@ +.. include:: ../subst.inc + +Detector signal calibration +=========================== + +.. automodule:: sapphire.analysis.signal_calibration + :members: + :undoc-members: diff --git a/_sources/analysis/time_deltas.rst.txt b/_sources/analysis/time_deltas.rst.txt new file mode 100644 index 00000000..498f6e61 --- /dev/null +++ b/_sources/analysis/time_deltas.rst.txt @@ -0,0 +1,6 @@ +Time deltas +=========== + +.. automodule:: sapphire.analysis.time_deltas + :members: + :undoc-members: diff --git a/_sources/api.rst.txt b/_sources/api.rst.txt new file mode 100644 index 00000000..9e4796a3 --- /dev/null +++ b/_sources/api.rst.txt @@ -0,0 +1,6 @@ +HiSPARC API +=========== + +.. automodule:: sapphire.api + :members: + :undoc-members: diff --git a/_sources/clusters.rst.txt b/_sources/clusters.rst.txt new file mode 100644 index 00000000..93be4697 --- /dev/null +++ b/_sources/clusters.rst.txt @@ -0,0 +1,6 @@ +HiSPARC clusters +================ + +.. automodule:: sapphire.clusters + :members: + :undoc-members: diff --git a/_sources/configuration.rst.txt b/_sources/configuration.rst.txt new file mode 100644 index 00000000..df7631ea --- /dev/null +++ b/_sources/configuration.rst.txt @@ -0,0 +1,20 @@ +.. include:: subst.inc + +Configuration +************* + +Various modules (:mod:`sapphire.api`, :mod:`sapphire.esd`, and :mod:`sapphire.publicdb`) +connect to the |hisparc| Public Database to download data, metadata, configurations, etc. +Normally you will want to use the official |hisparc| Public Database, which is hosted +at `https://data.hisparc.nl`. However, during development, tests or other occasions you +may want to use a different server, for example when running a local version of the +publicdb. In that case you can overwrite the base url used. This overwrite is done +using an environment variable: ``PUBLICDB_BASE``. This can be easily set when starting +your Python environment, for example:: + + $ PUBLICDB_BASE=http://localhost:8000 python + +Or while already running Python:: + + from os import environ + environ['PUBLICDB_BASE'] = 'http://localhost:8000' diff --git a/_sources/corsika.rst.txt b/_sources/corsika.rst.txt new file mode 100644 index 00000000..7e7b370c --- /dev/null +++ b/_sources/corsika.rst.txt @@ -0,0 +1,44 @@ +.. include:: subst.inc + +CORSIKA simulations +=================== + +`CORSIKA `_ is an Air Shower +Simulation Program. To be used for detailed simulation of +extensive air showers initiated by high-energy cosmic-ray particles. + +This module makes it easy to work with CORSIKA output, it was +original written by Javier Gonzalez and adapted for `HiSPARC +`_ by Arne de Laat. + +This documentation sometimes refers to the CORSIKA users manual, this +users manual can be found here `CORSIKA User's Guide +`_ + +In addition to reading CORSIKA output, functionally is provided to +easily submit many CORSIKA jobs to the Nikhef batch facility +(Stoomboot). + + +CORSIKA Module +-------------- + +.. automodule:: sapphire.corsika + :members: + + +Contents +-------- + +.. toctree:: + :hidden: + + corsika/blocks + corsika/corsika_queries + corsika/generate_corsika_overview + corsika/particles + corsika/qsub_corsika + corsika/qsub_store_corsika_data + corsika/reader + corsika/store_corsika_data + corsika/units diff --git a/_sources/corsika/blocks.rst.txt b/_sources/corsika/blocks.rst.txt new file mode 100644 index 00000000..7058e074 --- /dev/null +++ b/_sources/corsika/blocks.rst.txt @@ -0,0 +1,6 @@ +CORSIKA Blocks +============== + +.. automodule:: sapphire.corsika.blocks + :members: + :undoc-members: diff --git a/_sources/corsika/corsika_queries.rst.txt b/_sources/corsika/corsika_queries.rst.txt new file mode 100644 index 00000000..c4b164a4 --- /dev/null +++ b/_sources/corsika/corsika_queries.rst.txt @@ -0,0 +1,6 @@ +Query CORSIKA overview for simulations +====================================== + +.. automodule:: sapphire.corsika.corsika_queries + :members: + :undoc-members: diff --git a/_sources/corsika/generate_corsika_overview.rst.txt b/_sources/corsika/generate_corsika_overview.rst.txt new file mode 100644 index 00000000..b9c32b72 --- /dev/null +++ b/_sources/corsika/generate_corsika_overview.rst.txt @@ -0,0 +1,6 @@ +Create an overview of CORSIKA simulations +========================================= + +.. automodule:: sapphire.corsika.generate_corsika_overview + :members: + :undoc-members: diff --git a/_sources/corsika/particles.rst.txt b/_sources/corsika/particles.rst.txt new file mode 100644 index 00000000..2c08d96a --- /dev/null +++ b/_sources/corsika/particles.rst.txt @@ -0,0 +1,6 @@ +CORSIKA Particles +================= + +.. automodule:: sapphire.corsika.particles + :members: + :undoc-members: diff --git a/_sources/corsika/qsub_corsika.rst.txt b/_sources/corsika/qsub_corsika.rst.txt new file mode 100644 index 00000000..8a5906ca --- /dev/null +++ b/_sources/corsika/qsub_corsika.rst.txt @@ -0,0 +1,6 @@ +CORSIKA on Stoomboot +==================== + +.. automodule:: sapphire.corsika.qsub_corsika + :members: + :undoc-members: diff --git a/_sources/corsika/qsub_store_corsika_data.rst.txt b/_sources/corsika/qsub_store_corsika_data.rst.txt new file mode 100644 index 00000000..04bd9e61 --- /dev/null +++ b/_sources/corsika/qsub_store_corsika_data.rst.txt @@ -0,0 +1,6 @@ +Convert CORSIKA simulations on Stoomboot +======================================== + +.. automodule:: sapphire.corsika.qsub_store_corsika_data + :members: + :undoc-members: diff --git a/_sources/corsika/reader.rst.txt b/_sources/corsika/reader.rst.txt new file mode 100644 index 00000000..12fcee50 --- /dev/null +++ b/_sources/corsika/reader.rst.txt @@ -0,0 +1,6 @@ +CORSIKA Reader +============== + +.. automodule:: sapphire.corsika.reader + :members: + :undoc-members: diff --git a/_sources/corsika/store_corsika_data.rst.txt b/_sources/corsika/store_corsika_data.rst.txt new file mode 100644 index 00000000..fe78073e --- /dev/null +++ b/_sources/corsika/store_corsika_data.rst.txt @@ -0,0 +1,6 @@ +Store CORSIKA data as HDF5 +========================== + +.. automodule:: sapphire.corsika.store_corsika_data + :members: + :undoc-members: diff --git a/_sources/corsika/units.rst.txt b/_sources/corsika/units.rst.txt new file mode 100644 index 00000000..9d96aef6 --- /dev/null +++ b/_sources/corsika/units.rst.txt @@ -0,0 +1,6 @@ +CORSIKA Units +============= + +.. automodule:: sapphire.corsika.units + :members: + :undoc-members: diff --git a/_sources/data.rst.txt b/_sources/data.rst.txt new file mode 100644 index 00000000..bd9b0a41 --- /dev/null +++ b/_sources/data.rst.txt @@ -0,0 +1,12 @@ +Updating and extending local data +================================= + +.. automodule:: sapphire.data + :members: + :undoc-members: + +.. toctree:: + :hidden: + + data/extend_local_data + data/update_local_data diff --git a/_sources/data/extend_local_data.rst.txt b/_sources/data/extend_local_data.rst.txt new file mode 100644 index 00000000..2ef28768 --- /dev/null +++ b/_sources/data/extend_local_data.rst.txt @@ -0,0 +1,6 @@ +Download additional local data +============================== + +.. automodule:: sapphire.data.extend_local_data + :members: + :undoc-members: diff --git a/_sources/data/update_local_data.rst.txt b/_sources/data/update_local_data.rst.txt new file mode 100644 index 00000000..bcb1211f --- /dev/null +++ b/_sources/data/update_local_data.rst.txt @@ -0,0 +1,6 @@ +Update default local data with latest data from Publicdb +======================================================== + +.. automodule:: sapphire.data.update_local_data + :members: + :undoc-members: diff --git a/_sources/esd.rst.txt b/_sources/esd.rst.txt new file mode 100644 index 00000000..67a148d2 --- /dev/null +++ b/_sources/esd.rst.txt @@ -0,0 +1,6 @@ +Event Summary Data +================== + +.. automodule:: sapphire.esd + :members: + :undoc-members: diff --git a/_sources/examples.rst.txt b/_sources/examples.rst.txt new file mode 100644 index 00000000..ab08ad4a --- /dev/null +++ b/_sources/examples.rst.txt @@ -0,0 +1,133 @@ +Example scripts +=============== + +In this chapter we'll discuss some scripts showing common examples of how to download and analyse data. We'll start with a short discussion of the general layout of such scripts and how to run them interactively. Then, we'll continue with examples for some common tasks. + + +First, some tips and tricks +--------------------------- + +The ``not in globals()`` trick +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +A simple script downloading data for a single day can look like: + +.. literalinclude:: scripts/simple-download.py + :caption: simple-download.py + +This script can be run from the command line like this:: + + $ python + +Every time you run the script, the old data will be removed and new data will be downloaded. Except that the data is probably unchanged. What a waste of time and bandwidth! If you do *not* run this from the command line you can run into trouble. For example, the second time you run the script from an IPython console, you can run into an exception: + +.. code-block:: python + :emphasize-lines: 9 + + >>> %run simple-download.py + 100%|################################################################|Time: 5.22 + >>> %run simple-download.py + Traceback (most recent call last): + File "/Users/david/work/HiSPARC/software/sapphire/doc/scripts/simple-download.py", line 10, in + data = tables.open_file(DATAFILE, 'w') + File "/Users/david/anaconda/lib/python2.7/site-packages/tables/file.py", line 315, in open_file + "close it before reopening in write mode." % filename) + ValueError: The file 'data.h5' is already opened. Please close it before reopening in write mode. + +The second time the script is run, the file is already opened. The script, however, does not know that. You can close the file at the end of your script, but then you don't have access to the file from the interactive console. It is very useful to run the script, keep the file open, and be able to inspect the file and any variables created by the script. The console has access to all variables declared by the script, but by default the script is not allowed to know about any variables defined in the console. In other words, the script *cannot* know about the opened file. This is fixed by running the script with the ``-i`` option:: + + >>> %run -i simple-download.py + +The script still does not check for opened files. To do this, one can use the ``globals()`` function. This will return a dictionary containing all variables in the global scope. If ``data`` is defined, then ``'data'`` will be present in that dictionary. We can check for that: + +.. literalinclude:: scripts/simple-download-with-globals.py + :caption: simple-download-with-globals.py + :emphasize-lines: 10-12 + +Now, the script can be rerun multiple times: + +.. code-block:: pycon + + >>> %run -i simple-download-with-globals.py + 100%|################################################################|Time: 5.29 + >>> %run -i simple-download-with-globals.py + +The second time the script is run, it does nothing. This *is* useful, because we can include stuff that needs to be rerun *after* the ``if``-statement. + + +The ``not in data`` trick +^^^^^^^^^^^^^^^^^^^^^^^^^ + +Every time we run the previous script from the command-line, or start a new IPython console, the script still overwrites the data file with 'new' data. We need something more! In addition to checking if the file is already opened, the script needs to check if the data is already present in the file. If it is, the script should do nothing. It is important to open the file in *append* mode, not in *write* mode. If you do the latter, the file is overwritten the moment you open it. The script becomes: + +.. literalinclude:: scripts/simple-download-with-checks.py + :caption: simple-download-with-checks.py + :emphasize-lines: 13-14 + + +The ``if __name__ == '__main__'`` trick +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Finally, most scripts of any decent size include a weird-looking line:: + + if __name__ == '__main__': + do_something() + +This is very useful, in fact! A small script invariably grows to a larger size. Most probably, you'll write a few functions that are useful elsewhere. If they are, you can import them from a new script. That, however, causes problems if you did not include the lines above. For example, take this script: + +.. literalinclude:: scripts/is_useful.py + :caption: is_useful.py + +This script defines a function to calculate the squares of numbers. We use it to print the squared of the numbers 1, 2, and 3. Now, we want to print the square of 16:: + + >>> from is_useful import square + 1 2 3 + 1 4 9 + >>> print(square(16)) + 256 + +What happened? When we import a module, the code *inside* that module is run as well. We don't want that. When we *run* a script, the special variable ``__name__`` is equal to ``'__main__'``. When we *import* a script, the variable is equal to the name of the module, and *not* equal to ``'__main__'``. So, we can check for that: + +.. literalinclude:: scripts/is_useful_and_importable.py + :caption: is_useful_and_importable.py + +If we run the script stand-alone, we get the expected result:: + + >>> %run is_useful_and_importable.py + 1 2 3 + 1 4 9 + +But we can now also import the script without any unintended side effects:: + + >>> from is_useful_and_importable import square + >>> print(square(16)) + 256 + +It is good practice to always include the ``__name__ == '__main__'`` check. + + +Common tasks +------------ + +Download event summary data for a few stations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. literalinclude:: scripts/download_esd_events.py + + +Download coincidences for a few stations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. literalinclude:: scripts/download_esd_coincidences.py + + +Download and reconstruct directions for coincidences +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. literalinclude:: scripts/download_and_reconstruct_coincidences.py + + +Plot zenith angle distribution +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. literalinclude:: scripts/plot_zenith_distribution.py diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 00000000..eec21d09 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,31 @@ +Welcome to SAPPHiRE's documentation! +==================================== + +SAPPHiRE is a Simulation and Analysis Program Package for HiSPARC Research +and Education. This is your first stop if you want to download HiSPARC +station data, perform a simulation or start analyzing (simulated) data. + +While SAPPHiRE currently is very capable, the documentation is still being +heavily developed. Please check the `GitHub repository +`_ to view the activity log or browse +or download the code. + +Contents: + +.. toctree:: + :maxdepth: 2 + :includehidden: + + installation + tutorial + examples + configuration + sapphire + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/_sources/installation.rst.txt b/_sources/installation.rst.txt new file mode 100644 index 00000000..3112ccd4 --- /dev/null +++ b/_sources/installation.rst.txt @@ -0,0 +1,210 @@ +.. include:: subst.inc + +Installation +************ + +Python is a very versatile language. As such, it can be either installed with +lots and lots of packages to create an environment for e.g. data analysis or +game development, or it can be installed for a very specific task, taking up +much less space. To install a complete environment without all the hassle, you +can install a *Python distribution* which includes Python and a long list +of packages. This is the recommended approach, certainly if you're new to +Python. If you really want, you can install a much smaller set of packages for +which we'll provide minimal instructions only. + +Before we'll go on describing how to install |sapphire| itself, we will first +install the prerequisites. + + +Installing the prerequisites +============================ + +Python distributions +-------------------- + +|sapphire| supports both Python 2.7 and newer versions of Python, e.g. 3.5. +If you don't mind to install a large package, use a distribution. This mostly +includes everything you'll ever need. One such distribution is `Anaconda +`_. It includes many scientific python +packages, as well as graphical environments for doing your work. Anaconda has +packages available for the three major platforms: Windows, OS X and Linux. + +Anaconda includes a graphical programming environment (`Spyder +`_) which makes it easy to write analysis +scripts while creating plots, testing small snippets of code, or inspecting +your variables. + + +Minimal installation (miniconda) +-------------------------------- + +In theory, installing a Python package should be very easy. To install +|sapphire|, the Python package called ``sapphire`` would be retrieved from the +internet. It would have its dependencies listed and ``pip`` would pull them in +and all should be well. In fact, |sapphire| *does* have its dependencies +listed and Pip *will* pull them in. It is only then, that things start go +wrong. Whether you'll experience difficulties depends on the operating system +you're using and any previously installed software. But don't worry, we've got +you covered. + +Miniconda is the package manager used by the Anaconda distribution. +Installation instructions can be found at +https://conda.pydata.org/docs/install/quick.html. After installation, install +the following package:: + + $ conda install --channel conda-forge hdf5 + +After this is should be possible to simply install |sapphire| using Pip (see below). + + +Minimal installation (OS-specific) +---------------------------------- + +If you want to use a package manager specifically for your OS, follow the +(minimal) instructions below for your operating system of choice. + + +Mac OS X +^^^^^^^^ + +If you're using Mac OS X, the easiest way to install open source software +(like Python, the program language we're using) including lots and lots of +great packages, is done using `Homebrew +`_. Please follow the installation +instructions (really easy) and when done, type the following into a +terminal:: + + $ brew install python + +This will install Python and Pip. + +As of this writing, several of the dependencies listed by |sapphire| do not +have their own dependencies listed in a way that Pip (or other tools, for that +matter) know how to handle. To install matplotlib with its requirements, you +can type:: + + $ brew install homebrew/python/matplotlib + +Warning: this will install gcc and start a very long compilation process. Alternatively, with the introduction of *wheels* in Python, you can simply try to install packages like numpy, scipy and matplotlib using Pip:: + + $ pip install numpy scipy matplotlib + +If you're lucky, using a wheel will not need a compiler. We haven't tried this +ourselves for quite a while. YMMV. + + +Debian and derivatives (like Ubuntu) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Debian has a first-class package manager which other distributions and +operating systems have a hard time competing with. In my personal opinion, +anyway. Lots of Python packages can be installed using ``apt-get``, but some +of them might be outdated, depending on the age of your distribution. Use +``apt-get`` for Python packages at your own discretion (read: risk). Pip +handles Python packages very well, so you'll probably need some packages to +install using Pip. + +As of this writing, several of the dependencies listed by |sapphire| do not +have their own dependencies listed in a way that Pip (or other tools, for +that matter) know how to handle. Furthermore, matplotlib needs to be +installed all by itself, and its dependencies must be installed before it. + +You can try to install packages using ``apt-get``, for example:: + + $ sudo apt-get install python-matplotlib + +To figure out what you need, look at the prerequisites for |sapphire|, listed +in the setup.py file in the code repository. You can also try to install +|sapphire| using pip, and waiting for the installation to fail on some +prerequisites. If you then need development libraries, ``apt-get`` can help you +with that:: + + $ sudo apt-get build-dep python-numpy + +will install everything you need to build numpy from source. + + +Installing |sapphire| +===================== + +The |sapphire| package has been uploaded to `PyPI +`_ so that ``pip`` knows where to find it. + +There are now several scenarios for installing |sapphire|: let ``pip`` +install the release or development version or download the source code +and use setup.py to install it. + + +Just let me get to work! +------------------------ + +These scenarios do not involve fetching the code. They will just +install |sapphire|, so that you can get to work. To get the latest +stable release version, simply issue:: + + $ pip install hisparc-sapphire + +Done. Now get to work. + +If you like living on the edge with a possibly broken version of +|sapphire|, get the latest development version:: + + $ pip install https://github.com/hisparc/sapphire/zipball/master + + +Let me see the code! +-------------------- + +If you're interested in the development of |sapphire|, you can either go to the +`GitHub page `_ or install the version +control system (we use `Git `_) yourself. For that, please +see the `GitHub Help pages `_. + +To download the code and install |sapphire|, first go to +https://github.com/hisparc/sapphire/. Then, click on the *Clone in Desktop*, +which will prompt you to download the GitHub Desktop app (recommended). + +.. image:: images/github-zipball.png + +Open a terminal and navigate to the top-level directory containing the code. +Then issue:: + + $ python setup.py develop + +This takes care of installing the missing dependencies and |sapphire| itself. +Whenever you update the code using the GitHub Desktop application, the new code +is immediately available. + + +Checking that |sapphire| is installed correctly +=============================================== + +First off, the following is not an exhaustive check. But it will tell you +if |sapphire| is, in fact, installed on your system and that Python knows +how to find it. + +.. note:: When you run this check from *inside* the top-level |sapphire| + code directory, it will always return successfully. The reason + for this is that Python also checks the current working + directory for packages. *So, run this check from e.g. your home + directory.* + +Start a Python session. You can use a launcher of some type (e.g. the one +from Python(x,y)), or open a terminal and type:: + + $ python + +Or, if you prefer, `IPython `_:: + + $ ipython + +In fact, we recommend using IPython for interactive use. Then, try to import +|sapphire|:: + + >>> import sapphire + +If this returns without an error message, all is well and |sapphire| should be +correctly installed. As an additional assurance the |sapphire| code tests can +be executed. To run the tests simply call the function to run the tests:: + + >>> sapphire.run_tests() diff --git a/_sources/kascade.rst.txt b/_sources/kascade.rst.txt new file mode 100644 index 00000000..330851f6 --- /dev/null +++ b/_sources/kascade.rst.txt @@ -0,0 +1,6 @@ +KASCADE data +============ + +.. automodule:: sapphire.kascade + :members: + :undoc-members: diff --git a/_sources/publicdb.rst.txt b/_sources/publicdb.rst.txt new file mode 100644 index 00000000..c336aa35 --- /dev/null +++ b/_sources/publicdb.rst.txt @@ -0,0 +1,6 @@ +Public data access +================== + +.. automodule:: sapphire.publicdb + :members: + :undoc-members: diff --git a/_sources/qsub.rst.txt b/_sources/qsub.rst.txt new file mode 100644 index 00000000..a1240717 --- /dev/null +++ b/_sources/qsub.rst.txt @@ -0,0 +1,6 @@ +Nikhef Stoomboot facilities +=========================== + +.. automodule:: sapphire.qsub + :members: + :undoc-members: diff --git a/_sources/sapphire.rst.txt b/_sources/sapphire.rst.txt new file mode 100644 index 00000000..670652ae --- /dev/null +++ b/_sources/sapphire.rst.txt @@ -0,0 +1,23 @@ +SAPPHiRE Reference +================== + +.. automodule:: sapphire + +.. toctree:: + :hidden: + + analysis + api + clusters + corsika + data + esd + kascade + publicdb + qsub + simulations + storage + tests + time_util + transformations + utils diff --git a/_sources/simulations.rst.txt b/_sources/simulations.rst.txt new file mode 100644 index 00000000..2ac0db16 --- /dev/null +++ b/_sources/simulations.rst.txt @@ -0,0 +1,30 @@ +Simulation of the detection of EAS events +========================================= + +Simulations are built up from several components. First the cluster needs to +be defined. This can be a set of real stations or imaginary detectors. Then +systematic detector and station errors are generated. Next a generator for +shower properties is used to determine the properties of each shower (energy +and direction). Then for each detector the shower particles that hit it are +selected. For each of these the actual detected signal strength and arrival +times (detector effects) are determined. Then the trigger conditions are +checked to see if the station triggered. If it did an event will be stored for +that station. This includes a GPS timestamp and the detector observables +(particle count and arrival time of first particle). Finally for each shower a +'coincidence' will be stored, even if it was not detected by any station. The +coincidence stores the parameters of the shower. + + +.. automodule:: sapphire.simulations + :members: + :undoc-members: + +.. toctree:: + :hidden: + + simulations/base + simulations/detector + simulations/groundparticles + simulations/ldf + simulations/showerfront + simulations/gammas diff --git a/_sources/simulations/base.rst.txt b/_sources/simulations/base.rst.txt new file mode 100644 index 00000000..bddce254 --- /dev/null +++ b/_sources/simulations/base.rst.txt @@ -0,0 +1,6 @@ +Simulation base classes +======================= + +.. automodule:: sapphire.simulations.base + :members: + :undoc-members: diff --git a/_sources/simulations/detector.rst.txt b/_sources/simulations/detector.rst.txt new file mode 100644 index 00000000..411c533f --- /dev/null +++ b/_sources/simulations/detector.rst.txt @@ -0,0 +1,6 @@ +Detector simulations +==================== + +.. automodule:: sapphire.simulations.detector + :members: + :undoc-members: diff --git a/_sources/simulations/gammas.rst.txt b/_sources/simulations/gammas.rst.txt new file mode 100644 index 00000000..3e1361b3 --- /dev/null +++ b/_sources/simulations/gammas.rst.txt @@ -0,0 +1,6 @@ +Simulation of detector response due to gammas +==================================================================== + +.. automodule:: sapphire.simulations.gammas + :members: + :undoc-members: diff --git a/_sources/simulations/groundparticles.rst.txt b/_sources/simulations/groundparticles.rst.txt new file mode 100644 index 00000000..0c3c9778 --- /dev/null +++ b/_sources/simulations/groundparticles.rst.txt @@ -0,0 +1,6 @@ +Simulations based on Monte Carlo EAS ground particle data +========================================================= + +.. automodule:: sapphire.simulations.groundparticles + :members: + :undoc-members: diff --git a/_sources/simulations/ldf.rst.txt b/_sources/simulations/ldf.rst.txt new file mode 100644 index 00000000..0e397eb6 --- /dev/null +++ b/_sources/simulations/ldf.rst.txt @@ -0,0 +1,6 @@ +Simulations based on theoretical models of EAS lateral distributions +==================================================================== + +.. automodule:: sapphire.simulations.ldf + :members: + :undoc-members: diff --git a/_sources/simulations/showerfront.rst.txt b/_sources/simulations/showerfront.rst.txt new file mode 100644 index 00000000..f8c5ac43 --- /dev/null +++ b/_sources/simulations/showerfront.rst.txt @@ -0,0 +1,6 @@ +Simulations based on time structure of EAS shower fronts +======================================================== + +.. automodule:: sapphire.simulations.showerfront + :members: + :undoc-members: diff --git a/_sources/storage.rst.txt b/_sources/storage.rst.txt new file mode 100644 index 00000000..57690494 --- /dev/null +++ b/_sources/storage.rst.txt @@ -0,0 +1,7 @@ +Low-level storage constructs +============================ + +.. automodule:: sapphire.storage + :members: + :undoc-members: + :imported-members: diff --git a/_sources/tests.rst.txt b/_sources/tests.rst.txt new file mode 100644 index 00000000..f9ca9497 --- /dev/null +++ b/_sources/tests.rst.txt @@ -0,0 +1,6 @@ +Test installation +================= + +.. automodule:: sapphire.tests + :members: + :undoc-members: diff --git a/_sources/time_util.rst.txt b/_sources/time_util.rst.txt new file mode 100644 index 00000000..98d176e1 --- /dev/null +++ b/_sources/time_util.rst.txt @@ -0,0 +1,6 @@ +GPS date/time utility functions +=============================== + +.. automodule:: sapphire.time_util + :members: + :undoc-members: diff --git a/_sources/transformations.rst.txt b/_sources/transformations.rst.txt new file mode 100644 index 00000000..31c6fcaf --- /dev/null +++ b/_sources/transformations.rst.txt @@ -0,0 +1,16 @@ +Coordinate and time transformations +=================================== + +.. automodule:: sapphire.transformations + :members: + :undoc-members: + +.. toctree:: + :hidden: + + transformations/angles + transformations/axes + transformations/base + transformations/celestial + transformations/clock + transformations/geographic diff --git a/_sources/transformations/angles.rst.txt b/_sources/transformations/angles.rst.txt new file mode 100644 index 00000000..3f6d288d --- /dev/null +++ b/_sources/transformations/angles.rst.txt @@ -0,0 +1,6 @@ +Conversion between different angle notations +============================================ + +.. automodule:: sapphire.transformations.angles + :members: + :undoc-members: diff --git a/_sources/transformations/axes.rst.txt b/_sources/transformations/axes.rst.txt new file mode 100644 index 00000000..ea901db5 --- /dev/null +++ b/_sources/transformations/axes.rst.txt @@ -0,0 +1,6 @@ +Conversion between axes coordinate systems +========================================== + +.. automodule:: sapphire.transformations.axes + :members: + :undoc-members: diff --git a/_sources/transformations/base.rst.txt b/_sources/transformations/base.rst.txt new file mode 100644 index 00000000..3e9a98d7 --- /dev/null +++ b/_sources/transformations/base.rst.txt @@ -0,0 +1,6 @@ +Conversion between different bases +================================== + +.. automodule:: sapphire.transformations.base + :members: + :undoc-members: diff --git a/_sources/transformations/celestial.rst.txt b/_sources/transformations/celestial.rst.txt new file mode 100644 index 00000000..292fb01b --- /dev/null +++ b/_sources/transformations/celestial.rst.txt @@ -0,0 +1,6 @@ +Transformations between Celestial coordinate systems +==================================================== + +.. automodule:: sapphire.transformations.celestial + :members: + :undoc-members: diff --git a/_sources/transformations/clock.rst.txt b/_sources/transformations/clock.rst.txt new file mode 100644 index 00000000..e33888f3 --- /dev/null +++ b/_sources/transformations/clock.rst.txt @@ -0,0 +1,6 @@ +Time conversion functions +========================= + +.. automodule:: sapphire.transformations.clock + :members: + :undoc-members: diff --git a/_sources/transformations/geographic.rst.txt b/_sources/transformations/geographic.rst.txt new file mode 100644 index 00000000..d8acda69 --- /dev/null +++ b/_sources/transformations/geographic.rst.txt @@ -0,0 +1,6 @@ +Transformations between geographic coordinate systems +===================================================== + +.. automodule:: sapphire.transformations.geographic + :members: + :undoc-members: diff --git a/_sources/tutorial.rst.txt b/_sources/tutorial.rst.txt new file mode 100644 index 00000000..5566f69b --- /dev/null +++ b/_sources/tutorial.rst.txt @@ -0,0 +1,842 @@ +.. include:: subst.inc + +Tutorial +======== + +|sapphire| simplifies data access, simulations and analysis for the `HiSPARC +`_ experiment. In this tutorial, we'll try to give +you a feeling for the things you can do with |sapphire|. How can you +download data? How can you analyze this data? How can you produce +pulseheight histograms? How can you calculate the direction of cosmic +rays? This tutorial will only give you an overview of what's possible +with |sapphire|. For details on all available classes and methods, please +see the :doc:`sapphire`. + +.. note:: + We'll require you to know basic Python. If you're unfamiliar with Python, + you can look at the official `Python tutorial + `_, the book `Think Python + `_, or `Getting started with + Python for science `_. + + +First steps +----------- + +In a few examples, we will plot the data which we have produced. We make use +of pylab, which is included with matplotlib. If you have Anaconda installed, +you can use the Spyder environment. You can write a script in the main window, +or type short commands in the command prompt in the bottom right. The first +thing you have to do is import everything from pylab. That makes it +ridiculously easy to plot things:: + + >>> from pylab import * + +You can also start an IPython terminal with pylab using:: + + $ ipython --pylab + +In that case, you don't need to import pylab. + +Whenever you see something like:: + + >>> print('Hello, world') + Hello, world + +it means we're typing in Python code. The ``>>>`` is the Python *prompt*. +It tells you that the Python interpreter is waiting for you to give it +some instructions. In the above example, we've typed in ``print ('Hello, +world')``. The interpreter subsequently executed the code and printed +*Hello, world* on the screen. + +The first thing we'll have to do to start using |sapphire| is to *import* +the |sapphire| module:: + + >>> import sapphire + +There will be no output if everything is successful. It is easy to get +some help from inside the Python terminal. Just say:: + + >>> help(sapphire) + +and you'll be presented with a basic help screen. Instead of +``sapphire``, you can throw in modules, packages, functions, classes, +objects, etc. Everything in Python has *some* help text associated with +it. Not all of it is very helpful to a newcomer, hence this tutorial. +All help text is also available in the :doc:`sapphire`. + + +Downloading and accessing |hisparc| data +---------------------------------------- + +The |sapphire| package comprises multiple modules and packages. To access data +from the public database, we'll have to import the :mod:`sapphire.esd` module. +This module gives us access to the *event summary data*, which is the raw +|hisparc| data with preliminary analysis already included. It is simple to +quickly start playing with data:: + + >>> from sapphire import esd + >>> data = esd.quick_download(102) + 100%|####################################|Time: 5.91 + >>> print(data) + data8.h5 (File) '' + Last modif.: 'Thu Oct 22 16:02:05 2015' + Object Tree: + / (RootGroup) '' + /s102 (Group) '' + /s102/events (Table(46382,)) '' + +First, we import the :mod:`sapphire.esd` module. Then, we download data from +station 102 using the :func:`sapphire.esd.quick_download` function. This +function downloads yesterday's data, and creates a datafile on the fly. More on +that later. + +If we want to exercise more control, we need to do some things manually. First, +we need the ``tables`` module to actually store the data. `PyTables +`_ is based on the open HDF5 data format, which is used by `many +(research) institutes `_. For +example, it is used by the KNMI and by NASA. To specify the date and time for +which to download the data, we need the ``datetime`` module. Thus, we have:: + + >>> import tables + >>> import datetime + >>> from sapphire import esd + +Creating an empty data file, with the name ``mydata.h5``, is done easily:: + + >>> data = tables.open_file('mydata.h5', 'w') + +The ``'w'`` means *write*, which creates a file for writing (and reading). +Mind that this will create an empty file. If there already was a file +with that name, it will be overwritten! Alternatively, you can say +``'a'``, which means *append*, thus adding to an existing file without +overwriting its contents. Finally, you can specify ``'r'`` for +*read-only*. + + +Downloading data +^^^^^^^^^^^^^^^^ + +To download data, we have to specify the date/time *range*. If we want to +download data from the December 1, 2012 all through December 2, 2012, +we can specify this by typing:: + + >>> start = datetime.datetime(2012, 12, 1) + >>> end = datetime.datetime(2012, 12, 3) + +Mind that if we do not specify the hour of day, it is taken to be 00:00 +hours. Thus, there is no data included for December 3. Alternatively, +we can download data from a two hour interval on October 17 by specifying +the hour of day:: + + >>> start = datetime.datetime(2012, 10, 17, 19) + >>> end = datetime.datetime(2012, 10, 17, 21) + +which is from 19:00 to 21:00 hours. It is important to realize that we use a +GPS clock, which is equal to UTC (up to some leap seconds). So, if we download +data for a station in the Netherlands, we have just said from 20:00 to 22:00 +local time (when it's not summer time). You can specify the time up to the +second. + +We have not actually done anything yet. We have just stored our time +window in two arbitrarily-named variables, ``start`` and ``end``. To +download data from station 501 and store it in a group with name ``/s501``, +we can use the :func:`sapphire.esd.download_data` function. Since we've +imported ``esd`` from ``sapphire``, we can drop the ``sapphire`` prefix:: + + >>> esd.download_data(data, '/s501', 501, start, end) + 100%|####################################|Time: 0:00:16 + +It will show a progressbar to indicate the progress of the download. + +As you can see in the reference documentation of +:func:`sapphire.esd.download_data`, available by either clicking on +the link or typing in ``help(esd.download_data)`` in the +interpreter, the function takes six arguments: *file, group, station_number, +start, end* and *type*. The last one has the default argument +*'events'*, and may be omitted, as we have done here. In our example, we +have opened a file, ``mydata.h5``, and have stored the file *handler* in +the variable ``data``. So, we passed ``data`` to the function. The group +name is ``/s501``. Group names in PyTables are just like folders in a +directory hierarchy. So, we might have specified +``/path/to/my/hisparc/data/files/for_station/s501``. It is important to +note that this has absolutely nothing to do with *files*. Whatever path +you specify, it is all contained *inside* your data file. Since this is +just a small data file, we have opted for a simple structure. At the +moment, just one group named ``s501`` at the root of the hierarchy. Group +names must start with a letter, hence the ``s`` for station. + +The *station_number* is simply the station number. Here, we've chosen to +download data for station 501, located at Nikhef. The *start* and *end* +parameters specify the date/time range. + +Finally, *type* selects whether to download event or weather data should +be downloaded. We've selected the default, which is *events*. We can also +download the weather data by changing the type to ``'weather'``:: + + >>> esd.download_data(data, '/s501', 501, start, end, type='weather') + 100%|####################################|Time: 0:00:10 + +To access the raw data that includes the original detector traces the +:func:`sapphire.publicdb.download_data` function can be used instead. However, +downloading data will take much longer that way. If only some traces need to be +accessed, the :mod:`sapphire.api` is a better choice. We'll use that module +later in the tutorial. + + +Looking around +^^^^^^^^^^^^^^ + +If you want to know what groups and tables are contained within the data +file, just ``print`` it:: + + >>> print(data) + mydata.h5 (File) '' + Last modif.: 'Sat Dec 29 14:50:55 2012' + Object Tree: + / (RootGroup) '' + /s501 (Group) 'Data group' + /s501/events (Table(137600,)) 'HiSPARC coincidences table' + /s501/weather (Table(51513,)) 'HiSPARC weather data' + +The *object tree* gives an overview of all groups and tables. As you can +see, the ``/s501`` group contains two tables, ``events`` and ``weather``. +The events table contains the data from the |hisparc| scintillators, while +the weather table contains data from the (optional) weather station. + +To directly access any object in the hierarchy, you can make use of the +``data.root`` object, which points to the root group. Then, just specify +the remaining path, with dots instead of slashes. For example, to access +the events table:: + + >>> print(data.root.s501.events) + /s501/events (Table(137600,)) 'HiSPARC coincidences table' + +If you want, you can also access the object using its name as a string, by calling ``get_node`` on the file handler:: + + >>> print(data.get_node('/s501/events')) + /s501/events (Table(137600,)) 'HiSPARC coincidences table' + +Of course, we'd like to get some more information. You can drop the print +statement, and just access the object directly. PyTables is set up such +that it will give more detailed information whenever you specify the +object directly:: + + >>> data.root.s501.events + /s501/events (Table(137600,)) '' + description := { + "event_id": UInt32Col(shape=(), dflt=0, pos=0), + "timestamp": Time32Col(shape=(), dflt=0, pos=1), + "nanoseconds": UInt32Col(shape=(), dflt=0, pos=2), + "ext_timestamp": UInt64Col(shape=(), dflt=0, pos=3), + "pulseheights": Int16Col(shape=(4,), dflt=0, pos=4), + "integrals": Int32Col(shape=(4,), dflt=0, pos=5), + "n1": Float32Col(shape=(), dflt=0.0, pos=6), + "n2": Float32Col(shape=(), dflt=0.0, pos=7), + "n3": Float32Col(shape=(), dflt=0.0, pos=8), + "n4": Float32Col(shape=(), dflt=0.0, pos=9), + "t1": Float32Col(shape=(), dflt=0.0, pos=10), + "t2": Float32Col(shape=(), dflt=0.0, pos=11), + "t3": Float32Col(shape=(), dflt=0.0, pos=12), + "t4": Float32Col(shape=(), dflt=0.0, pos=13), + "t_trigger": Float32Col(shape=(), dflt=0.0, pos=14)} + byteorder := 'little' + chunkshape := (819,) + +There you go! But what does it all *mean*? Well, if you want to get to +the bottom of it, read the `PyTables documentation +`_. We'll give a quick +overview here. + +First, this table contains 137600 rows. In total, there are fourteen +columns: ``event_id``, ``timestamp``, ``nanoseconds``, ``ext_timestamp``, +``pulseheights``, ``integrals``, ``n1``-``n4``, ``t1``-``t4`` and +``t_trigger``. + +Each event has a unique [#event_id]_ identifier, ``event_id``. Each +event has a Unix timestamp in GPS time, *not* UTC. A `Unix timestamp +`_ is the number of seconds that +have passed since January 1, 1970. The sub-second part of the timestamp +is given in ``nanoseconds``. The ``ext_timestamp`` is the full +timestamp in nanoseconds. Since there cannot exist another event with the same +timestamp, this field in combination with the station number uniquely +identifies the event. The ``pulseheights`` and ``integrals`` fields are +values derived from the PMT traces by the HiSPARC DAQ. The ``n#`` +columns are derived from the ``integrals`` and the ``t#`` and +``t_trigger`` fields are obtained after analyzing the event traces on +the server. For some fields there are four values, one for each detector. +If a station only has two detectors, the values for the missing two +detectors are -1. If the baseline of the trace could not be determined +all these values are -999. + +We'll get to work with this data in a moment. First, we'll take a look at +the weather table:: + + >>> data.root.s501.weather + /s501/weather (Table(51513,)) 'HiSPARC weather data' + description := { + "event_id": UInt32Col(shape=(), dflt=0, pos=0), + "timestamp": Time32Col(shape=(), dflt=0, pos=1), + "temp_inside": Float32Col(shape=(), dflt=0.0, pos=2), + "temp_outside": Float32Col(shape=(), dflt=0.0, pos=3), + "humidity_inside": Int16Col(shape=(), dflt=0, pos=4), + "humidity_outside": Int16Col(shape=(), dflt=0, pos=5), + "barometer": Float32Col(shape=(), dflt=0.0, pos=6), + "wind_dir": Int16Col(shape=(), dflt=0, pos=7), + "wind_speed": Int16Col(shape=(), dflt=0, pos=8), + "solar_rad": Int16Col(shape=(), dflt=0, pos=9), + "uv": Int16Col(shape=(), dflt=0, pos=10), + "evapotranspiration": Float32Col(shape=(), dflt=0.0, pos=11), + "rain_rate": Float32Col(shape=(), dflt=0.0, pos=12), + "heat_index": Int16Col(shape=(), dflt=0, pos=13), + "dew_point": Float32Col(shape=(), dflt=0.0, pos=14), + "wind_chill": Float32Col(shape=(), dflt=0.0, pos=15)} + byteorder := 'little' + chunkshape := (1310,) + +We'll let these column names speak for themselves. + + +Accessing the data +^^^^^^^^^^^^^^^^^^ + +We can access the data in several ways. We can address the complete +table, or just one or several rows from it. We can read out a single +column, or select data based on a query. Before we do any of that, we'll +save us some typing:: + + >>> events = data.root.s501.events + +Now, we have stored a short-hand reference to the events table. Let's get +the first event:: + + >>> events[0] + (0L, 1445385601, 613271528L, 1445385601613271528L, [3, 266, 400, 372], + [0, 3090, 5695, 5621], 0.0, 1.03120, 1.55130, 1.58820, + -999.0, 1002.5, 1000.0, 1022.5, 1030.0, -999.0, -999.0) + +That's the first event! It is not, however, immediately clear what +numbers correspond to which columns. They are in order, however, so you +could find out. It is often easier to specify the column you're +interested in:: + + >>> events[0]['pulseheights'] + array([ 3, 266, 400, 372], dtype=int16) + +Which gives us the pulseheights of the first event. You can recognize the same +numbers in the full event data above. The pulseheights are 16-bit integers +(that's the ``dtype=int16``) and are determined after digitizing the events +using an analog-digital converter (ADC). Each unit corresponds to about -0.57 +mV. You can tell that all but the first detector had relatively large +pulseheights, and that they were registered as a significant *peak* in the +signal. + +If you're interested in the pulseheights of *all* events, the fastest way +to do it is to make use of the ``Table.col`` method of the table:: + + >> events.col('pulseheights') + array([[ 3, 266, 400, 372], + [ 4, 277, 887, 7], + [ 72, 256, 6, 330], + ..., + [162, 78, 4, 299], + [ 10, 6, 618, 446], + [593, 621, 343, 13]], dtype=int16) + +It is also possible to select the data based on a query. For example, to +select all events between timestamps 1354320000 and 1354323600 (a one-hour +time span):: + + >>> t0 = 1354320000 + >>> t1 = t0 + 3600 + >>> sel_events = events.read_where('(t0 <= timestamp) & (timestamp < t1)') + >>> len(sel_events) + 2836 + +Thus, we have selected 2836 events. The variable ``sel_events`` no longer +points to a table. We can no longer make use of the ``Table.col`` +method, but we *can* access all pulseheights in the following way:: + + >>> sel_events['pulseheights'] + array([[173, 3, 407, 3], + [ 1, 2, 313, 756], + [211, 2, 2, 268], + ..., + [328, 556, 255, 15], + [ 3, 325, 309, 3], + [ 2, 2, 271, 381]], dtype=int16) + +This notation is possible for arrays, but not for tables. So, for tables, +use the ``Table.col`` method. For arrays, use this special notation. + + +The :mod:`sapphire.time_util` module +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +|sapphire| includes a handy module: :mod:`sapphire.time_util`. This saves you +from the hassle of converting timestamps and confusing local time and GPS (or +UTC) time. It is important to realize that the |hisparc| station uses a GPS +clock, and thus saves all timestamps in GPS time, which is certainly not local +time! You can look up `GPS time +`_, but +suffice it to say that it is *almost* equal to UTC time. The difference is the +leap seconds introduced after 1980. In January 2013, GPS time was ahead of UTC +by 16 seconds. Since July 2015, it is ahead by 17 seconds. We will not refer +to UTC or local time, but instead always refer to GPS time! + +While you tell |sapphire| to download data using year, month, day, hour, +minutes, seconds notation, the events table contains timestamps. It is +often hard to convert between the two. For example, the correct +conversion between a GPS date/time and a GPS timestamp is given by:: + + >>> calendar.timegm(datetime.datetime(2012, 12, 1, 0).utctimetuple()) + 1354320000 + +Which is, at best, cumbersome. It is easy, however, to screw up and +inadvertently convert to local time. For your benefit, we have included +the :class:`sapphire.time_util.GPSTime` class. You instantiate the class +by giving it a GPS time to work with. It can either be in date/time +notation, or as a timestamp. For example, the exact same result is +obtained by these two last lines of code:: + + >>> import sapphire.time_util + >>> sapphire.time_util.GPSTime(2012, 12, 1) + >>> sapphire.time_util.GPSTime(1354320000) + +If you store the instance, you can then call several methods to convert +the date/time to whatever you require:: + + >>> gpstime = sapphire.time_util.GPSTime(2012, 12, 1) + >>> gpstime.datetime() + datetime.datetime(2012, 12, 1, 0, 0) + >>> gpstime.description() + 'Sat Dec 1 00:00:00 2012' + >>> gpstime.gpstimestamp() + 1354320000 + +Or, indeed:: + + >>> gpstime = sapphire.time_util.GPSTime(1354320000) + >>> gpstime.datetime() + datetime.datetime(2012, 12, 1, 0, 0) + >>> gpstime.description() + 'Sat Dec 1 00:00:00 2012' + >>> gpstime.gpstimestamp() + 1354320000 + +It is now easy to select events occurring between 12:00 and 13:00 hours GPS +time on December 2, 2012:: + + >>> t0 = sapphire.time_util.GPSTime(2012, 12, 2, 12).gpstimestamp() + >>> t1 = sapphire.time_util.GPSTime(2012, 12, 2, 13).gpstimestamp() + >>> t0, t1 + (1354449600, 1354453200) + >>> sel_events = events.read_where('(t0 <= timestamp) & (timestamp < t1)') + >>> len(sel_events) + 2817 + +And when did the tenth event occur? Well:: + + >>> t = sel_events[9]['timestamp'] + >>> t + 1354449620 + >>> sapphire.time_util.GPSTime(t).description() + 'Sun Dec 2 12:00:20 2012' + +To shorten the typing somewhat, remember that in Python you can import +classes from modules into your own namespace:: + + >>> from sapphire.time_util import GPSTime + >>> GPSTime(t).description() + 'Sun Dec 2 12:00:20 2012' + + +Plotting data +^^^^^^^^^^^^^ + +Now that we can access the data, we want to visualize it. Plotting data +is a great way to do that. And of course, the venerable histogram is +still very useful to condense thousands of events into one display. Pylab +contains an easy function to do just that: ``hist``. Let's try to +recreate a few graphs as seen on the |hisparc| `data display +`_:: + + >>> ph = events.col('pulseheights') + >>> hist(ph) + ([array([114794, 17565, 3062, 1009, 502, 285, 170, 86, + 72, 55]), array([112813, 19028, 3339, 1246, 540, 295, 163, 100, + 66, 10]), array([109162, 21833, 4246, 1345, 579, 290, 113, 32, + 0, 0]), array([109996, 21283, 4028, 1285, 581, 251, 133, 43, + 0, 0])], array([ 1.00000000e+00, 3.91100000e+02, 7.81200000e+02, + 1.17130000e+03, 1.56140000e+03, 1.95150000e+03, + 2.34160000e+03, 2.73170000e+03, 3.12180000e+03, + 3.51190000e+03, 3.90200000e+03]), ) + +.. image:: images/tutorial-hist-simple.png + :width: 500px + +This will not do. Firstly, data from the four detectors is pictured as +four side-by-side colored bars. Secondly, the number of bins is very low; +it is only ten. Thirdly, the data range continues up to very high values +with hardly any events. + +To fix this, we'll make use of several arguments that can be passed to the +``hist`` function. We'll also make use of some NumPy (`documentation +`_) functionality. For Pylab +documentation, see the `Matplotlib site `_. +Try this:: + + >>> bins = linspace(0, 2000, 101) + >>> hist(ph, bins, histtype='step', log=True) + >>> xlabel("Pulseheight [ADC]") + >>> ylabel("Counts") + >>> title("Pulseheight histogram (log scale)") + +The ``linspace`` function returns an array with range from 0 to 2000 with a +total number of 101 values. The first value is 0, the last is 2000. These are +the *edges* of the bins. So, 101 values means exactly 100 bins between 0 and +2000. The ``hist`` function will then plot a *stepped* histogram with a log +scale. Finally, we add some labels and a title. This is the result: + +.. image:: images/tutorial-hist-better.png + :width: 500px + +In this plot, the gamma and charged particle part of the spectrum are easy +to distinguish. The cut at 123 ADC is due to the trigger. The bump at +approximately 300 ADC is the so-called MIP (minimum ionizing particle) +peak. For an explanation of this plot and the features of the pulseheight +histogram, see `David's thesis +`_, +page 44–45, and 49–51. + + +Obtaining coincidences +---------------------- + +If you work with |hisparc| data, invariably you'll be interested in +*coincidences* between |hisparc| stations. That is, are there showers +which have been observed by multiple stations? To find out, we'll make +use of the :mod:`sapphire.analysis.coincidences` module. + + +Performing the search +^^^^^^^^^^^^^^^^^^^^^ + +Consider the following script, which you can hopefully understand by now +(note that the prompt (``>>>``) is absent, since this is a *script*:: + + import datetime + + import tables + + from sapphire import download_data, CoincidencesESD + + + STATIONS = [501, 503, 506] + START = datetime.datetime(2013, 1, 1) + END = datetime.datetime(2013, 1, 2) + + + if __name__ == '__main__': + station_groups = ['/s%d' % u for u in STATIONS] + + data = tables.open_file('data.h5', 'w') + for station, group in zip(STATIONS, station_groups): + download_data(data, group, station, START, END) + +At this point, we have downloaded data for three stations. Note that we +used the :mod:`sapphire.esd` for downloading. Thus, we have no traces +and the download is quick. Let's see what the datafile now contains:: + + >>> print(data) + data.h5 (File) '' + Last modif.: 'Mon Jan 14 17:34:39 2013' + Object Tree: + / (RootGroup) '' + /s501 (Group) 'Data group' + /s501/events (Table(70643,)) '' + /s503 (Group) 'Data group' + /s503/events (Table(34937,)) '' + /s506 (Group) 'Data group' + /s506/events (Table(68365,)) '' + +It contains three groups, one for each station. To search for +coincidences between these stations, we first initialize the +:class:`sapphire.analysis.coincidences.CoincidencesESD` class like so:: + + >>> coincidences = CoincidencesESD(data, '/coincidences', station_groups) + +From the documentation (click on the class above the example to go to the +documentation) it is clear that we have to specify the datafile +(``data``), the destination group (``/coincidences``) and the groups +containing the station data (``station_groups``). Once that's done, there +is an easy way to search for coincidences, process the events making up +the coincidences, and store them in the destination group:: + + >>> coincidences.search_and_store_coincidences(station_numbers=STATIONS) + 100%|######################################|Time: 0:00:02 + 100%|######################################|Time: 0:00:00 + +If you want to tweak the process using non-default parameters, see the +module documentation (:mod:`sapphire.analysis.coincidences`). For now, +let us turn to the results:: + + >>> print(data) + data.h5 (File) '' + Last modif.: 'Mon Jan 14 17:46:23 2013' + Object Tree: + / (RootGroup) '' + /coincidences (Group) u'' + /coincidences/c_index (VLArray(2184,)) '' + /coincidences/coincidences (Table(2184,)) '' + /coincidences/s_index (VLArray(3,)) '' + /s501 (Group) '' + /s501/events (Table(70643,)) '' + /s503 (Group) '' + /s503/events (Table(34937,)) '' + /s506 (Group) '' + /s506/events (Table(65935,)) '' + +The new addition is the ``/coincidences`` group. It contains three +tables, which are ``c_index``, ``coincidences`` and ``s_index``. +Information about the coincidences is stored in the ``coincidences`` +table. Let's look at the columns: + +=============== =========== +column description +=============== =========== +id an index number identifying the coincidence +timestamp the unix timestamp +nanoseconds the nanosecond part of the timestamp +ext_timestamp the timestamp in nanoseconds +N the number of stations taking part in the coincidence +x *compatibility reasons* +y *compatibility reasons* +azimuth *compatibility reasons* +zenith *compatibility reasons* +size *compatibility reasons* +energy *compatibility reasons* +s501 flag to indicate if the first station is in coincidence +s503 as previous but for second station +s506 as previous but for third station +=============== =========== + +The columns included for compatibility reasons are used by the event +simulation code. In that case, the ``x``, ``y`` columns give the +position in cartesian coordinates. Furthermore, the ``size`` and +``energy`` give the so-called *shower size*, and ``zenith`` and +``azimuth`` contain the direction of the (simulated) shower. These are +not known for certain when working with |hisparc| data, but are included +nonetheless. These columns are all set to 0.0. + +The ``c_index`` array is used as an index to look up the tables and +individual events making up a coincidence. The second coincidence is +accessed by:: + + >>> data.root.coincidences.coincidences[1] + (2L, 1356998460, 730384055L, 1356998460730384055L, 2, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, True, False, True) + +Remember, the indexes are zero-based. The coincidence id is also 2:: + + >>> data.root.coincidences.coincidences[2]['id'] + 2 + +and the number of stations participating is 2:: + + >>> data.root.coincidences.coincidences[2]['N'] + 2 + +To lookup the indexes of the events taking part in this coincidence, +access the ``c_index`` array using the same id:: + + >>> data.root.coincidences.c_index[2] + array([[ 0, 40], + [ 2, 57]], dtype=uint32) + +That is, event id 40 from station 0, event id 57 from station 2 are part +of this coincidence. The event observables are still stored in their +original location and can be accessed using the ids. To find the +location of the station group the ``s_index`` contains the paths to the +station groups.:: + + >>> data.root.coincidences.s_index[0] + '/s501' + >>> data.get_node('/s501', 'events')[40] + (40L, 1356998460, 730384055L, 1356998460730384055L, [2, 227, 301, 2], + [0, 1657, 3173, 0], 0.0, 0.5117999911308289, 0.9417999982833862, + 0.0, -999.0, 12.5, 57.5, -999.0, 62.5) + + +Downloading coincidences +^^^^^^^^^^^^^^^^^^^^^^^^ + +Just like events or weather data for a single station the ESD provides +coincidence data. This means that you can directly download coincidences from +the server. In most cases this can save a lot of disc space, because only +events in a coincidence will be stored. + +Downloading coincidences is very similar to downloading data. First import the +required packages, open a PyTables file, and specify the date/time *range*. +With coincidences two additional options are available, first you can select +which stations you want to consider. This can be *all* stations in the +network, by not specifying any. It can be a subset of stations by listing +those stations (upto 30 stations), or a cluster of stations by giving the name +of the cluster. + +So first import the packages:: + + >>> import datetime + >>> import tables + >>> from sapphire import esd + +Set the date/time range:: + + >>> start = datetime.datetime(2012, 12, 1) + >>> end = datetime.datetime(2012, 12, 3) + +Open (in this case create) a datafile:: + + >>> data = tables.open_file('data_coincidences.h5', 'w') + +Then download the coincidences. Here we specify the cluster 'Enschede' to +select all stations in that cluster. By setting *n* to 3 we require that a +coincidence has at least 3 events. + + >>> esd.download_coincidences(data, cluster='Enschede', + ... start=start, end=end, n=3) + +If you now look in the data file it will contain event tables for all stations +with at least one event in a coincidence, and a coincidence table for the +coincidence data. Just like when coincidences were searched manually:: + + >>> print(data) + Object Tree: + / (RootGroup) '' + /coincidences (Group) '' + /coincidences/c_index (VLArray(776,)) '' + /coincidences/coincidences (Table(776,)) '' + /coincidences/s_index (VLArray(124,)) '' + /hisparc (Group) '' + /hisparc/cluster_enschede (Group) '' + /hisparc/cluster_enschede/station_7001 (Group) '' + /hisparc/cluster_enschede/station_7001/events (Table(776,)) '' + /hisparc/cluster_enschede/station_7002 (Group) '' + /hisparc/cluster_enschede/station_7002/events (Table(776,)) '' + /hisparc/cluster_enschede/station_7003 (Group) '' + /hisparc/cluster_enschede/station_7003/events (Table(776,)) '' + + +.. rubric:: Footnotes + +.. [#event_id] + + Unique in this table. When data is downloaded for analysis and + combined with other data into one table, the ``event_id`` will be + different. To uniquely define an event, use a station number / + ``ext_timestamp`` combination. + + +Reconstructions +--------------- + +Reconstructing ESD Events +^^^^^^^^^^^^^^^^^^^^^^^^^ + +Assume ``data_s501.h5`` contains events downloaded from the ESD for station +501:: + + >>> import tables + >>> from sapphire import ReconstructESDEvents + >>> data = tables.open_file('data_s501.h5', 'a') + >>> station_path = '/s501' # location of the event table in datafile + >>> rec = ReconstructESDEvents(data, station_path, 501, verbose=True) + Constructed object from public database. + +The parameter ``verbose=True`` forces the reconstruction class to be +verbose about the metadata about station layout of timing offsets that is +being used. Here, a ``HiSPARCStations`` object is created which retrieves +metadata from the public database. + +Now let's reconstruct the events and store the results in the datafile:: + + >>> rec.reconstruct_and_store() + Reading detector offsets from public database. + 100%|#################################################|Time: 0:00:31 + 100%|#################################################|Time: 0:00:21 + +The reconstruction class notifies us that detector timing offsets are being +retrieved from the public database. First directions are reconstructed and +subsequently core positions are reconstructed. + +The results are stored in the datafile in the `reconstructions` group:: + + >>> print(data.root.s501.reconstructions) + /s501/reconstructions (Table(29569,)) '' + + >>> data.root.s501.reconstructions.col('zenith') + array([ nan, nan, nan, ..., nan, nan, 0.66482645], dtype=float32) + +The `nan` values in the zenith angle array are values that cannot be +reconstructed:: + + >>> from numpy import isnan + >>> theta = data.root.s501.reconstructions.col('zenith') + >>> theta = theta.compress(~isnan(theta)) + array([ 0.59542936, 0.74284476, 0.38334498, ..., 0.41376889, + 0.07834953, 0.66482645], dtype=float32) + + +Reconstructing simulated events +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Assume the datafile (`data`) contains simulated events, generated by +:class:`sapphire.simulations.groundparticles.GroundParticlesSimulation`. +This class stores the metadata of the simulated station (cluster) in the +hdf5 file, which can be read by the reconstruction class:: + + >>> rec = ReconstructESDEvents(data, station_path, 501, verbose=True) + Read cluster HiSPARCStations([501]) from datafile. + +The class has read the station (cluster object) from the datafile. This +cluster object contains both the detector locations as well as the +detector timing offsets:: + + >>> rec.reconstruct_and_store() + Read detector offsets from cluster object. + 100%|#################################################|Time: 0:00:31 + 100%|#################################################|Time: 0:00:21 + +Note that the detector (timing) offset from the datafile are used, +and not the offsets from the public database. + + +Reconstructing ESD coinicdences +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Coincidences can be reconstructed analogous to ESD Events:: + + >>> import tables + >>> from sapphire import ReconstructESDCoincidences + >>> data = tables.open_file('data_s501_s502_s503.h5', 'a') + >>> rec = ReconstructESDEvents(data, verbose=True) + Constructed cluster HiSPARCStations([501, 502, 503]) from public + database. + +The constructed cluster object is created from the stations in the +datafile. + +Reconstruct:: + + >>> rec.reconstruct_and_store() + Using timing offsets from public database. + 100%|#################################################|Time: 0:00:31 + 100%|#################################################|Time: 0:00:21 + +Reconstructing simulated coincidences +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The ``ReconstructESDCoincidences`` class can reconstruct simulated +coincidences, using the cluster objects stored by the simulation class +in the datafile analogous to ``ReconstructESDEvents``. diff --git a/_sources/utils.rst.txt b/_sources/utils.rst.txt new file mode 100644 index 00000000..c1eab3ae --- /dev/null +++ b/_sources/utils.rst.txt @@ -0,0 +1,6 @@ +Common utility functions +======================== + +.. automodule:: sapphire.utils + :members: + :undoc-members: diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 00000000..7ebbd6d0 --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,914 @@ +/* + * Sphinx stylesheet -- basic theme. + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin-top: 10px; +} + +ul.search li { + padding: 5px 0; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 00000000..0398ebb9 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,149 @@ +/* + * Base JavaScript utilities for all Sphinx HTML documentation. + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 00000000..7f51004a --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '2.0.0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/favicon.ico b/_static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2632b900af50d910fc8f276420be1a235eb8c5c2 GIT binary patch literal 4286 zcma)8OQ=p^6g}P|T?rWoWuhdBB+)f7VuUg?QA#Py#NZ~6%uEbSq`YEA29%V?0EHt` z2J*-sk;H^ZK5HF&9qa$j_shAhyZ5)(+IyXS`u}rpRgJ>Wym=LWSLdfz)y%4@762$! zYXH^s8_Yep%8@AK0+*P{Lcp#OA0^Jj(c*odD(L)}x&K;E~r z>Wbu*E2>8v;&&M}YY<*W-L9 z>U=iit*`M$t&QS5lGnUki}NHvyD>J;mb&OUX8g3$9BIWddM=*P^U%ykjXUceR$Ko8 ztIy77auy-I^U9@BbZuz(y`le4peG*rEOoDksmI3 z=QU{C=Tge$sXl4qJPv2R*YvFQ&OIG`^KR1&_IiIlGv~ysUuV}L=ie;(^O;`^-5B*z zPvrfo4~o{$Jud_6tu`8GzR!OE^1l@xt+(lUZ#Z^8)6rApgIgLNcjK&G^tYV7kMr4n zrnmbe*9?6Y8(#IScM0m;@n%-n-mg?=zmU~hfAZv9hrExMCUhNt@Y?|Te{>(^9ytqW z_v6`l=Hl~ua3z0!*Xh4lJ;>X=R8uU?r{2)Fzxo()_4(thcm0##eNK~me`t#HbAO$^ z-~9FY=KqS^eT8&+AJ5|4ANA%w21WIFKXUDV1^FU?-p^w0804LuS@T&q|I=5z_gF6f zi_l#K=)XZcBd+!yJU34MtuE_tc+>m+%l{>2Q}@|*@?-Rwo<|=_Z2$W?Wgck#y)X3g z=ib!ql*anoy;PGXX0-F2SB_ZZ3;w^dxkX>j&2-KDLcMQ)@rniieNj_iC%Uh4%feD*}=|8~EhJU9RLdC)W0u~w>w?g%(~pHQFA^*+^0kveI`doAZoqupn@ zM!kcg^|!v#l2bk?hGrjl`kzye=K7g4y#Bwr`V>2TZ}$wP-ma0D_QjZ%0zPkIs9*e&7HwA*Gi?bzRS`>xaX@NL}Age{e6|7$R=tOxy|7h&5U< IIh_pr22!tZkN^Mx literal 0 HcmV?d00001 diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_static/header.png b/_static/header.png new file mode 100644 index 0000000000000000000000000000000000000000..383625f38ea5244e6b401fe8d3de52432ba78d40 GIT binary patch literal 3210 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 wHt@W;Ps#ng(R*rXRPZYB0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/_static/nature.css b/_static/nature.css new file mode 100644 index 00000000..e26d936f --- /dev/null +++ b/_static/nature.css @@ -0,0 +1,245 @@ +/* + * Sphinx stylesheet -- nature theme. + */ + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Arial, sans-serif; + font-size: 100%; + background-color: #fff; + color: #555; + margin: 0; + padding: 0; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 230px; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.document { + background-color: #eee; +} + +div.body { + background-color: #ffffff; + color: #3E4349; + padding: 0 30px 30px 30px; + font-size: 0.9em; +} + +div.footer { + color: #555; + width: 100%; + padding: 13px 0; + text-align: center; + font-size: 75%; +} + +div.footer a { + color: #444; + text-decoration: underline; +} + +div.related { + background-color: #6BA81E; + line-height: 32px; + color: #fff; + text-shadow: 0px 1px 0 #444; + font-size: 0.9em; +} + +div.related a { + color: #E2F3CC; +} + +div.sphinxsidebar { + font-size: 0.75em; + line-height: 1.5em; +} + +div.sphinxsidebarwrapper{ + padding: 20px 0; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Arial, sans-serif; + color: #222; + font-size: 1.2em; + font-weight: normal; + margin: 0; + padding: 5px 10px; + background-color: #ddd; + text-shadow: 1px 1px 0 white +} + +div.sphinxsidebar h4{ + font-size: 1.1em; +} + +div.sphinxsidebar h3 a { + color: #444; +} + + +div.sphinxsidebar p { + color: #888; + padding: 5px 20px; +} + +div.sphinxsidebar p.topless { +} + +div.sphinxsidebar ul { + margin: 10px 20px; + padding: 0; + color: #000; +} + +div.sphinxsidebar a { + color: #444; +} + +div.sphinxsidebar input { + border: 1px solid #ccc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar .searchformwrapper { + margin-left: 20px; + margin-right: 20px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #005B81; + text-decoration: none; +} + +a:hover { + color: #E32E00; + text-decoration: underline; +} + +a:visited { + color: #551A8B; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Arial, sans-serif; + background-color: #BED4EB; + font-weight: normal; + color: #212224; + margin: 30px 0px 10px 0px; + padding: 5px 0 5px 10px; + text-shadow: 0px 1px 0 white +} + +div.body h1 { border-top: 20px solid white; margin-top: 0; font-size: 200%; } +div.body h2 { font-size: 150%; background-color: #C8D5E3; } +div.body h3 { font-size: 120%; background-color: #D8DEE3; } +div.body h4 { font-size: 110%; background-color: #D8DEE3; } +div.body h5 { font-size: 100%; background-color: #D8DEE3; } +div.body h6 { font-size: 100%; background-color: #D8DEE3; } + +a.headerlink { + color: #c60f0f; + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + background-color: #c60f0f; + color: white; +} + +div.body p, div.body dd, div.body li { + line-height: 1.5em; +} + +div.admonition p.admonition-title + p { + display: inline; +} + +div.note { + background-color: #eee; + border: 1px solid #ccc; +} + +div.seealso { + background-color: #ffc; + border: 1px solid #ff6; +} + +nav.contents, +aside.topic, +div.topic { + background-color: #eee; +} + +div.warning { + background-color: #ffe4e4; + border: 1px solid #f66; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre { + padding: 10px; + line-height: 1.2em; + border: 1px solid #C6C9CB; + font-size: 1.1em; + margin: 1.5em 0 1.5em 0; + -webkit-box-shadow: 1px 1px 1px #d8d8d8; + -moz-box-shadow: 1px 1px 1px #d8d8d8; +} + +code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ + font-size: 1.1em; + font-family: monospace; +} + +.viewcode-back { + font-family: Arial, sans-serif; +} + +div.viewcode-block:target { + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} + +div.code-block-caption { + background-color: #ddd; + color: #222; + border: 1px solid #C6C9CB; +} \ No newline at end of file diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 00000000..0d49244e --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #eeffcc; } +.highlight .c { color: #408090; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #333333 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #208050 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #208050 } /* Literal.Number.Bin */ +.highlight .mf { color: #208050 } /* Literal.Number.Float */ +.highlight .mh { color: #208050 } /* Literal.Number.Hex */ +.highlight .mi { color: #208050 } /* Literal.Number.Integer */ +.highlight .mo { color: #208050 } /* Literal.Number.Oct */ +.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #06287e } /* Name.Function.Magic */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ +.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 00000000..2c774d17 --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,632 @@ +/* + * Sphinx JavaScript utilities for the full-text search. + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename, kind] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +// Global search result kind enum, used by themes to style search results. +class SearchResultKind { + static get index() { return "index"; } + static get object() { return "object"; } + static get text() { return "text"; } + static get title() { return "title"; } +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename, kind] = item; + + let listItem = document.createElement("li"); + // Add a class representing the item's type: + // can be used by a theme's CSS selector for styling + // See SearchResultKind for the class names. + listItem.classList.add(`kind-${kind}`); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = Documentation.ngettext( + "Search finished, found one page matching the search query.", + "Search finished, found ${resultCount} pages matching the search query.", + resultCount, + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename, kind]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.setAttribute("role", "list"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename, kind]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score + boost, + filenames[file], + SearchResultKind.title, + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + SearchResultKind.index, + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + SearchResultKind.object, + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + SearchResultKind.text, + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 00000000..8a96c69a --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '

" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/analysis.html b/analysis.html new file mode 100644 index 00000000..80bcea4f --- /dev/null +++ b/analysis.html @@ -0,0 +1,163 @@ + + + + + + + + Data analysis — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Data analysis

+

Perform data analysis tasks on HiSPARC data

+

This package contains modules for performing various analysis tasks. Most of +the modules are used for automatic processing and reconstuction of traces, +events and coincidences and calculation of timing offsets.

+

The reconstruction classes from the reconstructions +module are often used interactively. Shower reconstructions, both from ESD- +and simulated data are performed by the classes from +direction_reconstruction and +core_reconstruction to reconstruct events. But users +only need to deal with reconstructions.

+
+

Modules in this package:

+
+
calibration

determine timing calibration values

+
+
coincidence_queries

filter coincidences analysed with +CoincidencesESD

+
+
coincidences

search for coincidences between HiSPARC stations

+
+
core_reconstruction

shower core and shower size reconstruction

+
+
direction_reconstruction

EAS direction reconstruction

+
+
event_utils

get data from processed events

+
+
find_mpv

find the MIP peak MPV in pulseintegral data

+
+
landau

Landau distribution

+
+
process_events

process HiSPARC events

+
+
process_traces

process HiSPARC traces

+
+
reconstructions

perform shower reconstructions

+
+
signal_calibration

determine signal calibration values

+
+
time_deltas

determine time deltas for station pairs

+
+
+
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/analysis/calibration.html b/analysis/calibration.html new file mode 100644 index 00000000..02192975 --- /dev/null +++ b/analysis/calibration.html @@ -0,0 +1,366 @@ + + + + + + + + Data timing and signal calibration — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Data timing and signal calibration

+

Determine calibration values for data

+

This module can be used to determine calibration values from data.

+

Determine timing offsets for detectors and stations to correct arrival times. +Determine the PMT response curve to correct the detected number of MIPs.

+
+
+sapphire.analysis.calibration.determine_detector_timing_offsets(events, station=None)
+

Determine the timing offsets between station detectors.

+
+
Parameters:
+
    +
  • events – events table of processed events.

  • +
  • stationsapphire.clusters.Station object, to determine +number of detectors and relative altitudes.

  • +
+
+
Returns:
+

list of detector offsets.

+
+
+
+ +
+
+sapphire.analysis.calibration.determine_detector_timing_offset(dt, dz=0)
+

Determine the timing offset between station detectors.

+
+
Parameters:
+
    +
  • dt – array of time differences between detectors (t - t_ref).

  • +
  • dz – height difference between the detectors (z - z_ref).

  • +
+
+
Returns:
+

mean of a gaussian fit to the data corrected for height, and +the error of the mean.

+
+
+
+ +
+
+class sapphire.analysis.calibration.DetermineStationTimingOffsets(stations=None, data=None, progress=False, force_stale=False, time_deltas_group='/coincidences/time_deltas')
+

Determine the timing offsets between stations

+

Initialize the class

+
+
Parameters:
+
    +
  • stations – list of stations for which to determine offsets.

  • +
  • data – the PyTables datafile with timedelta tables.

  • +
  • progress – if True show progressbar when determining offsets.

  • +
  • force_stale – if true: do not get network information from API.

  • +
  • time_deltas_group – path to the time deltas group.

  • +
+
+
+
+
+MAX_DISTANCE = 1000
+
+ +
+
+MIN_LEN_DT = 200
+
+ +
+
+read_dt(station, ref_station, start, end)
+

Read timedeltas from HDF5 file

+
+ +
+
+determine_first_and_last_date(date, station, ref_station)
+

Determine first and last date to include in determination of +station offset around date

+
+
Parameters:
+
    +
  • date – date around which the bounds are to be determined.

  • +
  • station – station number.

  • +
  • ref_station – reference station number.

  • +
+
+
Returns:
+

start and end date bounds.

+
+
+
+ +
+
+determine_station_timing_offset(date, station, ref_station)
+

Determine the timing offset between a station pair at certain date

+
+
Parameters:
+
    +
  • date – date for which to determine offset as datetime.date.

  • +
  • station – station number.

  • +
  • ref_station – reference station number.

  • +
+
+
Returns:
+

station offset and error.

+
+
+
+ +
+
+determine_station_timing_offsets(station, ref_station, start=None, end=None)
+

Determine the timing offsets between a station pair

+
+
Parameters:
+
    +
  • station – station number.

  • +
  • ref_station – reference station number.

  • +
  • start – datetime.date object.

  • +
  • end – datetime.date object.

  • +
+
+
Returns:
+

list of station offsets as tuple (timestamp, offset, error).

+
+
+
+ +
+
+determine_station_timing_offsets_for_date(date)
+

Determine the timing offsets between a station pair

+
+
Parameters:
+

date – date for which to determine offsets as datetime.date.

+
+
Returns:
+

list of station offsets as tuple +(station, ref_station, offset, error).

+
+
+
+ +
+
+get_station_pairs_within_max_distance(date=None)
+

Iterator that yields stations pairs that are close to each other

+
+ +
+ +
+
+sapphire.analysis.calibration.determine_station_timing_offset(dt, dz=0)
+

Determine the timing offset between stations.

+
+
Parameters:
+
    +
  • dt – a list of time differences between stations (t - t_ref).

  • +
  • dz – height difference between the stations (z - z_ref).

  • +
+
+
Returns:
+

mean of a gaussian fit to the data corrected for height, and +the error of the mean.

+
+
+
+ +
+
+sapphire.analysis.calibration.fit_timing_offset(dt, bins)
+

Fit the time difference distribution.

+
+
Parameters:
+
    +
  • dt – a list of time differences between stations (t - t_ref).

  • +
  • bins – bins edges to use for the histogram.

  • +
+
+
Returns:
+

mean of a gaussian fit to the data and the error of the mean.

+
+
+
+ +
+
+sapphire.analysis.calibration.determine_best_reference(filters)
+

Find which detector has most events in common with the others

+
+
Parameters:
+

filters – list of filters for each detector, selecting rows +where that detector has data.

+
+
Returns:
+

index for the detector that has most rows in common with +the other detectors.

+
+
+
+ +
+
+sapphire.analysis.calibration.datetime_range(start, end, step=1)
+

Generator that splits a date range in (almost) equal intervals

+

The yielded interval lengths are integer days +Spreads remaining days over first intervals

+
+
Parameters:
+
    +
  • start – date instance

  • +
  • end – date instance

  • +
  • step – the integer number of days in each interval

  • +
+
+
Returns:
+

a tuple of datetime instances for each interval

+
+
+
+ +
+
+sapphire.analysis.calibration.pairwise(iterable)
+

s -> (s0, s1), (s1, s2), (s2, s3), …

+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/analysis/coincidence_queries.html b/analysis/coincidence_queries.html new file mode 100644 index 00000000..242f0542 --- /dev/null +++ b/analysis/coincidence_queries.html @@ -0,0 +1,387 @@ + + + + + + + + Query coincidences from a datafile — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Query coincidences from a datafile

+
+
+class sapphire.analysis.coincidence_queries.CoincidenceQuery(data, coincidence_group='/coincidences')
+

Perform queries on an ESD file where coincidences have been analysed.

+

Functions in this class build and perform queries to easily filter +coincidences based on station participation and station +organization. This assumes coincidences have been analysed using +CoincidencesESD.

+

First initiate the class so it can get the correct tables, then get +coincidences using one of the functions (all_coincidences, any, all, +at_least), then get the events for these coincidences using other +functions (all_events, events_from_[stations, subcluster, cluster]).

+

An exception will occur when you include a station in a query that +does not occur in the datafile.

+

Example usage:

+
>>> from sapphire import CoincidenceQuery
+>>> cq = CoincidenceQuery('2013_8_1.h5')
+>>> coincidences = cq.all([501, 502, 503, 504], iterator=True)
+>>> events = cq.all_events(coincidences)
+>>> specific_events = cq.events_from_stations(coincidences,
+...                                          [501, 502, 503, 504])
+>>> cq.finish()
+
+
+

Setup variables to point to the tables

+
+
Parameters:
+
    +
  • data – either a PyTables file or path to a HDF5 file.

  • +
  • coincidence_group – path to the coincidences group.

  • +
+
+
+
+
+finish()
+

Clean-up after using

+

Do not use if you opened the file yourself and still intent to +use it.

+
+ +
+
+all_coincidences(iterator=False)
+

Get all coincidences

+
+
Returns:
+

all coincidences.

+
+
+
+ +
+
+any(stations, start=None, stop=None, iterator=False)
+

Filter for coincidences that contain any of the given stations

+
+
Parameters:
+

stations – list of stations from which any need to be in +a coincidence.

+
+
Returns:
+

coincidences matching the query.

+
+
+
+ +
+
+all(stations, start=None, stop=None, iterator=False)
+

Filter for coincidences that contain all of the given stations

+
+
Parameters:
+

stations – list of stations which all need to be in a +coincidence.

+
+
Returns:
+

coincidences matching the query.

+
+
+
+ +
+
+at_least(stations, n, start=None, stop=None, iterator=False)
+

Filter coincidences to contain at least n of the given stations

+
+
Parameters:
+
    +
  • stations – list of stations from which any at least n of +any combinations need to be in a coincidence.

  • +
  • n – minimum number of given stations to be in a coincidence.

  • +
+
+
Returns:
+

coincidences matching the query.

+
+
+
+ +
+
+timerange(start, stop, iterator=False)
+

Query based on timestamps

+
+
Parameters:
+
    +
  • start – timestamp from which to look for coincidences.

  • +
  • stop – end timestamp for coincidences.

  • +
+
+
Returns:
+

coincidences within the specified timerange.

+
+
+
+ +
+
+perform_query(query, iterator=False)
+

Perform a query on the coincidences table

+
+
Parameters:
+

query – a valid PyTables query string for the coincidences +table.

+
+
Returns:
+

coincidences matching the query.

+
+
+
+ +
+
+all_events(coincidences, n=0)
+

Get all events for the given coincidences.

+
+
Parameters:
+
    +
  • coincidences – list of coincidence rows.

  • +
  • n – minimum number of events per coincidence.

  • +
+
+
Returns:
+

list of events for each coincidence.

+
+
+
+ +
+
+all_reconstructions(coincidences, n=0)
+

Get all reconstructed events for the given coincidences.

+
+
Parameters:
+
    +
  • coincidences – list of coincidence rows.

  • +
  • n – minimum number of events per coincidence.

  • +
+
+
Returns:
+

list of reconstructed events for each coincidence.

+
+
+
+ +
+
+minimum_events_for_coincidence(coincidences_events, n=2)
+

Filter coincidences to only include those with at least n events.

+
+
Parameters:
+
    +
  • coincidences_events – list of events for each coincidence.

  • +
  • n – minimum number of events per coincidence.

  • +
+
+
+
+ +
+
+events_from_stations(coincidences, stations, n=2)
+

Only get events for specific stations for coincidences.

+
+
Parameters:
+
    +
  • coincidences – list of coincidence rows.

  • +
  • stations – list of station numbers to filter events for.

  • +
+
+
Returns:
+

list of filtered events for each coincidence.

+
+
+
+ +
+
+reconstructions_from_stations(coincidences, stations, n=2)
+

Only get reconstructions for specific stations for coincidences.

+
+
Parameters:
+
    +
  • coincidences – list of coincidence rows.

  • +
  • stations – list of station numbers to filter events for.

  • +
+
+
Returns:
+

list of filtered reconstructed events for each coincidence.

+
+
+
+ +
+
+events_in_subcluster(coincidences, subcluster, n=2)
+

Filter to only events from stations in a specific subcluster

+
+
Parameters:
+
    +
  • coincidences – list of events for each coincidence.

  • +
  • subcluster – subcluster number to filter events for.

  • +
+
+
Returns:
+

tuples of station numbers and events for matched events.

+
+
+
+ +
+
+events_in_cluster(coincidences, cluster, n=2)
+

Filter to only events from stations in a specific subcluster

+
+
Parameters:
+
    +
  • coincidences – list of events for each coincidence.

  • +
  • cluster – cluster number to filter events for.

  • +
+
+
Returns:
+

tuples of station numbers and events for matched events.

+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/analysis/coincidences.html b/analysis/coincidences.html new file mode 100644 index 00000000..1f706326 --- /dev/null +++ b/analysis/coincidences.html @@ -0,0 +1,485 @@ + + + + + + + + Search for coincidences between HiSPARC stations — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Search for coincidences between HiSPARC stations

+

Search for coincidences between HiSPARC stations

+

This module can be used to search for coincidences between several +HiSPARC stations. To skip this and directly download coincidences +use download_coincidences(), this is slightly +less flexible because you can not choose the coincidence window.

+

For regular usage, download events from the ESD and use the +CoincidencesESD class. Example usage:

+
import datetime
+
+import tables
+
+from sapphire import CoincidencesESD, download_data
+
+STATIONS = [501, 503, 506]
+START = datetime.datetime(2013, 1, 1)
+END = datetime.datetime(2013, 1, 2)
+
+
+if __name__ == '__main__':
+    station_groups = ['/s%d' % u for u in STATIONS]
+
+    data = tables.open_file('data.h5', 'w')
+    for station, group in zip(STATIONS, station_groups):
+        download_data(data, group, station, START, END)
+
+    coin = CoincidencesESD(data, '/coincidences', station_groups)
+    coin.search_and_store_coincidences()
+
+
+
+
+class sapphire.analysis.coincidences.Coincidences(data, coincidence_group, station_groups, overwrite=False, progress=True)
+

Search for and store coincidences between HiSPARC stations.

+
+

Note

+

For better compatibility with other modules, such as +reconstructions, it is recommended to use the +subclass CoincidencesESD instead. This is an old class with a +different way to store the results. It can be used, however, on raw +data downloaded from the public database.

+
+

Suppose you want to search for coincidences between stations 501 and +503. First, download the data for these stations (with, or without +traces, depending on your intentions). Suppose you stored the data in +the ‘/s501’ and ‘/s503’ groups in the ‘data.h5’ file. Then:

+
>>> groups = ['/s501', '/s503']
+>>> with Coincidences('data.h5', '/coincidences', groups) as coin:
+...     coin.search_and_store_coincidences()
+
+
+

If you want a more manual method, replace the last line the separate +methods which it calls:

+
>>> with Coincidences('data.h5', '/coincidences', groups) as coin:
+...     coin.search_coincidences(window=50000)
+...     coin.process_events()
+...     coin.store_coincidences()
+
+
+

You can then provide different parameters to the individual methods. +See the corresponding docstrings.

+

Once the coincidences are stored, there will be a coincidences table in +the group. This table has multiple columns used for storing simulation +inputs like shower direction and energy. At this point, they contain no +information. They are only useful if the original event tables were created +by simulations, instead of real detector data. The useful columns are:

+
+
    +
  • id: the index of this coincidence. This index is identical for +the coincidence and c_index tables.

  • +
  • timestamp: the timestamp of the event in seconds

  • +
  • nanoseconds: the subsecond part of the timestamp in nanoseconds

  • +
  • ext_timestamp: the timestamp of the event in nanoseconds (equal +to timestamp * 1000000000 + nanoseconds)

  • +
  • N: the number of stations participating in this coincidence

  • +
  • s0, s1, …: whether the first (0), second (1) or other +stations participated in the coincidence.

  • +
+
+

The coincidences group furthermore contains the table c_index to track +down the individual events making up the coincidence. The c_index table +gives indexes for the individual events inside the original event tables.

+

If you have obtained a particular coincidence from the coincidences +table, the id is the index into all these tables. For example, looking +up the source events making up the 40th coincidence:

+
>>> group = data.root.coincidences
+>>> idx = 40
+>>> group.coincidences[idx]
+
+
+

can be done in the following way (each row in the c_index table is a +(station index, event index) pair):

+
>>> for event_idx in group.c_index[idx]:
+...     event = group.observables[event_idx]
+
+
+

The event is one of the source events, processed to determine particle +arrival times from the raw traces (if available). It has a +station_id attribute which is an index into station_groups.

+

Initialize the class.

+
+
Parameters:
+
    +
  • data – either a PyTables file or path to a HDF5 file.

  • +
  • coincidence_group – the destination group. If None the results +can not be stored, but coincidences can still be searched for.

  • +
  • station_groups – a list of groups containing the station data.

  • +
  • overwrite – if True overwrite a previous coincidences group.

  • +
  • progress – if True show a progressbar while storing coincidences.

  • +
+
+
+
+
+search_and_store_coincidences(window=10000)
+

Search, process and store coincidences.

+

This is a semi-automatic method to search for coincidences, +process the events making up the coincidences and then store the +results in the coincidences group.

+

If you want to make use of non-default parameters like time +shifts or overwriting previously processed events, please call +the individual methods. See the class docstring.

+
+ +
+
+search_coincidences(window=10000, shifts=None, limit=None)
+

Search for coincidences.

+

Search all data in the station_groups for coincidences, and store +rudimentary coincidence data in the coincidences group. This data +might be useful, but is very basic. You can call the +store_coincidences() method to store the coincidences in an +easier format in the coincidences group.

+

If you want to process the preliminary results: they are stored in +_src_c_index and _src_timestamps. The former is a list of +coincidences, which each consist of a list with indexes into the +timestamps array as a pointer to the events making up the +coincidence. The latter is a list of tuples. Each tuple consists +of a timestamp followed by an index into the stations list which +designates the detector station which measured the event, and +finally an index into that station’s event table.

+
+
Parameters:
+
    +
  • window – the coincidence time window in nanoseconds. All events +with delta t’s smaller than this window will be considered a +coincidence.

  • +
  • shifts – optionally shift a station’s data in time. This +can be useful if a station has a misconfigured GPS clock. +Expects a list of shifts, one for each station, in seconds. +Use ‘None’ for no shift.

  • +
  • limit – optionally limit the search for this number of +events.

  • +
+
+
+
+ +
+
+process_events(overwrite=None)
+

Process events using process_events

+

Events making up the coincidences are processed to obtain +observables like number of particles and particle arrival times.

+
+
Parameters:
+

overwrite – if True, overwrite the events tables in the +station groups.

+
+
+
+ +
+
+store_coincidences()
+

Store the previously found coincidences.

+

After you have searched for coincidences, you can store the +more user-friendly results in the coincidences group using this +method.

+
+ +
+ +
+
+class sapphire.analysis.coincidences.CoincidencesESD(data, coincidence_group, station_groups, overwrite=False, progress=True)
+

Store coincidences specifically using the ESD

+

This is a subclass of Coincidences. This subclass stores the paths +to the station_groups that where used to look for coincidences in a +lookup-table. The c_index stores the station and event id for each event in +the coincidence, allowing you to find the original event row.

+

Suppose you want to search for coincidences between stations 501 and 503. +First, download the data for these stations from the ESD. Suppose you +stored the data in the ‘/s501’ and ‘/s503’ groups in the file ‘data.h5’. +Then:

+
>>> groups = ['/s501', '/s503']
+>>> with CoincidencesESD('data.h5', '/coincidences', groups) as coin:
+...     coin.search_and_store_coincidences(station_numbers=[501, 503])
+
+
+

If you want a more manual method, replace the last line with, for example:

+
>>> with CoincidencesESD('data.h5', '/coincidences', groups) as coin:
+...     coin.search_coincidences(5000, shifts=[None, 10], limit=100)
+...     coin.store_coincidences(station_numbers=[501, 503])
+
+
+

You can then provide different parameters to the individual methods. +See the corresponding docstrings for more details.

+

Once the coincidences are stored, there will be a coincidences table in +the group. This table has multiple columns used for storing simulation +inputs like shower direction and energy. At this point, they contain no +information. They are only used if the event and coincidence tables were +created by simulations, instead of real detector data. The useful columns +are:

+
+
    +
  • id: the index of this coincidence. This index is identical for +the coincidence and c_index tables.

  • +
  • timestamp: the timestamp of the event in seconds

  • +
  • nanoseconds: the subsecond part of the timestamp in nanoseconds

  • +
  • ext_timestamp: the timestamp of the event in nanoseconds (equal +to timestamp * 1000000000 + nanoseconds)

  • +
  • N: the number of stations participating in this coincidence

  • +
  • s501, s503, …: for each station indicate whether it +participated in the coincidence.

  • +
+
+

The coincidences group furthermore contains the tables s_index and +c_index to track down the individual events making up the coincidence. +The s_index table contains a row for each station, pointing to the +station’s event tables. The c_index table gives indexes for the +individual events inside those tables.

+

If you have obtained a particular coincidence from the coincidences +table, the id is the index into all these tables. For example, looking +up the source events making up the 40th coincidence:

+
>>> group = data.root.coincidences
+>>> idx = 40
+>>> group.coincidences[idx]
+
+
+

can be done in the following way (each row in the c_index table is a +(station index, event index) pair):

+
>>> for station_idx, event_idx in group.c_index[idx]:
+...     station_path = group.s_index[station_idx]
+...     event_group = data.get_node(station_path, 'events')
+...     event = event_group[event_idx]
+
+
+

The event is one of the events in the coincidence.

+

Coincidences stored by this class can easily be searched by using +a CoincidenceQuery object.

+

Initialize the class.

+
+
Parameters:
+
    +
  • data – either a PyTables file or path to a HDF5 file.

  • +
  • coincidence_group – the destination group. If None the results +can not be stored, but coincidences can still be searched for.

  • +
  • station_groups – a list of groups containing the station data.

  • +
  • overwrite – if True overwrite a previous coincidences group.

  • +
  • progress – if True show a progressbar while storing coincidences.

  • +
+
+
+
+
+search_and_store_coincidences(window=10000, station_numbers=None)
+

Search and store coincidences.

+

This is a semi-automatic method to search for coincidences +and then store the results in the coincidences group.

+
+ +
+
+search_coincidences(window=10000, shifts=None, limit=None)
+

Search for coincidences.

+

Search all data in the station_groups for coincidences, and store +rudimentary coincidence data in attributes. This data might be useful, +but is very basic. You can call the store_coincidences() method +to store the coincidences in an easier format in the coincidences +group.

+

If you want to process the preliminary results: they are stored in the +attributes _src_c_index and _src_timestamps. The +former is a list of coincidences, which each consist of a list with +indexes into the timestamps array as a pointer to the events making up +the coincidence. The latter is a list of tuples. Each tuple consists +of a timestamp followed by an index into the stations list which +designates the detector station which measured the event, and finally +an index into that station’s event table.

+
+
Parameters:
+
    +
  • window – the coincidence time window. All events with delta +t’s smaller than this window will be considered a coincidence.

  • +
  • shifts – optionally shift a station’s data in time. This +can be useful if a station has a misconfigured GPS clock. +Expects a list of shifts, one for each station.

  • +
  • limit – optionally limit the search for this number of +events.

  • +
+
+
+
+ +
+
+store_coincidences(station_numbers=None)
+

Store the previously found coincidences.

+

After having searched for coincidences, you can store the more +user-friendly results in the coincidences group using this +method. It also created a c_index and s_index table to +find the source events.

+
+
Parameters:
+

station_numbers – optional list of station_numbers. +If given these will be used to attach correct numbers to the +station column names in the coincidences table. Otherwise +they will simply be numbered by id. This list must be the +same length as the station_groups.

+
+
+
+ +
+ +
+
+sapphire.analysis.coincidences.get_events(data, stations, coincidence, timestamps, get_raw_traces=False)
+

Get event data of a coincidence

+

Return a list of events making up a coincidence.

+
+
Parameters:
+
    +
  • data – the PyTables data file

  • +
  • stations – a list of HiSPARC event tables (normally from +different stations, hence the name)

  • +
  • coincidence – a coincidence, as returned by +search_coincidences().

  • +
  • timestamps – the list of timestamps, as returned by +search_coincidences().

  • +
  • get_raw_traces – boolean. If true, return the raw ADC +values instead of the baseline corrected traces.

  • +
+
+
Returns:
+

a list of tuples. Each tuple consists of (station, event, +traces), where event is the event row from PyTables and traces is +a list of the uncompressed traces.

+
+
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/analysis/core_reconstruction.html b/analysis/core_reconstruction.html new file mode 100644 index 00000000..8b6ec5bb --- /dev/null +++ b/analysis/core_reconstruction.html @@ -0,0 +1,494 @@ + + + + + + + + Reconstruction of EAS core and size — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Reconstruction of EAS core and size

+

Core reconstruction

+

This module contains two classes that can be used to reconstruct +HiSPARC events and coincidences. The classes know how to extract the +relevant information from the station and event or cluster and +coincidence. Various algorithms which do the reconstruction are also +defined here. The algorithms require positions and particle densties to +do the reconstruction.

+

Each algorithm has a reconstruct_common() +method which always requires particle denisties, x, and y positions +and optionally z positions and previous reconstruction results. The +data is then prepared for the algorithm and passed to +the reconstruct() method which returns the +reconstructed x and y coordinates.

+
+
+class sapphire.analysis.core_reconstruction.EventCoreReconstruction(station)
+

Reconstruct core for station events

+

This class is aware of ‘events’ and ‘stations’. Initialize this class +with a ‘station’ and you can reconstruct events using +reconstruct_event().

+
+
Parameters:
+

stationsapphire.clusters.Station object.

+
+
+
+
+reconstruct_event(event, detector_ids=None, initial=None)
+

Reconstruct a single event

+
+
Parameters:
+
    +
  • event – an event (e.g. from an events table), or any +dictionary-like object containing the keys necessary for +reconstructing the direction of a shower (e.g. number of mips).

  • +
  • detector_ids – list of the detectors to use for +reconstruction. The detector ids are 0-based, unlike the +column names in the esd data.

  • +
  • initial – dictionary with already reconstructed shower +parameters.

  • +
+
+
Returns:
+

(x, y) core position in m.

+
+
+
+ +
+
+reconstruct_events(events, detector_ids=None, progress=True, initials=None)
+

Reconstruct events

+
+
Parameters:
+
    +
  • events – the events table for the station from an ESD data +file.

  • +
  • detector_ids – detectors which use for the reconstructions.

  • +
  • progress – if True show a progress bar while reconstructing.

  • +
  • initials – list of dictionaries with already reconstructed shower +parameters.

  • +
+
+
Returns:
+

(x, y) core positions in m.

+
+
+
+ +
+ +
+
+class sapphire.analysis.core_reconstruction.CoincidenceCoreReconstruction(cluster)
+

Reconstruct core for coincidences

+

This class is aware of ‘coincidences’ and ‘clusters’. Initialize +this class with a ‘cluster’ and you can reconstruct a coincidence +using reconstruct_coincidence().

+
+
Parameters:
+

clustersapphire.clusters.BaseCluster object.

+
+
+
+
+reconstruct_coincidence(coincidence, station_numbers=None, initial=None)
+

Reconstruct a single coincidence

+
+
Parameters:
+
    +
  • coincidence – a coincidence list consisting of +multiple (station_number, event) tuples

  • +
  • station_numbers – list of station numbers, to only use +events from those stations.

  • +
  • initial – dictionary with already reconstructed shower +parameters.

  • +
+
+
Returns:
+

(x, y) core position in m.

+
+
+
+ +
+
+reconstruct_coincidences(coincidences, station_numbers=None, progress=True, initials=None)
+

Reconstruct all coincidences

+
+
Parameters:
+
    +
  • coincidences – a list of coincidences, each consisting of +multiple (station_number, event) tuples.

  • +
  • station_numbers – list of station numbers, to only use +events from those stations.

  • +
  • progress – if True show a progress bar while reconstructing.

  • +
  • initials – list of dictionaries with already reconstructed shower +parameters.

  • +
+
+
Returns:
+

(x, y) core positions in m.

+
+
+
+ +
+ +
+
+class sapphire.analysis.core_reconstruction.CoincidenceCoreReconstructionDetectors(cluster)
+

Reconstruct core for coincidences using each detector

+

Instead of using the average station particle density this class +uses the particle density in each detector for the reconstruction.

+
+
+reconstruct_coincidence(coincidence, station_numbers=None, initial=None)
+

Reconstruct a single coincidence

+
+
Parameters:
+
    +
  • coincidence – a coincidence list consisting of +multiple (station_number, event) tuples

  • +
  • station_numbers – list of station numbers, to only use +events from those stations.

  • +
  • initial – dictionary with already reconstructed shower +parameters.

  • +
+
+
Returns:
+

(x, y) core position in m.

+
+
+
+ +
+ +
+
+class sapphire.analysis.core_reconstruction.BaseCoreAlgorithm
+

No actual core reconstruction algorithm

+

Simply returns (nan, nan) as core.

+
+
+classmethod reconstruct_common(p, x, y, z=None, initial=None)
+

Reconstruct core position

+
+
Parameters:
+
    +
  • p – detector particle density in m^-2.

  • +
  • x,y – positions of detectors in m.

  • +
  • z – height of detectors in m.

  • +
  • initial – dictionary containing values from previous +reconstructions.

  • +
+
+
Returns:
+

reconstructed core position.

+
+
+
+ +
+
+static reconstruct()
+

Reconstruct core position

+
+
Returns:
+

reconstructed core position.

+
+
+
+ +
+ +
+
+class sapphire.analysis.core_reconstruction.CenterMassAlgorithm
+

Simple core estimator

+

Estimates the core by center of mass of the measurements.

+
+
+classmethod reconstruct_common(p, x, y, z=None, initial=None)
+

Reconstruct core position

+
+
Parameters:
+
    +
  • p – detector particle density in m^-2.

  • +
  • x,y – positions of detectors in m.

  • +
  • z – height of detectors is ignored.

  • +
  • initial – dictionary containing values from previous +reconstructions.

  • +
+
+
Returns:
+

reconstructed core position.

+
+
+
+ +
+
+static reconstruct(p, x, y)
+

Calculate center of mass

+
+
Parameters:
+
    +
  • p – detector particle density in m^-2.

  • +
  • x,y – positions of detectors in m.

  • +
+
+
Returns:
+

reconstructed core position.

+
+
+
+ +
+ +
+
+class sapphire.analysis.core_reconstruction.AverageIntersectionAlgorithm
+

Core estimator

+

To the densities in 3 stations correspond 2 possible cores. The line +through these points is quite stable for the lateral distribution function. +To each combination of 3 stations out of a set of at least 4 +stations hit corresponds a line. To each combinations of 2 lines out of +the set of lines corresponds a point of intersection (if the 2 lines are +not collinear). Taking the cloud of intersection points close to the core +estimated by the center of mass, and averaging the positions in this cloud +results in an estimation for the core.

+
+
+classmethod reconstruct_common(p, x, y, z=None, initial=None)
+

Reconstruct core

+
+
Parameters:
+
    +
  • p – detector particle density in m^-2.

  • +
  • x,y – positions of detectors in m.

  • +
  • z – height of detectors is ignored.

  • +
  • initial – dictionary containing values from previous +reconstructions.

  • +
+
+
Returns:
+

reconstructed core position.

+
+
+
+ +
+
+static select_newlist(newx, newy, xpointlist, ypointlist, distance)
+

Select intersection points in square around the mean of old list.

+
+ +
+ +
+
+class sapphire.analysis.core_reconstruction.EllipsLdfAlgorithm
+

Simple core estimator

+

Estimates the core by center of mass of the measurements.

+
+
+classmethod reconstruct_common(p, x, y, z=None, initial=None)
+

Reconstruct core position

+
+
Parameters:
+
    +
  • p – detector particle density in m^-2.

  • +
  • x,y – positions of detectors in m.

  • +
  • z – height of detectors is ignored.

  • +
  • initial – dictionary containing values from previous +reconstructions: zenith and azimuth.

  • +
+
+
Returns:
+

reconstructed core position.

+
+
+
+ +
+
+classmethod reconstruct(p, x, y, theta, phi)
+

Reconstruct the number of electrons that fits best.

+
+
Parameters:
+
    +
  • p – detector particle density in m^-2.

  • +
  • x,y – positions of detectors in m.

  • +
  • theta,phi – zenith and azimuth angle in rad.

  • +
+
+
Returns:
+

reconstructed core position, chi square, and shower size.

+
+
+
+ +
+
+static selectbest(p, x, y, xstart, ystart, factorbest, chi2best, gridsize, theta, phi)
+

selects the best core position in grid around (xstart, ystart).

+
+
Parameters:
+
    +
  • p – detector particle density in m^-2.

  • +
  • x,y – positions of detectors in m.

  • +
  • xcmass,ycmass – start position of core in m.

  • +
+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/analysis/direction_reconstruction.html b/analysis/direction_reconstruction.html new file mode 100644 index 00000000..25ab8596 --- /dev/null +++ b/analysis/direction_reconstruction.html @@ -0,0 +1,1014 @@ + + + + + + + + Reconstruction of EAS direction — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Reconstruction of EAS direction

+

Direction reconstruction

+

This module contains two classes that can be used to reconstruct +HiSPARC events and coincidences. The classes know how to extract the +relevant information from the station and event or cluster and +coincidence. Various algorithms which do the reconstruction are also +defined here. The algorithms require positions and arrival times to +do the reconstruction.

+

Each algorithm has a reconstruct_common() +method which always requires arrival times, x, and y positions and +optionally z positions and previous reconstruction results. The data +is then prepared for the algorithm and passed to +the reconstruct() method which returns the +reconstructed theta and phi coordinates.

+
+
+class sapphire.analysis.direction_reconstruction.EventDirectionReconstruction(station)
+

Reconstruct direction for station events

+

This class is aware of ‘events’ and ‘stations’. Initialize this class +with a ‘station’ and you can reconstruct events using +reconstruct_event(). To use other algorithms overwrite the +direct and fit attributes.

+
+
Parameters:
+

stationsapphire.clusters.Station object.

+
+
+
+
+reconstruct_event(event, detector_ids=None, offsets=[0.0, 0.0, 0.0, 0.0], initial=None)
+

Reconstruct a single event

+
+
Parameters:
+
    +
  • event – an event (e.g. from an events table), or any +dictionary-like object containing the keys necessary for +reconstructing the direction of a shower (e.g. arrival times).

  • +
  • detector_ids – list of the detectors to use for +reconstruction. The detector ids are 0-based, unlike the +column names in the esd data.

  • +
  • offsets – time offsets for each detector or a +Station object.

  • +
  • initial – dictionary with already fitted shower parameters.

  • +
+
+
Returns:
+

theta, phi, and detector ids.

+
+
+
+ +
+
+reconstruct_events(events, detector_ids=None, offsets=[0.0, 0.0, 0.0, 0.0], progress=True, initials=None)
+

Reconstruct events

+
+
Parameters:
+
    +
  • events – the events table for the station from an ESD data file.

  • +
  • detector_ids – detectors to use for the reconstructions.

  • +
  • offsets – time offsets for each detector or a +Station object.

  • +
  • progress – if True show a progress bar while reconstructing.

  • +
  • initials – list of dictionaries with already reconstructed shower +parameters.

  • +
+
+
Returns:
+

list of theta, phi, and detector ids.

+
+
+
+ +
+ +
+
+class sapphire.analysis.direction_reconstruction.CoincidenceDirectionReconstruction(cluster)
+

Reconstruct direction for coincidences

+

This class is aware of ‘coincidences’ and ‘clusters’. Initialize +this class with a ‘cluster’ and you can reconstruct a coincidence +using reconstruct_coincidence(). To use other algorithms +overwrite the direct,``fit``, and curved attributes.

+
+
Parameters:
+

clusterBaseCluster object.

+
+
+
+
+reconstruct_coincidence(coincidence_events, station_numbers=None, offsets=None, initial=None)
+

Reconstruct a single coincidence

+
+
Parameters:
+
    +
  • coincidence_events – a coincidence list consisting of three +or more (station_number, event) tuples.

  • +
  • station_numbers – list of station numbers, to only use +events from those stations.

  • +
  • offsets – a dictionary of either lists of detector timing +offsets or Station objects for each station.

  • +
  • initial – dictionary with already fitted shower parameters.

  • +
+
+
Returns:
+

list of theta, phi, and station numbers.

+
+
+
+ +
+
+reconstruct_coincidences(coincidences, station_numbers=None, offsets=None, progress=True, initials=None)
+

Reconstruct all coincidences

+
+
Parameters:
+
    +
  • coincidences – a list of coincidence events, each consisting +of three or more (station_number, event) tuples.

  • +
  • station_numbers – list of station numbers, to only use +events from those stations.

  • +
  • offsets – dictionary with detector offsets for each station. +These detector offsets should be relative to one +detector from a specific station.

  • +
  • progress – if True show a progress bar while reconstructing.

  • +
  • initials – list of dictionaries with already reconstructed shower +parameters.

  • +
+
+
Returns:
+

list of theta, phi, and station numbers.

+
+
+
+ +
+
+get_station_offsets(coincidence_events, station_numbers, offsets, ts0)
+
+ +
+
+determine_best_offsets(station_numbers, midnight_ts, offsets)
+

Determine best combined station and detector offsets

+

Check which station is best used as reference. Allow offsets via +other stations, intermediate stations are used if it reduces the +offset error.

+
+
Parameters:
+
    +
  • station_numbers – list of stations in the coincidence or also +other stations can are allow to be the +reference station.

  • +
  • midnight_ts – timestamp of midnight before the coincidence.

  • +
  • offsets – a dictionary of Station objects +for each station.

  • +
+
+
Returns:
+

combined detector and station offsets for given station, +relative to the reference station.

+
+
+
+ +
+
+determine_best_reference(error_matrix, station_numbers)
+
+ +
+ +
+
+class sapphire.analysis.direction_reconstruction.CoincidenceDirectionReconstructionDetectors(cluster)
+

Reconstruct direction for coincidences using each detector

+

Instead of only the first arrival time per station this class +uses the arrival time in each detector for the reconstruction.

+
+
+reconstruct_coincidence(coincidence_events, station_numbers=None, offsets=None, initial=None)
+

Reconstruct a single coincidence

+
+
Parameters:
+
    +
  • coincidence_events – a coincidence list consisting of one +or more (station_number, event) tuples.

  • +
  • station_numbers – list of station numbers, to only use +events from those stations.

  • +
  • offsets – dictionary with detector offsets for each station. +These detector offsets should be relative to one +detector from a specific station.

  • +
  • initial – dictionary with already fitted shower parameters.

  • +
+
+
Returns:
+

list of theta, phi, and station numbers.

+
+
+
+ +
+ +
+
+class sapphire.analysis.direction_reconstruction.BaseDirectionAlgorithm
+

No actual direction reconstruction algorithm

+

Simply returns (nan, nan) as direction.

+
+
+classmethod reconstruct_common(t, x, y, z=None, initial=None)
+

Reconstruct shower angles

+
+
Parameters:
+
    +
  • t – detector arrival time in ns.

  • +
  • x,y – positions of detectors in m.

  • +
  • z – height of detectors in m.

  • +
  • initial – dictionary containing values from previous +reconstructions.

  • +
+
+
Returns:
+

reconstructed theta and phi angles.

+
+
+
+ +
+
+static reconstruct()
+

Reconstruct shower angles

+
+
Returns:
+

reconstructed theta and phi angles.

+
+
+
+ +
+ +
+
+class sapphire.analysis.direction_reconstruction.DirectAlgorithm
+

Reconstruct angles using direct analytical formula.

+

This implements the equations derived in Fokkema2012 sec 4.2. +(DOI: 10.3990/1.9789036534383)

+

This algorithm assumes each detector is at the same altitude.

+

Note! The detectors are 0-based.

+
+
+classmethod reconstruct_common(t, x, y, z=None, initial=None)
+

Reconstruct angles from 3 detections

+

This function converts the coordinates to be suitable for the +algorithm.

+
+
Parameters:
+
    +
  • t – arrival times in detector 0, 1 and 2 in ns.

  • +
  • x,y – positions of detector 0, 1 and 2 in m.

  • +
  • z – height of detectors 0, 1 and 2 is ignored.

  • +
  • initial – dictionary containing values from previous +reconstructions is ignored.

  • +
+
+
+
+ +
+
+classmethod reconstruct(dt1, dt2, r1, r2, phi1, phi2)
+

Reconstruct angles from 3 detections

+
+
Parameters:
+
    +
  • dt# – arrival times in detector 1 and 2 relative to +detector 0 in ns (!).

  • +
  • r#,phi# – position of detector 1 and 2 relative to +detector 0 in m and radians.

  • +
+
+
Returns:
+

theta as given by Fokkema2012 eq 4.14, +phi as given by Fokkema2012 eq 4.13.

+
+
+
+ +
+
+classmethod rel_theta1_errorsq(theta, phi, phi1, phi2, r1=10, r2=10)
+

Fokkema2012, eq 4.23

+
+ +
+
+classmethod rel_theta2_errorsq(theta, phi, phi1, phi2, r1=10, r2=10)
+

Fokkema2012, eq 4.23

+
+ +
+
+static rel_phi_errorsq(theta, phi, phi1, phi2, r1=10, r2=10)
+

Fokkema2012, eq 4.22

+
+ +
+
+classmethod dphi_dt0(theta, phi, phi1, phi2, r1=10, r2=10)
+

Fokkema2012, eq 4.19

+
+ +
+
+static dphi_dt1(theta, phi, phi1, phi2, r1=10, r2=10)
+

Fokkema2012, eq 4.20

+
+ +
+
+static dphi_dt2(theta, phi, phi1, phi2, r1=10, r2=10)
+

Fokkema2012, eq 4.21

+
+ +
+ +
+
+class sapphire.analysis.direction_reconstruction.DirectAlgorithmCartesian
+

Reconstruct angles using direct analytical formula.

+

This implements the equations derived in Montanus2014. +“Direction reconstruction of cosmic air showers with +detectorstations at different altitudes”

+

Here the 2D version is used, assuming each detector is at the same +altitude.

+
+
+classmethod reconstruct_common(t, x, y, z=None, initial=None)
+

Reconstruct angles from 3 detections

+

This function converts the coordinates to be suitable for the +algorithm.

+
+
Parameters:
+
    +
  • t – arrival times in detector 0, 1 and 2 in ns.

  • +
  • x,y – positions of detector 0, 1 and 2 in m.

  • +
  • z – height of detectors 0, 1 and 2 is ignored.

  • +
  • initial – dictionary containing values from previous +reconstructions is ignored.

  • +
+
+
+
+ +
+
+static reconstruct(dt1, dt2, dx1, dx2, dy1, dy2)
+

Reconstruct angles from 3 detections

+
+
Parameters:
+
    +
  • dt# – arrival times in detector 1 and 2 relative to +detector 0 in ns.

  • +
  • dx#,dy# – position of detector 1 and 2 relative to +detector 0 in m.

  • +
+
+
Returns:
+

theta as given by Montanus2014 eq 27, +phi as given by Montanus2014 eq 26.

+
+
+
+ +
+ +
+
+class sapphire.analysis.direction_reconstruction.DirectAlgorithmCartesian3D
+

Reconstruct angles using direct analytical formula.

+

This implements the equations derived in Montanus2014. +“Direction reconstruction of cosmic air showers with +detectorstations at different altitudes”

+

Here the 3D version is used, assuming each detector is at the same +altitude.

+
+
+classmethod reconstruct_common(t, x, y, z=None, initial=None)
+

Reconstruct angles from 3 detections

+

This function converts the coordinates to be suitable for the +algorithm.

+
+
Parameters:
+
    +
  • t – arrival times in detector 0, 1 and 2 in ns.

  • +
  • x,y,z – positions of detector 0, 1 and 2 in m.

  • +
  • initial – dictionary containing values from previous +reconstructions is ignored.

  • +
+
+
+
+ +
+
+static reconstruct(dt1, dt2, dx1, dx2, dy1, dy2, dz1=0, dz2=0)
+

Reconstruct angles from 3 detections

+
+
Parameters:
+
    +
  • dt# – arrival times in detector 1 and 2 relative to +detector 0 in ns.

  • +
  • dx#,dy#,dz# – position of detector 1 and 2 relative to +detector 0 in m.

  • +
+
+
Returns:
+

theta as given by Montanus2014 eq 24, +phi as given by Montanus2014 eq 22.

+
+
+
+ +
+ +
+
+class sapphire.analysis.direction_reconstruction.SphereAlgorithm
+

Reconstruct the direction in equatorial coordinates

+

Note: currently incompatible with the other algorithms!

+

This class uses a different coordinate systems than the other +algorithms. The location input is in ECEF coordinates and a +timestamp is required to connect the direction to the equatorial +coordinates.

+
+
+classmethod reconstruct_equatorial(t, x, y, z, timestamp)
+

Reconstructs the source in the Equatorial Coordinate System.

+
+
Parameters:
+
    +
  • t – An array with three arrival times in ns.

  • +
  • x,y,z – arrays with the ECEF locations of the +three detectors / stations in meters.

  • +
  • timestamp – The UTC timestamp of the coincidence in s.

  • +
+
+
Returns:
+

declination and right ascension of the source. The +apparent location of the cosmic ray source in the +Equatorial Coordinate System.

+
+
+
+ +
+
+static interaction_curve(x, y, z, t, t_int)
+

Calculates the curve of possible primary interactions

+

This uses the arrival times in three detectors. The algorithm is +based on location calculations used for LORAN, DECCA, RACAL, GPS +as described by N.G. Schultheiss 2012

+
+
Parameters:
+
    +
  • x,y,z – arrays with the orthogonal coordinates of the three +detection points in m.

  • +
  • t – arrival times of the detectors in ns.

  • +
  • t_int – interaction time in ns.

  • +
+
+
Returns:
+

parameters x_int, y_int, z_int

+
+
+
+ +
+ +
+
+class sapphire.analysis.direction_reconstruction.FitAlgorithm3D
+
+
+classmethod reconstruct_common(t, x, y, z=None, initial=None)
+

Reconstruct angles from 3 or more detections

+

This function converts the arguments to be suitable for the +algorithm.

+
+
Parameters:
+
    +
  • t – arrival times of the detectors in ns.

  • +
  • x,y,z – positions of the detectors in m. The height +for all detectors will be set to 0 if not given.

  • +
  • initial – dictionary containing values from previous +reconstructions is ignored.

  • +
+
+
+
+ +
+
+classmethod reconstruct(t, x, y, z)
+

Reconstruct angles for many detections

+
+
Parameters:
+
    +
  • t# – arrival times in the detectors in ns.

  • +
  • x#,y#,z# – position of the detectors in m.

  • +
+
+
Returns:
+

theta as given by Montanus2014 eq 21, +phi as given by Montanus2014 eq 22.

+
+
+
+ +
+
+static constraint_normal_vector(n)
+

This should be equal to zero

+
+ +
+
+static best_fit(n_xyz, dt, dx, dy, dz)
+

The function to be minimized to find the direction

+
+
Parameters:
+
    +
  • n_xyz – list containing the unit vector.

  • +
  • dt – list of relative arrival times in the detectors in ns.

  • +
  • dx,dy,dz – list of relative detector positions in m.

  • +
+
+
Returns:
+

least sum of squares as in Montanus2014, eq 36

+
+
+
+ +
+ +
+
+class sapphire.analysis.direction_reconstruction.RegressionAlgorithm
+

Reconstruct angles using an analytical regression formula.

+

This implements the equations as for ISVHECRI (Montanus 2014). +“Direction reconstruction of cosmic air showers with +three or more detectorstations in a horizontal (for the +moment) plane”

+
+
+classmethod reconstruct_common(t, x, y, z=None, initial=None)
+

Reconstruct angles from 3 or more detections

+

This function converts the arguments to be suitable for the +algorithm.

+
+
Parameters:
+
    +
  • t – arrival times of the detectors in ns.

  • +
  • x,y,z – positions of the detectors in m. The height +is ignored.

  • +
  • initial – dictionary containing values from previous +reconstructions is ignored.

  • +
+
+
+
+ +
+
+classmethod reconstruct(t, x, y)
+

Reconstruct angles for many detections

+
+
Parameters:
+
    +
  • t – arrival times in the detectors in ns.

  • +
  • x,y – positions of the detectors in m.

  • +
+
+
Returns:
+

theta as derived by Montanus2014, +phi as derived by Montanus2014.

+
+
+
+ +
+ +
+
+class sapphire.analysis.direction_reconstruction.RegressionAlgorithm3D
+

Reconstruct angles by iteratively applying a regression formula.

+

This implements the equations as recently derived (Montanus 2014). +“Direction reconstruction of cosmic air showers with +three or more detectorstations at arbitrary altitudes”

+
+
+MAX_ITERATIONS = 1000
+
+ +
+
+classmethod reconstruct_common(t, x, y, z=None, initial=None)
+

Reconstruct angles from 3 or more detections

+

This function converts the arguments to be suitable for the +algorithm.

+
+
Parameters:
+
    +
  • t – arrival times of the detectors in ns.

  • +
  • x,y,z – positions of the detectors in m. The height +for all detectors will be set to 0 if not given.

  • +
  • initial – dictionary containing values from previous +reconstructions is ignored.

  • +
+
+
+
+ +
+
+classmethod reconstruct(t, x, y, z)
+

Reconstruct angles for many detections

+
+
Parameters:
+
    +
  • t – arrival times in the detectors in ns.

  • +
  • x,y,z – positions of the detectors in m.

  • +
+
+
Returns:
+

theta as derived by Montanus2014, +phi as derived by Montanus2014.

+
+
+
+ +
+ +
+
+class sapphire.analysis.direction_reconstruction.CurvedMixin
+

Provide methods to estimate the time delay due to front curvature

+

Given a core location, detector position, and shower angle the radial core +distance can be determined, which can be used to determine the expected +time delay.

+
+
+time_delay(x, y, core_x, core_y, theta, phi)
+
+ +
+
+classmethod radial_core_distance(x, y, core_x, core_y, theta, phi)
+

Determine the radial core distance

+
+
Parameters:
+
    +
  • x,y,z – positions of the detectors in m.

  • +
  • core_x,core_y – core position at z = 0 in m.

  • +
  • theta,phi – reconstructed shower direction.

  • +
+
+
Returns:
+

radial core distance in m.

+
+
+
+ +
+ +
+
+class sapphire.analysis.direction_reconstruction.CurvedRegressionAlgorithm
+

Reconstruct angles taking the shower front curvature into account.

+

Take the shower front curvature into account. Assumes knowledge about the +shower core position.

+
+
+MAX_ITERATIONS = 1000
+
+ +
+
+reconstruct_common(t, x, y, z=None, initial=None)
+

Reconstruct angles from 3 or more detections

+

This function converts the arguments to be suitable for the +algorithm.

+
+
Parameters:
+
    +
  • t – arrival times of the detectors in ns.

  • +
  • x,y,z – positions of the detectors in m. The height +is ignored.

  • +
  • initial – dictionary containing values from previous +reconstructions, including core position.

  • +
+
+
+
+ +
+
+reconstruct(t, x, y, core_x, core_y)
+

Reconstruct angles for many detections

+
+
Parameters:
+
    +
  • t – arrival times in the detectors in ns.

  • +
  • x,y – positions of the detectors in m.

  • +
  • core_x,core_y – core position at z = 0 in m.

  • +
+
+
Returns:
+

theta as derived by Montanus2014, +phi as derived by Montanus2014.

+
+
+
+ +
+ +
+
+class sapphire.analysis.direction_reconstruction.CurvedRegressionAlgorithm3D
+

Reconstruct angles accounting for front curvature and detector altitudes

+

Take the shower front curvature and different detector heights into +account. Assumes knowledge about the shower core position.

+
+
+MAX_ITERATIONS = 1000
+
+ +
+
+reconstruct_common(t, x, y, z=None, initial=None)
+

Reconstruct angles from 3 or more detections

+

This function converts the arguments to be suitable for the +algorithm.

+
+
Parameters:
+
    +
  • t – arrival times of the detectors in ns.

  • +
  • x,y,z – positions of the detectors in m. The height +for all detectors will be set to 0 if not given.

  • +
  • initial – dictionary containing values from previous +reconstructions, including core position.

  • +
+
+
+
+ +
+
+reconstruct(t, x, y, z, core_x, core_y)
+

Reconstruct angles for many detections

+
+
Parameters:
+
    +
  • t – arrival times in the detectors in ns.

  • +
  • x,y,z – positions of the detectors in m.

  • +
  • core_x,core_y – core position at z = 0 in m.

  • +
+
+
Returns:
+

theta as derived by Montanus2014, +phi as derived by Montanus2014.

+
+
+
+ +
+ +
+
+sapphire.analysis.direction_reconstruction.logic_checks(t, x, y, z)
+

Check for impossible reconstructions

+

Criteria:

+
    +
  • No two detectors are at the same position.

  • +
  • Time difference between two detections should be less than distance / c.

  • +
  • All detectors on a line is bad.

  • +
+

To fix:

+
    +
  • Time difference can still be to large in cases where a different +distance becomes relevant.

  • +
+
+
Parameters:
+
    +
  • t – arrival times in the detectors in ns.

  • +
  • x,y,z – positions of the detectors in m.

  • +
+
+
Returns:
+

True if the checks pass, False otherwise.

+
+
+
+ +
+
+sapphire.analysis.direction_reconstruction.warning_only_three()
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/analysis/event_utils.html b/analysis/event_utils.html new file mode 100644 index 00000000..16a5635c --- /dev/null +++ b/analysis/event_utils.html @@ -0,0 +1,300 @@ + + + + + + + + Get signal and timing values from events — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Get signal and timing values from events

+

Get data from HiSPARC events

+

This module contains functions to derive data from HiSPARC events. +Common tasks for data reconstruction are getting the particle density +and shower arrival time in detectors or a station. These functions are +aware of processed events (i.e. reconstructed number of MIPs, arrival +times and trigger time) and stations.

+
+
+sapphire.analysis.event_utils.station_density(event, detector_ids=None, station=None)
+

Get particle density in a station

+

Detectors with error values will be ignored.

+
+
Parameters:
+
    +
  • event – Processed event row.

  • +
  • detector_ids – list of detectors ids to consider. If None, the +detectors in the station object will be used.

  • +
  • stationsapphire.clusters.Station object.

  • +
+
+
Returns:
+

average density over the chosen detectors.

+
+
+
+ +
+
+sapphire.analysis.event_utils.detector_densities(event, detector_ids=None, station=None)
+

Get particle density in station detectors

+
+
Parameters:
+
    +
  • event – Processed event row.

  • +
  • detector_ids – list of detectors ids for which to get particle +densities.

  • +
  • stationsapphire.clusters.Station object.

  • +
+
+
Returns:
+

density in each chosen detector.

+
+
+
+ +
+
+sapphire.analysis.event_utils.detector_density(event, detector_id, station=None)
+

Get particle density in station detector

+
+
Parameters:
+
    +
  • event – Processed event row.

  • +
  • detector_id – detector id for which to get particle density.

  • +
  • stationsapphire.clusters.Station object, used to +determine the detector size.

  • +
+
+
Returns:
+

density in the chosen detector.

+
+
+
+ +
+
+sapphire.analysis.event_utils.station_arrival_time(event, reference_ext_timestamp, detector_ids=None, offsets=[0.0, 0.0, 0.0, 0.0], station=None)
+

Get station arrival time, i.e. first detector hit

+

Arrival time of first detector hit in the station. The returned time +is relative to reference_ext_timestamp, because floats do not have +enough precision to represent large timestamps in nanoseconds.

+
+
Parameters:
+
    +
  • event – Processed event row.

  • +
  • reference_ext_timestamp – reference extended timestamp (in ns). +The returned station arrival time will be relative to this timestamp. +Often best to use the timestamp of the first event in a coincidence.

  • +
  • detector_ids – list of detectors ids for which to consider.

  • +
  • offsets – list of detector time offsets.

  • +
  • stationsapphire.clusters.Station object, used to +determine the number of detectors.

  • +
+
+
Returns:
+

shower arrival time of the station relative to the +reference timestamp.

+
+
+
+ +
+
+sapphire.analysis.event_utils.relative_detector_arrival_times(event, reference_ext_timestamp, detector_ids=None, offsets=[0.0, 0.0, 0.0, 0.0], station=None)
+

Get relative arrival times for all detectors

+
+
Parameters:
+
    +
  • event – Processed event row.

  • +
  • reference_ext_timestamp – reference extended timestamp (in ns). +The returned station arrival time will be relative to this timestamp. +Often best to use the timestamp of the first event in a coincidence.

  • +
  • detector_ids – list of detectors ids for which to get arrival times.

  • +
  • offsets – list of detector time offsets.

  • +
  • stationsapphire.clusters.Station object, used to +determine the number of detectors.

  • +
+
+
Returns:
+

list of shower arrival times relative to the given reference.

+
+
+
+ +
+
+sapphire.analysis.event_utils.detector_arrival_times(event, detector_ids=None, offsets=[0.0, 0.0, 0.0, 0.0], station=None)
+

Get corrected arrival times for all detectors

+
+
Parameters:
+
    +
  • event – Processed event row.

  • +
  • detector_ids – list of detectors ids for which to get arrival times.

  • +
  • offsets – list of detector time offsets.

  • +
  • stationsapphire.clusters.Station object, used to +determine the number of detectors.

  • +
+
+
Returns:
+

list of shower arrival times relative to the start of the trace.

+
+
+
+ +
+
+sapphire.analysis.event_utils.detector_arrival_time(event, detector_id, offsets=[0.0, 0.0, 0.0, 0.0])
+

Get corrected arrival time for a detector

+
+
Parameters:
+
    +
  • event – Event row.

  • +
  • detector_id – detector id for which to get arrival times.

  • +
  • offsets – list of detector time offsets.

  • +
+
+
Returns:
+

arrival time corrected by the offset.

+
+
+
+ +
+
+sapphire.analysis.event_utils.get_detector_ids(station=None, event=None)
+

Determine the detector ids based on the station object or event data

+

Returns a list of detectors that should be present.

+

Note: Event based determination might not work for simulated data, +since it currently does not simulate pulseheights.

+
+
Parameters:
+
+
+
Returns:
+

list of detector_ids.

+
+
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/analysis/find_mpv.html b/analysis/find_mpv.html new file mode 100644 index 00000000..e770b390 --- /dev/null +++ b/analysis/find_mpv.html @@ -0,0 +1,232 @@ + + + + + + + + MPV fit — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

MPV fit

+

Find the most probable value in a HiSPARC spectrum.

+
+
FindMostProbableValueInSpectrum

find the most probable value in a HiSPARC spectrum

+
+
+
+
+class sapphire.analysis.find_mpv.FindMostProbableValueInSpectrum(n, bins)
+

Find the most probable value (MPV) in a HiSPARC spectrum.

+

This is a fast algorithm to find the MPV value in a HiSPARC spectrum. +The MPV value indicates the position of the minimum-ionizing particles +(MIP) peak. The algorithm makes some assumptions about the shape of +the spectrum:

+
+
    +
  • the spectrum includes the gamma peak (left-most part of +spectrum) which has more counts per bin than the MIP peak.

  • +
  • ignoring the gamma peak, the MIP peak can be bracketed on the +left by the numerically largest bin-to-bin increase in the +number of counts.

  • +
  • the MIP peak can be approximated by a normal distribution.

  • +
+
+

Public methods:

+
+
find_mpv()

Find the most probable value

+
+
find_first_guess_mpv()

Make a first guess of the most probable value

+
+
fit_mpv()

Based on a first guess, fit the MIP peak to obtain the MPV

+
+
+

Initialize the class instance

+
+
Parameters:
+

n,bins – histogram counts and bins, as obtained using +numpy.histogram.

+
+
+
+
+find_mpv()
+

Find the most probable value.

+

First perform a first guess, then use that value to fit the MIP +peak.

+
+
Return mpv:
+

best guess of the most probable value.

+
+
Return boolean is_fitted:
+

indicates if the fit was successful.

+
+
+
+ +
+
+find_first_guess_mpv()
+

First guess of most probable value.

+

The algorithm is fast and simple. The following steps are +performed:

+
+
    +
  • From the left: find the greatest value and cut off all data +to the left of that maximum. We now assume the first +datapoint to be the maximum of the gamma peak.

  • +
  • From the right: find the location of the greatest decrease +from bin to bin. We assume that this value is where the MIP +peak dips before joining the gamma peak.

  • +
  • Find the maximum to the right of this value. We assume +this to be the approximate location of the MIP peak.

  • +
+
+
+
Return mpv:
+

first guess of the most probable value.

+
+
+
+ +
+
+fit_mpv(first_guess, width_factor=0.4)
+

Fit a normal distribution to the MIP peak to obtain the MPV.

+

A normal distribution is fitted to the spectrum in a restricted +domain around the first guess value. The width of the domain can +be adjusted by the width_factor parameter.

+
+
Parameters:
+
    +
  • first_guess – approximate location of the most probable +value.

  • +
  • width_factor – float in the range [0., 1.] to indicate the +width of the fit domain. The domain is given by +[(1. - width_factor) * first_guess, (1. + width_factor) * +first_guess].

  • +
+
+
Return mpv:
+

mpv value obtained from the fit.

+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/analysis/landau.html b/analysis/landau.html new file mode 100644 index 00000000..2c561a29 --- /dev/null +++ b/analysis/landau.html @@ -0,0 +1,324 @@ + + + + + + + + Landau distribution — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Landau distribution

+

Landau distribution function

+

This module computes the Landau distribution, which governs the +fluctuations in energy loss of particles travelling through a +relatively thin layer of matter.

+

Currently, this module only contains functions to calculate the exact +function using two integral representations of the defining complex +integral. This should be extended by approximations when the need for +doing serious work arises.

+

References are made to Fokkema2012, DOI: 10.3990/1.9789036534383.

+
+
+sapphire.analysis.landau.pdf_kernel(y, sf)
+
+ +
+
+sapphire.analysis.landau.pdf_kernel2(u, lf)
+

The Landau kernel

+

Fokkema2012, eq 2.13.

+
+ +
+
+class sapphire.analysis.landau.Scintillator
+
+
+thickness = 0.02
+
+ +
+
+xi = 0.172018
+
+ +
+
+epsilon = 3.10756e-11
+
+ +
+
+delta = 2.97663
+
+ +
+
+Euler = 0.577215665
+
+ +
+
+mev_scale = 1
+
+ +
+
+gauss_scale = 1
+
+ +
+
+full_domain = array([-100.        ,  -99.7997998 ,  -99.5995996 ,  -99.3993994 ,         -99.1991992 ,  -98.998999  ,  -98.7987988 ,  -98.5985986 ,         -98.3983984 ,  -98.1981982 ,  -97.997998  ,  -97.7977978 ,         -97.5975976 ,  -97.3973974 ,  -97.1971972 ,  -96.996997  ,         -96.7967968 ,  -96.5965966 ,  -96.3963964 ,  -96.1961962 ,         -95.995996  ,  -95.7957958 ,  -95.5955956 ,  -95.3953954 ,         -95.1951952 ,  -94.99499499,  -94.79479479,  -94.59459459,         -94.39439439,  -94.19419419,  -93.99399399,  -93.79379379,         -93.59359359,  -93.39339339,  -93.19319319,  -92.99299299,         -92.79279279,  -92.59259259,  -92.39239239,  -92.19219219,         -91.99199199,  -91.79179179,  -91.59159159,  -91.39139139,         -91.19119119,  -90.99099099,  -90.79079079,  -90.59059059,         -90.39039039,  -90.19019019,  -89.98998999,  -89.78978979,         -89.58958959,  -89.38938939,  -89.18918919,  -88.98898899,         -88.78878879,  -88.58858859,  -88.38838839,  -88.18818819,         -87.98798799,  -87.78778779,  -87.58758759,  -87.38738739,         -87.18718719,  -86.98698699,  -86.78678679,  -86.58658659,         -86.38638639,  -86.18618619,  -85.98598599,  -85.78578579,         -85.58558559,  -85.38538539,  -85.18518519,  -84.98498498,         -84.78478478,  -84.58458458,  -84.38438438,  -84.18418418,         -83.98398398,  -83.78378378,  -83.58358358,  -83.38338338,         -83.18318318,  -82.98298298,  -82.78278278,  -82.58258258,         -82.38238238,  -82.18218218,  -81.98198198,  -81.78178178,         -81.58158158,  -81.38138138,  -81.18118118,  -80.98098098,         -80.78078078,  -80.58058058,  -80.38038038,  -80.18018018,         -79.97997998,  -79.77977978,  -79.57957958,  -79.37937938,         -79.17917918,  -78.97897898,  -78.77877878,  -78.57857858,         -78.37837838,  -78.17817818,  -77.97797798,  -77.77777778,         -77.57757758,  -77.37737738,  -77.17717718,  -76.97697698,         -76.77677678,  -76.57657658,  -76.37637638,  -76.17617618,         -75.97597598,  -75.77577578,  -75.57557558,  -75.37537538,         -75.17517518,  -74.97497497,  -74.77477477,  -74.57457457,         -74.37437437,  -74.17417417,  -73.97397397,  -73.77377377,         -73.57357357,  -73.37337337,  -73.17317317,  -72.97297297,         -72.77277277,  -72.57257257,  -72.37237237,  -72.17217217,         -71.97197197,  -71.77177177,  -71.57157157,  -71.37137137,         -71.17117117,  -70.97097097,  -70.77077077,  -70.57057057,         -70.37037037,  -70.17017017,  -69.96996997,  -69.76976977,         -69.56956957,  -69.36936937,  -69.16916917,  -68.96896897,         -68.76876877,  -68.56856857,  -68.36836837,  -68.16816817,         -67.96796797,  -67.76776777,  -67.56756757,  -67.36736737,         -67.16716717,  -66.96696697,  -66.76676677,  -66.56656657,         -66.36636637,  -66.16616617,  -65.96596597,  -65.76576577,         -65.56556557,  -65.36536537,  -65.16516517,  -64.96496496,         -64.76476476,  -64.56456456,  -64.36436436,  -64.16416416,         -63.96396396,  -63.76376376,  -63.56356356,  -63.36336336,         -63.16316316,  -62.96296296,  -62.76276276,  -62.56256256,         -62.36236236,  -62.16216216,  -61.96196196,  -61.76176176,         -61.56156156,  -61.36136136,  -61.16116116,  -60.96096096,         -60.76076076,  -60.56056056,  -60.36036036,  -60.16016016,         -59.95995996,  -59.75975976,  -59.55955956,  -59.35935936,         -59.15915916,  -58.95895896,  -58.75875876,  -58.55855856,         -58.35835836,  -58.15815816,  -57.95795796,  -57.75775776,         -57.55755756,  -57.35735736,  -57.15715716,  -56.95695696,         -56.75675676,  -56.55655656,  -56.35635636,  -56.15615616,         -55.95595596,  -55.75575576,  -55.55555556,  -55.35535536,         -55.15515516,  -54.95495495,  -54.75475475,  -54.55455455,         -54.35435435,  -54.15415415,  -53.95395395,  -53.75375375,         -53.55355355,  -53.35335335,  -53.15315315,  -52.95295295,         -52.75275275,  -52.55255255,  -52.35235235,  -52.15215215,         -51.95195195,  -51.75175175,  -51.55155155,  -51.35135135,         -51.15115115,  -50.95095095,  -50.75075075,  -50.55055055,         -50.35035035,  -50.15015015,  -49.94994995,  -49.74974975,         -49.54954955,  -49.34934935,  -49.14914915,  -48.94894895,         -48.74874875,  -48.54854855,  -48.34834835,  -48.14814815,         -47.94794795,  -47.74774775,  -47.54754755,  -47.34734735,         -47.14714715,  -46.94694695,  -46.74674675,  -46.54654655,         -46.34634635,  -46.14614615,  -45.94594595,  -45.74574575,         -45.54554555,  -45.34534535,  -45.14514515,  -44.94494494,         -44.74474474,  -44.54454454,  -44.34434434,  -44.14414414,         -43.94394394,  -43.74374374,  -43.54354354,  -43.34334334,         -43.14314314,  -42.94294294,  -42.74274274,  -42.54254254,         -42.34234234,  -42.14214214,  -41.94194194,  -41.74174174,         -41.54154154,  -41.34134134,  -41.14114114,  -40.94094094,         -40.74074074,  -40.54054054,  -40.34034034,  -40.14014014,         -39.93993994,  -39.73973974,  -39.53953954,  -39.33933934,         -39.13913914,  -38.93893894,  -38.73873874,  -38.53853854,         -38.33833834,  -38.13813814,  -37.93793794,  -37.73773774,         -37.53753754,  -37.33733734,  -37.13713714,  -36.93693694,         -36.73673674,  -36.53653654,  -36.33633634,  -36.13613614,         -35.93593594,  -35.73573574,  -35.53553554,  -35.33533534,         -35.13513514,  -34.93493493,  -34.73473473,  -34.53453453,         -34.33433433,  -34.13413413,  -33.93393393,  -33.73373373,         -33.53353353,  -33.33333333,  -33.13313313,  -32.93293293,         -32.73273273,  -32.53253253,  -32.33233233,  -32.13213213,         -31.93193193,  -31.73173173,  -31.53153153,  -31.33133133,         -31.13113113,  -30.93093093,  -30.73073073,  -30.53053053,         -30.33033033,  -30.13013013,  -29.92992993,  -29.72972973,         -29.52952953,  -29.32932933,  -29.12912913,  -28.92892893,         -28.72872873,  -28.52852853,  -28.32832833,  -28.12812813,         -27.92792793,  -27.72772773,  -27.52752753,  -27.32732733,         -27.12712713,  -26.92692693,  -26.72672673,  -26.52652653,         -26.32632633,  -26.12612613,  -25.92592593,  -25.72572573,         -25.52552553,  -25.32532533,  -25.12512513,  -24.92492492,         -24.72472472,  -24.52452452,  -24.32432432,  -24.12412412,         -23.92392392,  -23.72372372,  -23.52352352,  -23.32332332,         -23.12312312,  -22.92292292,  -22.72272272,  -22.52252252,         -22.32232232,  -22.12212212,  -21.92192192,  -21.72172172,         -21.52152152,  -21.32132132,  -21.12112112,  -20.92092092,         -20.72072072,  -20.52052052,  -20.32032032,  -20.12012012,         -19.91991992,  -19.71971972,  -19.51951952,  -19.31931932,         -19.11911912,  -18.91891892,  -18.71871872,  -18.51851852,         -18.31831832,  -18.11811812,  -17.91791792,  -17.71771772,         -17.51751752,  -17.31731732,  -17.11711712,  -16.91691692,         -16.71671672,  -16.51651652,  -16.31631632,  -16.11611612,         -15.91591592,  -15.71571572,  -15.51551552,  -15.31531532,         -15.11511512,  -14.91491491,  -14.71471471,  -14.51451451,         -14.31431431,  -14.11411411,  -13.91391391,  -13.71371371,         -13.51351351,  -13.31331331,  -13.11311311,  -12.91291291,         -12.71271271,  -12.51251251,  -12.31231231,  -12.11211211,         -11.91191191,  -11.71171171,  -11.51151151,  -11.31131131,         -11.11111111,  -10.91091091,  -10.71071071,  -10.51051051,         -10.31031031,  -10.11011011,   -9.90990991,   -9.70970971,          -9.50950951,   -9.30930931,   -9.10910911,   -8.90890891,          -8.70870871,   -8.50850851,   -8.30830831,   -8.10810811,          -7.90790791,   -7.70770771,   -7.50750751,   -7.30730731,          -7.10710711,   -6.90690691,   -6.70670671,   -6.50650651,          -6.30630631,   -6.10610611,   -5.90590591,   -5.70570571,          -5.50550551,   -5.30530531,   -5.10510511,   -4.9049049 ,          -4.7047047 ,   -4.5045045 ,   -4.3043043 ,   -4.1041041 ,          -3.9039039 ,   -3.7037037 ,   -3.5035035 ,   -3.3033033 ,          -3.1031031 ,   -2.9029029 ,   -2.7027027 ,   -2.5025025 ,          -2.3023023 ,   -2.1021021 ,   -1.9019019 ,   -1.7017017 ,          -1.5015015 ,   -1.3013013 ,   -1.1011011 ,   -0.9009009 ,          -0.7007007 ,   -0.5005005 ,   -0.3003003 ,   -0.1001001 ,           0.1001001 ,    0.3003003 ,    0.5005005 ,    0.7007007 ,           0.9009009 ,    1.1011011 ,    1.3013013 ,    1.5015015 ,           1.7017017 ,    1.9019019 ,    2.1021021 ,    2.3023023 ,           2.5025025 ,    2.7027027 ,    2.9029029 ,    3.1031031 ,           3.3033033 ,    3.5035035 ,    3.7037037 ,    3.9039039 ,           4.1041041 ,    4.3043043 ,    4.5045045 ,    4.7047047 ,           4.9049049 ,    5.10510511,    5.30530531,    5.50550551,           5.70570571,    5.90590591,    6.10610611,    6.30630631,           6.50650651,    6.70670671,    6.90690691,    7.10710711,           7.30730731,    7.50750751,    7.70770771,    7.90790791,           8.10810811,    8.30830831,    8.50850851,    8.70870871,           8.90890891,    9.10910911,    9.30930931,    9.50950951,           9.70970971,    9.90990991,   10.11011011,   10.31031031,          10.51051051,   10.71071071,   10.91091091,   11.11111111,          11.31131131,   11.51151151,   11.71171171,   11.91191191,          12.11211211,   12.31231231,   12.51251251,   12.71271271,          12.91291291,   13.11311311,   13.31331331,   13.51351351,          13.71371371,   13.91391391,   14.11411411,   14.31431431,          14.51451451,   14.71471471,   14.91491491,   15.11511512,          15.31531532,   15.51551552,   15.71571572,   15.91591592,          16.11611612,   16.31631632,   16.51651652,   16.71671672,          16.91691692,   17.11711712,   17.31731732,   17.51751752,          17.71771772,   17.91791792,   18.11811812,   18.31831832,          18.51851852,   18.71871872,   18.91891892,   19.11911912,          19.31931932,   19.51951952,   19.71971972,   19.91991992,          20.12012012,   20.32032032,   20.52052052,   20.72072072,          20.92092092,   21.12112112,   21.32132132,   21.52152152,          21.72172172,   21.92192192,   22.12212212,   22.32232232,          22.52252252,   22.72272272,   22.92292292,   23.12312312,          23.32332332,   23.52352352,   23.72372372,   23.92392392,          24.12412412,   24.32432432,   24.52452452,   24.72472472,          24.92492492,   25.12512513,   25.32532533,   25.52552553,          25.72572573,   25.92592593,   26.12612613,   26.32632633,          26.52652653,   26.72672673,   26.92692693,   27.12712713,          27.32732733,   27.52752753,   27.72772773,   27.92792793,          28.12812813,   28.32832833,   28.52852853,   28.72872873,          28.92892893,   29.12912913,   29.32932933,   29.52952953,          29.72972973,   29.92992993,   30.13013013,   30.33033033,          30.53053053,   30.73073073,   30.93093093,   31.13113113,          31.33133133,   31.53153153,   31.73173173,   31.93193193,          32.13213213,   32.33233233,   32.53253253,   32.73273273,          32.93293293,   33.13313313,   33.33333333,   33.53353353,          33.73373373,   33.93393393,   34.13413413,   34.33433433,          34.53453453,   34.73473473,   34.93493493,   35.13513514,          35.33533534,   35.53553554,   35.73573574,   35.93593594,          36.13613614,   36.33633634,   36.53653654,   36.73673674,          36.93693694,   37.13713714,   37.33733734,   37.53753754,          37.73773774,   37.93793794,   38.13813814,   38.33833834,          38.53853854,   38.73873874,   38.93893894,   39.13913914,          39.33933934,   39.53953954,   39.73973974,   39.93993994,          40.14014014,   40.34034034,   40.54054054,   40.74074074,          40.94094094,   41.14114114,   41.34134134,   41.54154154,          41.74174174,   41.94194194,   42.14214214,   42.34234234,          42.54254254,   42.74274274,   42.94294294,   43.14314314,          43.34334334,   43.54354354,   43.74374374,   43.94394394,          44.14414414,   44.34434434,   44.54454454,   44.74474474,          44.94494494,   45.14514515,   45.34534535,   45.54554555,          45.74574575,   45.94594595,   46.14614615,   46.34634635,          46.54654655,   46.74674675,   46.94694695,   47.14714715,          47.34734735,   47.54754755,   47.74774775,   47.94794795,          48.14814815,   48.34834835,   48.54854855,   48.74874875,          48.94894895,   49.14914915,   49.34934935,   49.54954955,          49.74974975,   49.94994995,   50.15015015,   50.35035035,          50.55055055,   50.75075075,   50.95095095,   51.15115115,          51.35135135,   51.55155155,   51.75175175,   51.95195195,          52.15215215,   52.35235235,   52.55255255,   52.75275275,          52.95295295,   53.15315315,   53.35335335,   53.55355355,          53.75375375,   53.95395395,   54.15415415,   54.35435435,          54.55455455,   54.75475475,   54.95495495,   55.15515516,          55.35535536,   55.55555556,   55.75575576,   55.95595596,          56.15615616,   56.35635636,   56.55655656,   56.75675676,          56.95695696,   57.15715716,   57.35735736,   57.55755756,          57.75775776,   57.95795796,   58.15815816,   58.35835836,          58.55855856,   58.75875876,   58.95895896,   59.15915916,          59.35935936,   59.55955956,   59.75975976,   59.95995996,          60.16016016,   60.36036036,   60.56056056,   60.76076076,          60.96096096,   61.16116116,   61.36136136,   61.56156156,          61.76176176,   61.96196196,   62.16216216,   62.36236236,          62.56256256,   62.76276276,   62.96296296,   63.16316316,          63.36336336,   63.56356356,   63.76376376,   63.96396396,          64.16416416,   64.36436436,   64.56456456,   64.76476476,          64.96496496,   65.16516517,   65.36536537,   65.56556557,          65.76576577,   65.96596597,   66.16616617,   66.36636637,          66.56656657,   66.76676677,   66.96696697,   67.16716717,          67.36736737,   67.56756757,   67.76776777,   67.96796797,          68.16816817,   68.36836837,   68.56856857,   68.76876877,          68.96896897,   69.16916917,   69.36936937,   69.56956957,          69.76976977,   69.96996997,   70.17017017,   70.37037037,          70.57057057,   70.77077077,   70.97097097,   71.17117117,          71.37137137,   71.57157157,   71.77177177,   71.97197197,          72.17217217,   72.37237237,   72.57257257,   72.77277277,          72.97297297,   73.17317317,   73.37337337,   73.57357357,          73.77377377,   73.97397397,   74.17417417,   74.37437437,          74.57457457,   74.77477477,   74.97497497,   75.17517518,          75.37537538,   75.57557558,   75.77577578,   75.97597598,          76.17617618,   76.37637638,   76.57657658,   76.77677678,          76.97697698,   77.17717718,   77.37737738,   77.57757758,          77.77777778,   77.97797798,   78.17817818,   78.37837838,          78.57857858,   78.77877878,   78.97897898,   79.17917918,          79.37937938,   79.57957958,   79.77977978,   79.97997998,          80.18018018,   80.38038038,   80.58058058,   80.78078078,          80.98098098,   81.18118118,   81.38138138,   81.58158158,          81.78178178,   81.98198198,   82.18218218,   82.38238238,          82.58258258,   82.78278278,   82.98298298,   83.18318318,          83.38338338,   83.58358358,   83.78378378,   83.98398398,          84.18418418,   84.38438438,   84.58458458,   84.78478478,          84.98498498,   85.18518519,   85.38538539,   85.58558559,          85.78578579,   85.98598599,   86.18618619,   86.38638639,          86.58658659,   86.78678679,   86.98698699,   87.18718719,          87.38738739,   87.58758759,   87.78778779,   87.98798799,          88.18818819,   88.38838839,   88.58858859,   88.78878879,          88.98898899,   89.18918919,   89.38938939,   89.58958959,          89.78978979,   89.98998999,   90.19019019,   90.39039039,          90.59059059,   90.79079079,   90.99099099,   91.19119119,          91.39139139,   91.59159159,   91.79179179,   91.99199199,          92.19219219,   92.39239239,   92.59259259,   92.79279279,          92.99299299,   93.19319319,   93.39339339,   93.59359359,          93.79379379,   93.99399399,   94.19419419,   94.39439439,          94.59459459,   94.79479479,   94.99499499,   95.1951952 ,          95.3953954 ,   95.5955956 ,   95.7957958 ,   95.995996  ,          96.1961962 ,   96.3963964 ,   96.5965966 ,   96.7967968 ,          96.996997  ,   97.1971972 ,   97.3973974 ,   97.5975976 ,          97.7977978 ,   97.997998  ,   98.1981982 ,   98.3983984 ,          98.5985986 ,   98.7987988 ,   98.998999  ,   99.1991992 ,          99.3993994 ,   99.5995996 ,   99.7997998 ,  100.        ])
+
+ +
+
+pdf_values = None
+
+ +
+
+pdf_domain = array([ -4.9049049 ,  -4.7047047 ,  -4.5045045 ,  -4.3043043 ,         -4.1041041 ,  -3.9039039 ,  -3.7037037 ,  -3.5035035 ,         -3.3033033 ,  -3.1031031 ,  -2.9029029 ,  -2.7027027 ,         -2.5025025 ,  -2.3023023 ,  -2.1021021 ,  -1.9019019 ,         -1.7017017 ,  -1.5015015 ,  -1.3013013 ,  -1.1011011 ,         -0.9009009 ,  -0.7007007 ,  -0.5005005 ,  -0.3003003 ,         -0.1001001 ,   0.1001001 ,   0.3003003 ,   0.5005005 ,          0.7007007 ,   0.9009009 ,   1.1011011 ,   1.3013013 ,          1.5015015 ,   1.7017017 ,   1.9019019 ,   2.1021021 ,          2.3023023 ,   2.5025025 ,   2.7027027 ,   2.9029029 ,          3.1031031 ,   3.3033033 ,   3.5035035 ,   3.7037037 ,          3.9039039 ,   4.1041041 ,   4.3043043 ,   4.5045045 ,          4.7047047 ,   4.9049049 ,   5.10510511,   5.30530531,          5.50550551,   5.70570571,   5.90590591,   6.10610611,          6.30630631,   6.50650651,   6.70670671,   6.90690691,          7.10710711,   7.30730731,   7.50750751,   7.70770771,          7.90790791,   8.10810811,   8.30830831,   8.50850851,          8.70870871,   8.90890891,   9.10910911,   9.30930931,          9.50950951,   9.70970971,   9.90990991,  10.11011011,         10.31031031,  10.51051051,  10.71071071,  10.91091091,         11.11111111,  11.31131131,  11.51151151,  11.71171171,         11.91191191,  12.11211211,  12.31231231,  12.51251251,         12.71271271,  12.91291291,  13.11311311,  13.31331331,         13.51351351,  13.71371371,  13.91391391,  14.11411411,         14.31431431,  14.51451451,  14.71471471,  14.91491491,         15.11511512,  15.31531532,  15.51551552,  15.71571572,         15.91591592,  16.11611612,  16.31631632,  16.51651652,         16.71671672,  16.91691692,  17.11711712,  17.31731732,         17.51751752,  17.71771772,  17.91791792,  18.11811812,         18.31831832,  18.51851852,  18.71871872,  18.91891892,         19.11911912,  19.31931932,  19.51951952,  19.71971972,         19.91991992,  20.12012012,  20.32032032,  20.52052052,         20.72072072,  20.92092092,  21.12112112,  21.32132132,         21.52152152,  21.72172172,  21.92192192,  22.12212212,         22.32232232,  22.52252252,  22.72272272,  22.92292292,         23.12312312,  23.32332332,  23.52352352,  23.72372372,         23.92392392,  24.12412412,  24.32432432,  24.52452452,         24.72472472,  24.92492492,  25.12512513,  25.32532533,         25.52552553,  25.72572573,  25.92592593,  26.12612613,         26.32632633,  26.52652653,  26.72672673,  26.92692693,         27.12712713,  27.32732733,  27.52752753,  27.72772773,         27.92792793,  28.12812813,  28.32832833,  28.52852853,         28.72872873,  28.92892893,  29.12912913,  29.32932933,         29.52952953,  29.72972973,  29.92992993,  30.13013013,         30.33033033,  30.53053053,  30.73073073,  30.93093093,         31.13113113,  31.33133133,  31.53153153,  31.73173173,         31.93193193,  32.13213213,  32.33233233,  32.53253253,         32.73273273,  32.93293293,  33.13313313,  33.33333333,         33.53353353,  33.73373373,  33.93393393,  34.13413413,         34.33433433,  34.53453453,  34.73473473,  34.93493493,         35.13513514,  35.33533534,  35.53553554,  35.73573574,         35.93593594,  36.13613614,  36.33633634,  36.53653654,         36.73673674,  36.93693694,  37.13713714,  37.33733734,         37.53753754,  37.73773774,  37.93793794,  38.13813814,         38.33833834,  38.53853854,  38.73873874,  38.93893894,         39.13913914,  39.33933934,  39.53953954,  39.73973974,         39.93993994,  40.14014014,  40.34034034,  40.54054054,         40.74074074,  40.94094094,  41.14114114,  41.34134134,         41.54154154,  41.74174174,  41.94194194,  42.14214214,         42.34234234,  42.54254254,  42.74274274,  42.94294294,         43.14314314,  43.34334334,  43.54354354,  43.74374374,         43.94394394,  44.14414414,  44.34434434,  44.54454454,         44.74474474,  44.94494494,  45.14514515,  45.34534535,         45.54554555,  45.74574575,  45.94594595,  46.14614615,         46.34634635,  46.54654655,  46.74674675,  46.94694695,         47.14714715,  47.34734735,  47.54754755,  47.74774775,         47.94794795,  48.14814815,  48.34834835,  48.54854855,         48.74874875,  48.94894895,  49.14914915,  49.34934935,         49.54954955,  49.74974975,  49.94994995,  50.15015015,         50.35035035,  50.55055055,  50.75075075,  50.95095095,         51.15115115,  51.35135135,  51.55155155,  51.75175175,         51.95195195,  52.15215215,  52.35235235,  52.55255255,         52.75275275,  52.95295295,  53.15315315,  53.35335335,         53.55355355,  53.75375375,  53.95395395,  54.15415415,         54.35435435,  54.55455455,  54.75475475,  54.95495495,         55.15515516,  55.35535536,  55.55555556,  55.75575576,         55.95595596,  56.15615616,  56.35635636,  56.55655656,         56.75675676,  56.95695696,  57.15715716,  57.35735736,         57.55755756,  57.75775776,  57.95795796,  58.15815816,         58.35835836,  58.55855856,  58.75875876,  58.95895896,         59.15915916,  59.35935936,  59.55955956,  59.75975976,         59.95995996,  60.16016016,  60.36036036,  60.56056056,         60.76076076,  60.96096096,  61.16116116,  61.36136136,         61.56156156,  61.76176176,  61.96196196,  62.16216216,         62.36236236,  62.56256256,  62.76276276,  62.96296296,         63.16316316,  63.36336336,  63.56356356,  63.76376376,         63.96396396,  64.16416416,  64.36436436,  64.56456456,         64.76476476,  64.96496496,  65.16516517,  65.36536537,         65.56556557,  65.76576577,  65.96596597,  66.16616617,         66.36636637,  66.56656657,  66.76676677,  66.96696697,         67.16716717,  67.36736737,  67.56756757,  67.76776777,         67.96796797,  68.16816817,  68.36836837,  68.56856857,         68.76876877,  68.96896897,  69.16916917,  69.36936937,         69.56956957,  69.76976977,  69.96996997,  70.17017017,         70.37037037,  70.57057057,  70.77077077,  70.97097097,         71.17117117,  71.37137137,  71.57157157,  71.77177177,         71.97197197,  72.17217217,  72.37237237,  72.57257257,         72.77277277,  72.97297297,  73.17317317,  73.37337337,         73.57357357,  73.77377377,  73.97397397,  74.17417417,         74.37437437,  74.57457457,  74.77477477,  74.97497497,         75.17517518,  75.37537538,  75.57557558,  75.77577578,         75.97597598,  76.17617618,  76.37637638,  76.57657658,         76.77677678,  76.97697698,  77.17717718,  77.37737738,         77.57757758,  77.77777778,  77.97797798,  78.17817818,         78.37837838,  78.57857858,  78.77877878,  78.97897898,         79.17917918,  79.37937938,  79.57957958,  79.77977978,         79.97997998,  80.18018018,  80.38038038,  80.58058058,         80.78078078,  80.98098098,  81.18118118,  81.38138138,         81.58158158,  81.78178178,  81.98198198,  82.18218218,         82.38238238,  82.58258258,  82.78278278,  82.98298298,         83.18318318,  83.38338338,  83.58358358,  83.78378378,         83.98398398,  84.18418418,  84.38438438,  84.58458458,         84.78478478,  84.98498498,  85.18518519,  85.38538539,         85.58558559,  85.78578579,  85.98598599,  86.18618619,         86.38638639,  86.58658659,  86.78678679,  86.98698699,         87.18718719,  87.38738739,  87.58758759,  87.78778779,         87.98798799,  88.18818819,  88.38838839,  88.58858859,         88.78878879,  88.98898899,  89.18918919,  89.38938939,         89.58958959,  89.78978979,  89.98998999,  90.19019019,         90.39039039,  90.59059059,  90.79079079,  90.99099099,         91.19119119,  91.39139139,  91.59159159,  91.79179179,         91.99199199,  92.19219219,  92.39239239,  92.59259259,         92.79279279,  92.99299299,  93.19319319,  93.39339339,         93.59359359,  93.79379379,  93.99399399,  94.19419419,         94.39439439,  94.59459459,  94.79479479,  94.99499499,         95.1951952 ,  95.3953954 ,  95.5955956 ,  95.7957958 ,         95.995996  ,  96.1961962 ,  96.3963964 ,  96.5965966 ,         96.7967968 ,  96.996997  ,  97.1971972 ,  97.3973974 ,         97.5975976 ,  97.7977978 ,  97.997998  ,  98.1981982 ,         98.3983984 ,  98.5985986 ,  98.7987988 ,  98.998999  ,         99.1991992 ,  99.3993994 ,  99.5995996 ,  99.7997998 ,        100.        ])
+
+ +
+
+landau_pdf(energy_loss)
+

The Landau energy loss distribution function

+

Fokkema2012, eq 2.9, where lf is eq 2.10.

+
+
Parameters:
+

energy_loss – Energy loss in the scintillator.

+
+
Returns:
+

energy loss probability.

+
+
+
+ +
+
+lf(energy_loss)
+

Calculate the lambda parameter

+

Fokkema2012, eq 2.10. +With additional shift by delta.

+
+
Parameters:
+

energy_loss – Energy loss in the scintillator.

+
+
Returns:
+

lambda parameter.

+
+
+
+ +
+
+pdf(lf)
+

The Landau probability density function

+

Fokkema2012, eq 2.13.

+
+
Parameters:
+

lf – lambda parameter.

+
+
Returns:
+

probability.

+
+
+
+ +
+
+conv_landau_for_x(x, count_scale=1, mev_scale=None, gauss_scale=None)
+

Landau convolved with Gaussian

+

Fokkema2012, eq 5.4.

+
+
Parameters:
+
    +
  • x – energy loss(es) for which to get the probability.

  • +
  • count_scale – total number of counts.

  • +
  • mev_scale – number of MeV per unit of x.

  • +
  • gauss_scale – width of the normal distribution.

  • +
+
+
Returns:
+

probability.

+
+
+
+ +
+
+conv_landau(x, count_scale=1, mev_scale=None, gauss_scale=None)
+

Bare-bones convoluted landau function

+

This thing is fragile. Use with great care! First and foremost, +x must be symmetrical around zero. Second, x must contain most of +the Landau function (including a significant part of the tail). +If not, the results cannot be trusted!

+

Better use conv_landau_for_x, which better handles this.

+
+ +
+
+residuals(p, xdata, ydata, a, b)
+
+ +
+
+constrained_residuals(p, xdata, ydata, a, b)
+
+ +
+ +
+
+sapphire.analysis.landau.discrete_convolution(f, g, t)
+

Discrete convolution

+
+
Parameters:
+
    +
  • f,g – two functions that take one argument (t).

  • +
  • t – values for which the functions will be evaluated, and the along +which the convolution will be performed.

  • +
+
+
Returns:
+

convolution of the two functions.

+
+
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/analysis/process_events.html b/analysis/process_events.html new file mode 100644 index 00000000..e4326105 --- /dev/null +++ b/analysis/process_events.html @@ -0,0 +1,696 @@ + + + + + + + + Processing of HiSPARC events — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Processing of HiSPARC events

+

Process HiSPARC events

+

This module can be used analyse data to get observables like arrival +times and particle count in each detector for each event.

+

Example usage:

+
import datetime
+
+import tables
+
+from sapphire.publicdb import download_data
+from sapphire import ProcessEvents
+
+STATIONS = [501, 503, 506]
+START = datetime.datetime(2013, 1, 1)
+END = datetime.datetime(2013, 1, 2)
+
+
+if __name__ == '__main__':
+    station_groups = ['/s%d' % u for u in STATIONS]
+
+    with tables.open_file('data.h5', 'w') as data:
+        for station, group in zip(STATIONS, station_groups):
+            download_data(data, group, station, START, END, True)
+            proc = ProcessEvents(data, group)
+            proc.process_and_store_results()
+
+
+
+
+sapphire.analysis.process_events.ADC_THRESHOLD = 20
+

Threshold for arrival times, relative to the baseline

+
+ +
+
+sapphire.analysis.process_events.TRIGGER_2 = (2, 0, False, 0)
+

Default trigger for 2-detector station +2 low and no high, no external

+
+ +
+
+sapphire.analysis.process_events.TRIGGER_4 = (3, 2, True, 0)
+

Default trigger for 4-detector station +3 low or 2 high, no external

+
+ +
+
+class sapphire.analysis.process_events.ProcessEvents(data, group, source=None, progress=True)
+

Process HiSPARC events to obtain several observables.

+

This class can be used to process a set of HiSPARC events and adds a +few observables like particle arrival time and number of particles in +the detector to a copy of the event table.

+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile

  • +
  • group – the group containing the station data. In normal +cases, this is simply the group containing the events table.

  • +
  • source – the name of the events table. Default: None, +meaning the default name ‘events’.

  • +
  • progress – if True show a progressbar while copying and +processing events.

  • +
+
+
+
+
+processed_events_description = {'baseline': Int16Col(shape=(np.int64(4),), dflt=np.int16(-1), pos=6), 'data_reduction': BoolCol(shape=(), dflt=np.False_, pos=4), 'event_id': UInt32Col(shape=(), dflt=np.uint32(0), pos=0), 'event_rate': Float32Col(shape=(), dflt=np.float32(0.0), pos=12), 'ext_timestamp': UInt64Col(shape=(), dflt=np.uint64(0), pos=3), 'integrals': Int32Col(shape=(np.int64(4),), dflt=np.int32(-1), pos=10), 'n1': Float32Col(shape=(), dflt=np.float32(-1.0), pos=17), 'n2': Float32Col(shape=(), dflt=np.float32(-1.0), pos=18), 'n3': Float32Col(shape=(), dflt=np.float32(-1.0), pos=19), 'n4': Float32Col(shape=(), dflt=np.float32(-1.0), pos=20), 'n_peaks': Int16Col(shape=(np.int64(4),), dflt=np.int16(-1), pos=8), 'nanoseconds': UInt32Col(shape=(), dflt=np.uint32(0), pos=2), 'pulseheights': Int16Col(shape=(np.int64(4),), dflt=np.int16(-1), pos=9), 'std_dev': Int16Col(shape=(np.int64(4),), dflt=np.int16(-1), pos=7), 't1': Float32Col(shape=(), dflt=np.float32(-1.0), pos=13), 't2': Float32Col(shape=(), dflt=np.float32(-1.0), pos=14), 't3': Float32Col(shape=(), dflt=np.float32(-1.0), pos=15), 't4': Float32Col(shape=(), dflt=np.float32(-1.0), pos=16), 't_trigger': Float32Col(shape=(), dflt=np.float32(-1.0), pos=21), 'timestamp': Time32Col(shape=(), dflt=np.int32(0), pos=1), 'traces': Int32Col(shape=(np.int64(4),), dflt=np.int32(-1), pos=11), 'trigger_pattern': UInt32Col(shape=(), dflt=np.uint32(0), pos=5)}
+
+ +
+
+process_and_store_results(destination=None, overwrite=False, limit=None)
+

Process events and store the results.

+
+
Parameters:
+
    +
  • destination – name of the table where the results will be +written. The default, None, corresponds to ‘events’.

  • +
  • overwrite – if True, overwrite previously obtained results.

  • +
  • limit – the maximum number of events that will be stored. +The default, None, corresponds to no limit.

  • +
+
+
+
+ +
+
+get_traces_for_event(event)
+

Return the traces from an event.

+
+
Parameters:
+

event – a row from the events table.

+
+
Returns:
+

the traces: an array of pulseheight values.

+
+
+
+ +
+
+get_traces_for_event_index(idx)
+

Return the traces from event #idx.

+
+
Parameters:
+

idx – the index number of the event.

+
+
Returns:
+

the traces: an array of pulseheight values.

+
+
+
+ +
+
+process_traces()
+

Process traces to yield pulse timing information.

+
+ +
+
+static first_above_threshold(trace, threshold)
+

Find the first element in the list equal or above threshold

+

If no element matches the condition -999 will be returned.

+
+
Parameters:
+
    +
  • trace – iterable trace.

  • +
  • threshold – value the trace has to be greater or equal to.

  • +
+
+
Returns:
+

index in trace where a value is greater or equal to +threshold.

+
+
+
+ +
+ +
+
+class sapphire.analysis.process_events.ProcessIndexedEvents(data, group, indexes, source=None, progress=True)
+

Process a subset of events using an index.

+

This is a subclass of ProcessEvents. Using an index, this +class will only process a subset of events, thus saving time. For +example, this class can only process events making up a coincidence.

+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile

  • +
  • group – the group containing the station data. In normal +cases, this is simply the group containing the events table.

  • +
  • indexes – a list of indexes into the events table.

  • +
  • source – the name of the events table. Default: None, +meaning the default name ‘events’.

  • +
  • progress – if True show a progressbar while copying and +processing events.

  • +
+
+
+
+
+process_traces()
+

Process traces to yield pulse timing information.

+

This method makes use of the indexes to build a list of events.

+
+ +
+
+get_traces_for_indexed_event_index(idx)
+
+ +
+ +
+
+class sapphire.analysis.process_events.ProcessEventsWithLINT(data, group, source=None, progress=True)
+

Process events using LInear INTerpolation for arrival times.

+

This is a subclass of ProcessEvents. Use a linear +interpolation method to determine the arrival times of particles.

+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile

  • +
  • group – the group containing the station data. In normal +cases, this is simply the group containing the events table.

  • +
  • source – the name of the events table. Default: None, +meaning the default name ‘events’.

  • +
  • progress – if True show a progressbar while copying and +processing events.

  • +
+
+
+
+ +
+
+class sapphire.analysis.process_events.ProcessIndexedEventsWithLINT(data, group, indexes, source=None, progress=True)
+

Process a subset of events using LInear INTerpolation.

+

This is a subclass of ProcessIndexedEvents and +ProcessEventsWithLINT.

+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile

  • +
  • group – the group containing the station data. In normal +cases, this is simply the group containing the events table.

  • +
  • indexes – a list of indexes into the events table.

  • +
  • source – the name of the events table. Default: None, +meaning the default name ‘events’.

  • +
  • progress – if True show a progressbar while copying and +processing events.

  • +
+
+
+
+ +
+
+class sapphire.analysis.process_events.ProcessEventsWithoutTraces(data, group, source=None, progress=True)
+

Process events without traces

+

This is a subclass of ProcessEvents. Processing events +without considering traces will invalidate the arrival time +information. However, for some analyses it is not necessary to obtain +this information. Ignoring the traces will then greatly decrease +processing time and data size.

+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile

  • +
  • group – the group containing the station data. In normal +cases, this is simply the group containing the events table.

  • +
  • source – the name of the events table. Default: None, +meaning the default name ‘events’.

  • +
  • progress – if True show a progressbar while copying and +processing events.

  • +
+
+
+
+ +
+
+class sapphire.analysis.process_events.ProcessIndexedEventsWithoutTraces(data, group, indexes, source=None, progress=True)
+

Process a subset of events without traces

+

This is a subclass of ProcessIndexedEvents and +ProcessEventsWithoutTraces. Processing events without +considering traces will invalidate the arrival time information. +However, for some analyses it is not necessary to obtain this +information. Ignoring the traces will then greatly decrease +processing time and data size.

+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile

  • +
  • group – the group containing the station data. In normal +cases, this is simply the group containing the events table.

  • +
  • indexes – a list of indexes into the events table.

  • +
  • source – the name of the events table. Default: None, +meaning the default name ‘events’.

  • +
  • progress – if True show a progressbar while copying and +processing events.

  • +
+
+
+
+ +
+
+class sapphire.analysis.process_events.ProcessEventsWithTriggerOffset(data, group, source=None, progress=True, station=None)
+

Process events and reconstruct trigger time from traces

+

The trigger times are stored in the columnt_trigger, they are +relative to the start of traces, just like the t# columns.

+

If no trigger can be found, possibly due to the data filter, +a value of -999 will be entered.

+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile

  • +
  • group – the group containing the station data. In normal +cases, this is simply the group containing the events table.

  • +
  • source – the name of the events table. Default: None, +meaning the default name ‘events’.

  • +
  • progress – if True show a progressbar while copying and +processing events.

  • +
  • station – station number of station to which the data belongs.

  • +
+
+
+
+ +
+
+class sapphire.analysis.process_events.ProcessEventsFromSource(source_file, dest_file, source_group, dest_group, progress=False)
+

Process HiSPARC events from a different source.

+

This class is a subclass of ProcessEvents. The difference is that in +this class, the source and destination are assumed to be different +files. This also means that the source is untouched (no renaming of +original event tables) and the destination is assumed to be empty.

+

Initialize the class.

+
+
Parameters:
+
    +
  • source_file,dest_file – PyTables source and destination files.

  • +
  • source_group,dest_group – the pathname of the source and +destination group.

  • +
  • progress – if True show a progressbar while copying and +processing events.

  • +
+
+
+
+ +
+
+class sapphire.analysis.process_events.ProcessEventsFromSourceWithTriggerOffset(source_file, dest_file, source_group, dest_group, station=None, progress=False)
+

Process events from a different source and find trigger.

+

This is a subclass of ProcessEventsFromSource and +ProcessEventsWithTriggerOffset. Processing events and +finding the trigger time in the traces. And storing the results in a +different file than the source.

+

Initialize the class.

+
+
Parameters:
+
    +
  • source_file,dest_file – PyTables source and destination files.

  • +
  • source_group,dest_group – the pathname of the source and +destination group.

  • +
  • station – station number of station to which the data belongs.

  • +
  • progress – if True show a progressbar while copying and +processing events.

  • +
+
+
+
+ +
+
+class sapphire.analysis.process_events.ProcessDataTable(data, group, source=None, progress=True)
+

Process HiSPARC abstract data table to clean the data.

+

Abstract data is a PyTables table containing a timestamp for each row. +Weather and singles data are examples of such tables. This class can be +used to process a set of abstract HiSPARC data, to remove duplicates and +sort the data by timestamp to store it in to a copy of the table.

+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile

  • +
  • group – the group containing the station data. In normal +cases, this is simply the group containing the events table.

  • +
  • source – the name of the events table. Default: None, +meaning the default name ‘events’.

  • +
  • progress – if True show a progressbar while copying and +processing events.

  • +
+
+
+
+
+table_name = 'abstract_data'
+
+ +
+
+process_and_store_results(destination=None, overwrite=False, limit=None)
+

Process table and store the results.

+
+
Parameters:
+
    +
  • destination – name of the table where the results will be +written. The default, None, corresponds to the value stored +in self.table_name.

  • +
  • overwrite – if True, overwrite previously obtained results.

  • +
  • limit – the maximum number of records that will be stored. +The default, None, corresponds to no limit.

  • +
+
+
+
+ +
+ +
+
+class sapphire.analysis.process_events.ProcessDataTableFromSource(source_file, dest_file, source_group, dest_group, progress=False)
+

Process HiSPARC abstract data table from a different source.

+

This class is a subclass of ProcessDataTable. The difference is that in +this class, the source and destination are assumed to be different +files. This also means that the source is untouched (no renaming of +original event tables) and the destination is assumed to be empty.

+

Initialize the class.

+
+
Parameters:
+
    +
  • source_file,dest_file – PyTables source and destination files.

  • +
  • source_group,dest_group – the pathname of the source and +destination group.

  • +
  • progress – if True show a progressbar while copying and +processing events.

  • +
+
+
+
+ +
+
+class sapphire.analysis.process_events.ProcessWeather(data, group, source=None, progress=True)
+

Process HiSPARC weather to clean the data.

+

This class can be used to process a set of HiSPARC weather, to +remove duplicates and sort the data by timestamp to store it in to a +copy of the weather table.

+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile

  • +
  • group – the group containing the station data. In normal +cases, this is simply the group containing the events table.

  • +
  • source – the name of the events table. Default: None, +meaning the default name ‘events’.

  • +
  • progress – if True show a progressbar while copying and +processing events.

  • +
+
+
+
+
+table_name = 'weather'
+
+ +
+ +
+
+class sapphire.analysis.process_events.ProcessWeatherFromSource(source_file, dest_file, source_group, dest_group, progress=False)
+

Process HiSPARC weather from a different source.

+

This class behaves like a subclass of ProcessWeather because of a common +ancestor (ProcessDataTable). The difference between this class +and ProcessWeather is that in this class, the source and destination are +assumed to be different files. This also means that the source is +untouched (no renaming of original event tables) and the destination is +assumed to be empty.

+

Initialize the class.

+
+
Parameters:
+
    +
  • source_file,dest_file – PyTables source and destination files.

  • +
  • source_group,dest_group – the pathname of the source and +destination group.

  • +
  • progress – if True show a progressbar while copying and +processing events.

  • +
+
+
+
+
+table_name = 'weather'
+
+ +
+ +
+
+class sapphire.analysis.process_events.ProcessSingles(data, group, source=None, progress=True)
+

Process HiSPARC singles data to clean the data.

+

This class can be used to process a set of HiSPARC singles data, to +remove duplicates and sort the data by timestamp to store it in to a +copy of the singles data table.

+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile

  • +
  • group – the group containing the station data. In normal +cases, this is simply the group containing the events table.

  • +
  • source – the name of the events table. Default: None, +meaning the default name ‘events’.

  • +
  • progress – if True show a progressbar while copying and +processing events.

  • +
+
+
+
+
+table_name = 'singles'
+
+ +
+ +
+
+class sapphire.analysis.process_events.ProcessSinglesFromSource(source_file, dest_file, source_group, dest_group, progress=False)
+

Process HiSPARC singles data from a different source.

+

This class behaves like a subclass of ProcessSingles because of a common +ancestor (ProcessDataTable). The difference between this class +and ProcessSingles is that in this class, the source and destination are +assumed to be different files. This also means that the source is +untouched (no renaming of original event tables) and the destination is +assumed to be empty.

+

Initialize the class.

+
+
Parameters:
+
    +
  • source_file,dest_file – PyTables source and destination files.

  • +
  • source_group,dest_group – the pathname of the source and +destination group.

  • +
  • progress – if True show a progressbar while copying and +processing events.

  • +
+
+
+
+
+table_name = 'singles'
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/analysis/process_traces.html b/analysis/process_traces.html new file mode 100644 index 00000000..1a4d17d3 --- /dev/null +++ b/analysis/process_traces.html @@ -0,0 +1,463 @@ + + + + + + + + Processing of HiSPARC traces — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Processing of HiSPARC traces

+

Process HiSPARC traces

+

This module can be used analyse (raw) traces. It implements the same +algorithms as are implemented in the HiSPARC DAQ.

+

The MeanFilter is meant to mimic the filter in the HiSPARC DAQ. +It is reproduced here to make it easy to read the algorithm.

+
+
+sapphire.analysis.process_traces.PRE_TRIGGER = 400
+

Default pre trigger window, i.e. 1000 ns

+
+ +
+
+sapphire.analysis.process_traces.TRIGGER = 600
+

Default trigger window, i.e. 1500 ns

+
+ +
+
+sapphire.analysis.process_traces.POST_TRIGGER = 1400
+

Default post trigger window, i.e. 3500 ns

+
+ +
+
+sapphire.analysis.process_traces.ADC_FILTER_THRESHOLD = 10
+

Default Mean filter threshold of -6 mV

+
+ +
+
+sapphire.analysis.process_traces.ADC_BASELINE_THRESHOLD = 17
+

Default Baseline threshold of -10 mV

+
+ +
+
+sapphire.analysis.process_traces.ADC_LOW_THRESHOLD = 253
+

Default low ADC threshold for HiSPARC II

+
+ +
+
+sapphire.analysis.process_traces.ADC_HIGH_THRESHOLD = 323
+

Default high ADC threshold for HiSPARC II

+
+ +
+
+sapphire.analysis.process_traces.ADC_LOW_THRESHOLD_III = 82
+

Default low ADC threshold for HiSPARC III

+
+ +
+
+sapphire.analysis.process_traces.ADC_HIGH_THRESHOLD_III = 150
+

Default high ADC threshold for HiSPARC III

+
+ +
+
+sapphire.analysis.process_traces.DATA_REDUCTION_PADDING = 26
+

Padding to allow later baseline determination

+
+ +
+
+class sapphire.analysis.process_traces.TraceObservables(traces, threshold=17, padding=26)
+

Reconstruct trace observables

+

If one wants to reconstruct trace observables from existing data some +caveats apply. If the station applied the Mean Filter the trace values +will no longer match the raw values used to determine the observables +on the station. Additionally, if data reduction was active the trace +may be missing samples without a significant signal, this complicates +the determination of the baseline. Moreover, data reduction uses the +ADC_BASELINE_THRESHOLD to determine what signals to keep, so tiny pulses +may be removed making it impossible to reconstruct tiny pulseheights.

+

The (default) value of ADC_BASELINE_THRESHOLD is different for the +HiSPARC DAQ prior to v4 and also for PySPARC. Those use 25 ADC as +threshold.

+

Each returned list contains at least 4 elements, if there are less than +4 traces the list is padded with the code for missing detectors: -1.

+

Initialize the class

+
+
Parameters:
+
    +
  • traces – a NumPy array of traces, ordered such that the first +element is the first sample of each trace.

  • +
  • threshold – value of the threshold to use, in ADC counts.

  • +
  • padding – number of samples which should be useable to determine +the baseline.

  • +
+
+
+
+
+property baselines
+

Mean value of the first part of the trace

+

This does not perfectly match the implementation in the DAQ which +is more complicated, this does provide the correct value in most +cases, or is off by 1 in most other.

+

Usually this value is either around 200 or 30, depending on the used +version of the DAQ.

+
+
Returns:
+

the baseline in ADC count.

+
+
+
+ +
+
+property std_dev
+

Standard deviation of the first part of the trace

+
+
Returns:
+

the standard deviation in milli ADC count.

+
+
+
+ +
+
+property pulseheights
+

Maximum peak to baseline value in trace

+
+
Returns:
+

the pulseheights in ADC count.

+
+
+
+ +
+
+property integrals
+

Integral of trace for all values over threshold

+

The threshold is defined by ADC_BASELINE_THRESHOLD

+
+
Returns:
+

the pulse integral in ADC count * sample.

+
+
+
+ +
+
+property n_peaks
+

Number of peaks in the trace

+

The peak threshold is defined by ADC_LOW_THRESHOLD

+
+
Returns:
+

the pulse integral in ADC count * sample.

+
+
+
+ +
+ +
+
+class sapphire.analysis.process_traces.MeanFilter(use_threshold=True, threshold=10)
+

Filter raw traces

+

This class replicates the behavior of the Mean_Filter.vi in the HiSPARC +DAQ. A sawtooth-like pattern may be visible in traces due to ADC +misalignment and the synchronization pulse (?). This filter removes such +small oscillations but keeps significant pulses.

+
+

Warning

+

This is a destructive algorithm which removes important information +from the data.

+
+

Verified, by eye, with the LabView VI and Bachelor thesis Oostenbrugge2014.

+

Initialize the class

+
+
Parameters:
+
    +
  • use_threshold – use a threshold when filtering traces.

  • +
  • threshold – value of the threshold to use.

  • +
+
+
+
+
+filter_traces(raw_traces)
+

Apply the mean filter to multiple traces

+
+
Parameters:
+

raw_traces – list of raw event traces.

+
+
Returns:
+

filtered traces.

+
+
+
+ +
+
+filter_trace(raw_trace)
+

Apply the mean filter to a single trace

+

First separate the even and odd ADC traces, filter each separately. +Then recombine them and pass the entire trace through the filter.

+
+
Parameters:
+

raw_trace – raw event trace.

+
+
Returns:
+

filtered trace.

+
+
+
+ +
+
+mean_filter_with_threshold(trace)
+

The mean filter in case use_threshold is True

+
+ +
+
+mean_filter_without_threshold(trace)
+

The mean filter in case use_threshold is False

+
+ +
+ +
+
+class sapphire.analysis.process_traces.DataReduction(threshold=17, padding=26)
+

Data reduce traces

+

This class replicates the behavior also implemented in the HiSPARC DAQ. +The threshold and padding values used by the DAQ may be slightly +different, but these should closely match the defaults.

+

The default padding of 25 samples matches the number of samples used by +the TraceObservables to determine the baseline.

+

Initialize the class

+
+
Parameters:
+
    +
  • threshold – value of the threshold to use, in ADC counts.

  • +
  • padding – number of samples to keep around the determined cuts.

  • +
+
+
+
+
+reduce_traces(traces, baselines=None, return_offset=False)
+

Apply data reduction to the given traces

+
+
Parameters:
+
    +
  • traces – a NumPy array of traces, ordered such that the first +element is the first sample of each trace.

  • +
  • baselines – list of baselines for the traces, if None the +baselines will be determined using TraceObservables.

  • +
  • return_offset – if True the left cut will also be returned.

  • +
+
+
Returns:
+

data reduced traces, including the left cut if return_offset +is True.

+
+
+
+ +
+
+determine_cuts(traces, baselines)
+

Determine the left and right cuts for an event

+

Note that this does not include the padding.

+
+
Parameters:
+
    +
  • traces – a NumPy array of traces, ordered such that the first +element is the first sample of each trace.

  • +
  • baselines – list of baselines for the traces.

  • +
+
+
Returns:
+

indices into traces where the first signals from left and +right cross the threshold.

+
+
+
+ +
+
+add_padding(left, right, length=None)
+

Add padding around the cuts to allow later baseline determination

+

The right value may be larger than the length of the traces if length +is not given. This is only an issues if the actual value is of +interest, because:

+
>>> [1, 2, 3][:6]
+[1, 2, 3]
+
+
+
+
Parameters:
+
    +
  • left,right – the left and right cuts from determine_cuts().

  • +
  • length – optionally the length of the list can be given to +prevent the right cut to be larger than the maximum +length of the trace, this is not required.

  • +
+
+
Returns:
+

indices into traces where to cut the trace.

+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/analysis/reconstructions.html b/analysis/reconstructions.html new file mode 100644 index 00000000..e8402f9e --- /dev/null +++ b/analysis/reconstructions.html @@ -0,0 +1,500 @@ + + + + + + + + Reconstructions — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Reconstructions

+

Reconstruct HiSPARC events and coincidences

+

This module contains classes that can be used to reconstruct +HiSPARC events and coincidences. These classes can be used to automate +the tasks of reconstructing directions and/or cores.

+

The classes can reconstruct measured data from the ESD as well as +simulated data from sapphire.simulations.

+

The classes read data stored in HDF5 files and extract station metadata +(cluster and detector layout, station and detector offsets) from +various sources:

+ +
+

Reconstructed data is stored in HDF5 files.

+
+
+
+class sapphire.analysis.reconstructions.ReconstructESDEvents(data, station_group, station, overwrite=False, progress=True, verbose=False, destination='reconstructions', force_fresh=False, force_stale=False)
+

Reconstruct events from single stations

+

Example usage:

+
>>> import tables
+>>> from sapphire import ReconstructESDEvents
+
+>>> data = tables.open_file('2014_1_1.h5', 'a')
+>>> station_path = '/hisparc/cluster_amsterdam/station_506'
+>>> rec = ReconstructESDEvents(data, station_path, 506, overwrite=True)
+>>> rec.reconstruct_and_store()
+
+
+

To visualize the results:

+
>>> import matplotlib.pyplot as plt
+>>> plt.polar([p for p in rec.phi if not isnan(p)],
+...           [t for t in rec.theta if not isnan(t)], 'ko', alpha=0.2)
+
+
+

or:

+
>>> plt.polar(rec.reconstructions.col('azimuth'),
+...           rec.reconstructions.col('zenith'), 'ko', alpha=0.2)
+
+
+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile.

  • +
  • station_group – the group containing the event table, +the results will also be stored in this group.

  • +
  • station – either a station number or +sapphire.clusters.Station object. If it is a number the +positions and offsets will be retrieved from the public database +or retrieved from the datafile when stored by a simulation. +Otherwise the offsets will be determined with the available data.

  • +
  • overwrite – if True overwrite existing reconstruction table.

  • +
  • progress – if True show a progressbar while reconstructing.

  • +
  • verbose – if True be verbose about station metadata usage.

  • +
  • destination – alternative name for reconstruction table.

  • +
+
+
+
+
+reconstruct_and_store(detector_ids=None)
+

Shorthand function to reconstruct event and store the results

+
+ +
+
+reconstruct_directions(detector_ids=None)
+

Reconstruct direction for all events

+
+
Parameters:
+

detector_ids – list of detector ids to use for reconstructions.

+
+
+
+ +
+
+reconstruct_cores(detector_ids=None)
+

Reconstruct core for all events

+
+
Parameters:
+

detector_ids – list of detector ids to use for reconstructions.

+
+
+
+ +
+
+prepare_output()
+

Prepare output table

+
+ +
+
+get_detector_offsets()
+

Get or determine detector offsets

+

Try to extract the offsets from the provided cluster object. +If those are not available use the sapphire.api.Station +object for the station number. +Else determine the offsets from the event table.

+
    +
  • if a cluster object is provided:

    +
      +
    • use offsets from that object if available in the object

    • +
    • else determine the offsets from the events in datafile with the +provided cluster object.

    • +
    +
  • +
  • if a station number is provided:

    +
      +
    • if a cluster object is stored in the datafile use offsets from +that object if available.

    • +
    • else get offsets from api.Station object.

    • +
    +
  • +
+
+ +
+
+store_offsets()
+

Store the determined offset in a table.

+
+ +
+
+store_reconstructions()
+

Loop over list of reconstructed data and store results

+

Unsuccessful reconstructions are also stored but with the NumPy +NaN as reconstructed value.

+
+ +
+ +
+
+class sapphire.analysis.reconstructions.ReconstructESDEventsFromSource(source_data, dest_data, source_group, dest_group, station, overwrite=False, progress=True, verbose=False, destination='reconstructions', force_fresh=False, force_stale=False)
+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile.

  • +
  • station_group – the group containing the event table, +the results will also be stored in this group.

  • +
  • station – either a station number or +sapphire.clusters.Station object. If number the +positions and offsets are retrieved from the public database. +Otherwise the offsets will be determined with the available data.

  • +
  • overwrite – if True overwrite existing reconstruction table.

  • +
  • progress – if True show a progressbar while reconstructing.

  • +
  • verbose – if True be verbose about station metadata usage.

  • +
  • destination – alternative name for reconstruction table.

  • +
+
+
+
+
+prepare_output()
+

Prepare output table

+
+ +
+ +
+
+class sapphire.analysis.reconstructions.ReconstructSimulatedEvents(data, station_group, station, overwrite=False, progress=True, verbose=False, destination='reconstructions', force_fresh=False, force_stale=False)
+

Reconstruct simulated events from single stations

+

Simulated events use simulated meta-data (e.g. timing offsets) +which are stored as a BaseCluster object +The object is stored as an node attribute of ‘/coincidences’ in the +HDF5 file. This class will try to read that object and use it’s meta-data +in reconstructions.

+

The station number must match the station number in the stored object.

+

Example usage:

+
>>> import tables
+>>> from sapphire import ReconstructESDEvents
+
+>>> data = tables.open_file('simulation.h5', 'a')
+>>> station_path = '/cluster_simulations/station_506'
+>>> rec = ReconstructESDEvents(data, station_path, 506, overwrite=True)
+>>> rec.reconstruct_and_store()
+
+
+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile.

  • +
  • station_group – the group containing the event table, +the results will also be stored in this group.

  • +
  • station – either a station number or +sapphire.clusters.Station object. If it is a number the +positions and offsets will be retrieved from the public database +or retrieved from the datafile when stored by a simulation. +Otherwise the offsets will be determined with the available data.

  • +
  • overwrite – if True overwrite existing reconstruction table.

  • +
  • progress – if True show a progressbar while reconstructing.

  • +
  • verbose – if True be verbose about station metadata usage.

  • +
  • destination – alternative name for reconstruction table.

  • +
+
+
+
+ +
+
+class sapphire.analysis.reconstructions.ReconstructESDCoincidences(data, coincidences_group='/coincidences', overwrite=False, progress=True, verbose=False, destination='reconstructions', cluster=None, force_fresh=False, force_stale=False)
+

Reconstruct coincidences, e.g. event between multiple stations

+

Example usage:

+
>>> import tables
+>>> from sapphire import ReconstructESDCoincidences
+
+>>> data = tables.open_file('2014_1_1.h5', 'a')
+>>> rec = ReconstructESDCoincidences(data, overwrite=True)
+>>> rec.reconstruct_and_store()
+
+
+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile.

  • +
  • coincidences_group – the destination group.

  • +
  • overwrite – if True overwrite existing reconstruction table.

  • +
  • progress – if True show a progressbar while reconstructing.

  • +
  • verbose – if True be verbose about station metadata usage.

  • +
  • destination – alternative name for reconstruction table.

  • +
  • cluster – a Cluster object to use for the reconstructions.

  • +
+
+
+
+
+reconstruct_and_store(station_numbers=None)
+

Shorthand function to reconstruct coincidences and store results

+
+ +
+
+reconstruct_directions(station_numbers=None)
+

Reconstruct direction for all events

+
+
Parameters:
+

station_numbers – list of stations to use for reconstructions.

+
+
+
+ +
+
+reconstruct_cores(station_numbers=None)
+

Reconstruct core for all events

+
+
Parameters:
+

station_numbers – list of stations to use for reconstructions.

+
+
+
+ +
+
+prepare_output()
+

Prepare output table

+
+ +
+
+get_station_timing_offsets()
+

Construct a dict of Station objects

+

Try to extract offsets from provided cluster objects into a dictionary, +to be used by the reconstructions. +If the cluster is not available create a Station +object for each station in the cluster.

+
+ +
+
+store_reconstructions()
+

Loop over list of reconstructed data and store results

+

Unsuccessful reconstructions are also stored but with the NumPy +NaN as reconstructed value.

+
+ +
+ +
+
+class sapphire.analysis.reconstructions.ReconstructESDCoincidencesFromSource(source_data, dest_data, source_group, dest_group, overwrite=False, progress=True, verbose=False, destination='reconstructions', cluster=None, force_fresh=False, force_stale=False)
+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile.

  • +
  • station_group – the group containing the event table, +the results will also be stored in this group.

  • +
  • station – either a station number or +sapphire.clusters.Station object. If number the +positions and offsets are retrieved from the public database. +Otherwise the offsets will be determined with the available data.

  • +
  • overwrite – if True overwrite existing reconstruction table.

  • +
  • progress – if True show a progressbar while reconstructing.

  • +
  • verbose – if True be verbose about station metadata usage.

  • +
  • destination – alternative name for reconstruction table.

  • +
+
+
+
+
+prepare_output()
+

Prepare output table

+
+ +
+ +
+
+class sapphire.analysis.reconstructions.ReconstructSimulatedCoincidences(data, coincidences_group='/coincidences', overwrite=False, progress=True, verbose=False, destination='reconstructions', cluster=None, force_fresh=False, force_stale=False)
+

Reconstruct simulated coincidences.

+

Simulated coincidences use simulated meta-data (e.g. timing offsets) +which are stored as a BaseCluster object +The object is stored as an node attribute of ‘/coincidences’ in the +HDF5 file. This class will try to read that object and use it’s meta-data +in reconstructions.

+

Example usage:

+
>>> import tables
+>>> from sapphire import ReconstructSimulatedCoincidences
+
+>>> data = tables.open_file('simulated.h5', 'a')
+>>> rec = ReconstructSimulatedCoincidences(data, overwrite=True)
+>>> rec.reconstruct_and_store()
+
+
+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile.

  • +
  • coincidences_group – the destination group.

  • +
  • overwrite – if True overwrite existing reconstruction table.

  • +
  • progress – if True show a progressbar while reconstructing.

  • +
  • verbose – if True be verbose about station metadata usage.

  • +
  • destination – alternative name for reconstruction table.

  • +
  • cluster – a Cluster object to use for the reconstructions.

  • +
+
+
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/analysis/signal_calibration.html b/analysis/signal_calibration.html new file mode 100644 index 00000000..17762b26 --- /dev/null +++ b/analysis/signal_calibration.html @@ -0,0 +1,257 @@ + + + + + + + + Detector signal calibration — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Detector signal calibration

+

Determine signal calibration values for data

+

This module can be used to determine signal calibration values from data.

+

Determine the PMT response curve to correct the detected number of MIPs.

+
+
+sapphire.analysis.signal_calibration.linear(x, slope, intercept)
+

Evaluate a linear function at point x

+
+
Parameters:
+
    +
  • x – x coordinate at which to evaluate the function.

  • +
  • slope – slope of the line.

  • +
  • intercept – y-intercept at x = 0.

  • +
+
+
Returns:
+

the y value at x, given the slope and intercept.

+
+
+
+ +
+
+sapphire.analysis.signal_calibration.inverse_linear(y, slope, intercept)
+

Evaluate the inverse linear function for value y

+
+
Parameters:
+
    +
  • y – value y.

  • +
  • slope – slope of the line.

  • +
  • intercept – y-intercept at x = 0.

  • +
+
+
Returns:
+

the x coordinate for value y, given the slope and intercept.

+
+
+
+ +
+
+sapphire.analysis.signal_calibration.log_linear(x, slope, intercept)
+

Evaluate a linear function in log-log space at point x

+
+
Parameters:
+
    +
  • x – x coordinate at which to evaluate the function.

  • +
  • slope – slope of the line.

  • +
  • intercept – log10 y-intercept at x = 1 (log10 1 = 0).

  • +
+
+
Returns:
+

the y value at x, given the slope and intercept.

+
+
+
+ +
+
+sapphire.analysis.signal_calibration.linear_intersection(slope_1, intercept_1, slope_2, intercept_2)
+

The x coordinate at which the two linear lines intersect

+
+
Parameters:
+
    +
  • slope1 – slope of the first line.

  • +
  • intercept1 – y-intercept at x = 0 of the first line.

  • +
  • slope2 – slope of the second line.

  • +
  • intercept2 – y-intercept at x = 0 of the second line.

  • +
+
+
Returns:
+

x coordinate of the intersection.

+
+
+
+ +
+
+sapphire.analysis.signal_calibration.linear_circle_linear(x, radius, slope_low, intercept_low, slope_high, intercept_high)
+

Two linear lines connected by a circle segment

+
+
Parameters:
+
    +
  • x – x coordinate at which to evaluate the function.

  • +
  • radius – radius of the cricle connecting the lines.

  • +
  • slope_low – the slope of the lower (low x) linear line.

  • +
  • intercept_low – the y-intercept of the lower (low x) linear line.

  • +
  • slope_high – the slope of the upper (high x) linear line.

  • +
  • intercept_high – the y-intercept of the upper (high x) linear line.

  • +
+
+
Returns:
+

the y value at x.

+
+
+

The center of the circle is given by (center_x, center_y)

+
+ +
+
+sapphire.analysis.signal_calibration.xy_circle_linear(x, radius, slope_high, intercept_high)
+

An x=y and a linear line connected by a circle segment

+
+
Parameters:
+
    +
  • x – x coordinate at which to evaluate the function.

  • +
  • radius – radius of the cricle connecting the lines.

  • +
  • slope_high – the slope of the upper (high x) linear line.

  • +
  • intercept_high – the y-intercept of the upper (high x) linear line.

  • +
+
+
Returns:
+

the y value at x.

+
+
+
+ +
+
+sapphire.analysis.signal_calibration.loglog_xy_circle_linear(x, radius, slope_high, intercept_high)
+

As xy_circle_linear but in log-log space

+
+ +
+
+sapphire.analysis.signal_calibration.loglog_linear_circle_linear(x, radius, slope_low, intercept_low, slope_high, intercept_high)
+

As linear_circle_linear but in log-log space

+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/analysis/time_deltas.html b/analysis/time_deltas.html new file mode 100644 index 00000000..67319434 --- /dev/null +++ b/analysis/time_deltas.html @@ -0,0 +1,218 @@ + + + + + + + + Time deltas — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Time deltas

+

Determine time differences between coincident events

+

Determine time delta between coincidence events from station pairs.

+

Example usage:

+
import datetime
+
+import tables
+
+from sapphire import download_coincidences
+from sapphire import ProcessTimeDeltas
+
+START = datetime.datetime(2015, 2, 1)
+END = datetime.datetime(2015, 2, 5)
+
+if __name__ == '__main__':
+    with tables.open_file('data.h5', 'w') as data:
+        download_coincidences(data, start=START, end=END)
+        td = ProcessTimeDeltas(data)
+        td.determine_and_store_time_deltas()
+
+
+
+
+class sapphire.analysis.time_deltas.ProcessTimeDeltas(data, coincidence_group='/coincidences', progress=True, destination='time_deltas')
+

Process HiSPARC event coincidences to obtain time deltas.

+

Use this to determine arrival time differences between station pairs which +have coincident events.

+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile.

  • +
  • coincidence_group – path to the coincidences group.

  • +
  • progress – if True show a progressbar while determining and +storing offsets.

  • +
  • destination – group name for the time_deltas, as subgroup of +the coincidence_group.

  • +
+
+
+
+
+determine_and_store_time_deltas()
+

Find station pairs, determine time deltas, and store the results.

+
+ +
+
+determine_and_store_time_deltas_for_pairs()
+

Determine time deltas for all pairs and store the results.

+
+ +
+
+find_station_pairs()
+

Find all unique station pairs which are in a coincidence together

+

Assumes the stations in the s_index are sorted by station number.

+
+ +
+
+get_detector_offsets()
+

Retrieve the API detector_timing_offset method for all pairs

+

The detector_timing_offset methods accept a single timestamp as +argument, and return the detector offsets for this timestamp.

+
+ +
+
+determine_time_deltas_for_pair(ref_station, station)
+

Determine the arrival time differences between two stations.

+
+
Parameters:
+

ref_station,station – station numbers.

+
+
Returns:
+

extended timestamp of the first event and time difference, +t - t_ref. Not corrected for altitude differences.

+
+
+
+ +
+
+store_time_deltas(ext_timestamps, time_deltas, pair)
+

Store determined dt values

+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/api.html b/api.html new file mode 100644 index 00000000..0c41e679 --- /dev/null +++ b/api.html @@ -0,0 +1,877 @@ + + + + + + + + HiSPARC API — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

HiSPARC API

+

Access the HiSPARC public database API.

+

This provides easy classes and functions to access the HiSPARC +publicdb API. This takes care of the url retrieval and conversion +from JSON to Python dictionaries.

+

Example usage:

+
>>> from sapphire import Station
+>>> stations = [5, 3102, 504, 7101, 8008, 13005]
+>>> clusters = [Station(station).cluster for station in stations]
+>>> for station, cluster in zip(stations, clusters):
+...     print('Station %d is in cluster %s.' % (station, cluster))
+Station 5 is in cluster Amsterdam.
+Station 3102 is in cluster Leiden.
+Station 504 is in cluster Amsterdam.
+Station 7101 is in cluster Enschede.
+Station 8008 is in cluster Eindhoven.
+Station 13005 is in cluster Bristol.
+
+
+
+
+sapphire.api.get_api_base()
+
+ +
+
+sapphire.api.get_src_base()
+
+ +
+
+class sapphire.api.API(force_fresh=False, force_stale=False)
+

Base API class

+

This provided the methods to retrieve data from the API. The results +are converted from JSON data to Python objects (dict/list/etc). +Support is also provided for the retrieval of Source TSV data, which +is returned as NumPy arrays.

+

Initialize API class

+
+
Parameters:
+

force_fresh,force_stale – if either of these is set to True the +data must either loaded from server or from local data. Be default +fresh data is preferred, but falls back to local data.

+
+
+
+
+urls = {'clusters': 'clusters/', 'clusters_in_country': 'countries/{country_number}/', 'configuration': 'station/{station_number}/config/{year}/{month}/{day}/', 'countries': 'countries/', 'event_trace': 'station/{station_number}/trace/{ext_timestamp}/', 'has_data': 'station/{station_number}/data/{year}/{month}/{day}/', 'has_weather': 'station/{station_number}/weather/{year}/{month}/{day}/', 'number_of_events': 'station/{station_number}/num_events/{year}/{month}/{day}/{hour}/', 'station_info': 'station/{station_number}/', 'stations': 'stations/', 'stations_in_subcluster': 'subclusters/{subcluster_number}/', 'stations_with_data': 'stations/data/{year}/{month}/{day}/', 'stations_with_weather': 'stations/weather/{year}/{month}/{day}/', 'subclusters': 'subclusters/', 'subclusters_in_cluster': 'clusters/{cluster_number}/'}
+
+ +
+
+src_urls = {'azimuth': 'azimuth/{station_number}/{year}/{month}/{day}/', 'barometer': 'barometer/{station_number}/{year}/{month}/{day}/', 'coincidencenumber': 'coincidencenumber/{year}/{month}/{day}/', 'coincidencetime': 'coincidencetime/{year}/{month}/{day}/', 'current': 'current/{station_number}/', 'detector_timing_offsets': 'detector_timing_offsets/{station_number}/', 'electronics': 'electronics/{station_number}/', 'eventtime': 'eventtime/{station_number}/{year}/{month}/{day}/', 'gps': 'gps/{station_number}/', 'integral': 'pulseintegral/{station_number}/{year}/{month}/{day}/', 'layout': 'layout/{station_number}/', 'pulseheight': 'pulseheight/{station_number}/{year}/{month}/{day}/', 'station_timing_offsets': 'station_timing_offsets/{station_1}/{station_2}/', 'temperature': 'temperature/{station_number}/{year}/{month}/{day}/', 'trigger': 'trigger/{station_number}/', 'voltage': 'voltage/{station_number}/', 'zenith': 'zenith/{station_number}/{year}/{month}/{day}/'}
+
+ +
+
+static check_connection()
+

Open the API man page URL to test the connection

+
+
Returns:
+

boolean indicating the internet status

+
+
+
+ +
+
+static validate_partial_date(year='', month='', day='', hour='')
+
+ +
+ +
+
+class sapphire.api.Network(force_fresh=False, force_stale=False)
+

Get info about the network (countries/clusters/subclusters/stations)

+

Initialize API class

+
+
Parameters:
+

force_fresh,force_stale – if either of these is set to True the +data must either loaded from server or from local data. Be default +fresh data is preferred, but falls back to local data.

+
+
+
+
+countries()
+

Get a list of countries

+
+
Returns:
+

all countries in the region

+
+
+
+ +
+
+country_numbers()
+

Same as countries but only returns a list of country numbers

+
+ +
+
+clusters(country=None)
+

Get a list of clusters

+
+
Parameters:
+

country – the number of the country for which to get all +clusters.

+
+
Returns:
+

all clusters in the region

+
+
+
+ +
+
+cluster_numbers(country=None)
+

Same as clusters but only returns a list of cluster numbers

+
+ +
+
+subclusters(country=None, cluster=None)
+

Get a list of subclusters

+
+
Parameters:
+

country,cluster – the number of the region for which to get +the subclusters it contains, only one or none should +be specified.

+
+
Returns:
+

all subclusters in the region

+
+
+
+ +
+
+subcluster_numbers(country=None, cluster=None)
+

Same as subclusters but only returns a list of subcluster numbers

+
+ +
+
+stations(country=None, cluster=None, subcluster=None)
+

Get a list of stations

+
+
Parameters:
+

country,cluster,subcluster – the number of the region +for which to get all stations, only one or none should +be specified.

+
+
Returns:
+

all stations in the region

+
+
+
+ +
+
+station_numbers(country=None, cluster=None, subcluster=None)
+

Same as stations but only returns a list of station numbers

+
+ +
+
+nested_network()
+

Get a nested list of the full network

+
+ +
+
+stations_with_data(year='', month='', day='')
+

Get a list of stations with data on the specified date

+
+
Parameters:
+

year,month,day – the date for which to check. It is +possible to be less specific.

+
+
Returns:
+

all stations with data.

+
+
+
+ +
+
+stations_with_weather(year='', month='', day='')
+

Get a list of stations with weather data on the specified date

+
+
Parameters:
+

year,month,day – the date for which to check. It is +possible to be less specific.

+
+
Returns:
+

all stations with weather data.

+
+
+
+ +
+
+coincidence_time(year, month, day)
+

Get the coincidences per hour histogram

+
+
Parameters:
+

year,month,day – the date for which to get the histogram.

+
+
Returns:
+

array of bins and counts.

+
+
+
+ +
+
+coincidence_number(year, month, day)
+

Get the number of stations in coincidence histogram

+
+
Parameters:
+

year,month,day – the date for which to get the histogram.

+
+
Returns:
+

array of bins and counts.

+
+
+
+ +
+
+static validate_numbers(country=None, cluster=None, subcluster=None)
+
+ +
+
+uptime(stations, start=None, end=None)
+

Get number of hours for which the given stations have been simultaneously active

+

Using hourly eventrate data the number of hours in which the given +stations all had data is determined. Only hours in which each station +had a reasonable eventrate are counted, to exclude likely bad data.

+
+
Parameters:
+
    +
  • stations – station number or a list of station numbers.

  • +
  • start,end – start, end timestamp.

  • +
+
+
Returns:
+

number of hours with simultaneous data.

+
+
+
+ +
+ +
+
+class sapphire.api.Station(station, force_fresh=False, force_stale=False)
+

Access data about a single station

+

Initialize station

+
+
Parameters:
+
    +
  • station – station number.

  • +
  • force_fresh – set to True to require data to be fresh from the server.

  • +
  • force_stale – set to True to require data to be taken from local +data, not valid for all methods.

  • +
+
+
+
+
+property info
+

Get general station info

+
+ +
+
+country()
+
+ +
+
+cluster()
+
+ +
+
+subcluster()
+
+ +
+
+n_detectors()
+

Get the number of detectors in this station

+
+ +
+
+config(date=None)
+

Get station config

+

Retrieve either the latest, or a config for a specific date.

+
+
Parameters:
+

date – date object for which to get the config

+
+
Returns:
+

the full config for the station

+
+
+
+ +
+
+n_events(year='', month='', day='', hour='')
+

Get number of events

+

Note that it is possible to give only the year to get the total +number of events in that year. If both year and month are given, +the total events in that month are returned.

+
+
Parameters:
+

year,month,day,hour – the date and time for which to +get the number. It is possible to be less specific.

+
+
Returns:
+

the number of events recorded by the station on date.

+
+
+
+ +
+
+has_data(year='', month='', day='')
+

Check for HiSPARC data

+
+
Parameters:
+

year,month,day – the date for which to check. It is +possible to be less specific.

+
+
Returns:
+

boolean, indicating whether the station had air shower +data on the date.

+
+
+
+ +
+
+has_weather(year='', month='', day='')
+

Check for weather data

+
+
Parameters:
+

year,month,day – the date for which to check. It is +possible to be less specific.

+
+
Returns:
+

boolean, indicating whether the station had weather data +on the date.

+
+
+
+ +
+
+event_trace(timestamp, nanoseconds, raw=False)
+

Get the traces for a specific event

+

The exact timestamp and nanoseconds for the event have to be +given.

+
+
Parameters:
+
    +
  • timestamp,nanoseconds – the extended timestamp for which +to get the traces.

  • +
  • raw – get the raw trace, without the subtracted baselines.

  • +
+
+
Returns:
+

an array with the traces for each detector in ADCcounts

+
+
+
+ +
+
+event_time(year='', month='', day='')
+

Get the number of events per hour histogram

+

If no date is given the full event time histogram for this station +will be returned. That means for the entire time this station has +collected data.

+

This data (the full histogram) can made available locally using +the extend_local_data command.

+
+
Parameters:
+

year,month,day – the date for which to get the histogram.

+
+
Returns:
+

array of bins and counts.

+
+
+
+ +
+
+pulse_height(year, month, day)
+

Get the pulseheight histogram

+
+
Parameters:
+

year,month,day – the date for which to get the histogram.

+
+
Returns:
+

array of bins and counts.

+
+
+
+ +
+
+pulse_integral(year, month, day)
+

Get the pulseintegral histogram

+
+
Parameters:
+

year,month,day – the date for which to get the histogram.

+
+
Returns:
+

array of bins and counts.

+
+
+
+ +
+
+azimuth(year, month, day)
+

Get the azimuth histogram

+
+
Parameters:
+

year,month,day – the date for which to get the histogram.

+
+
Returns:
+

array of bins and counts.

+
+
+
+ +
+
+zenith(year, month, day)
+

Get the zenith histogram

+
+
Parameters:
+

year,month,day – the date for which to get the histogram.

+
+
Returns:
+

array of bins and counts.

+
+
+
+ +
+
+barometer(year, month, day)
+

Get the barometer dataset

+
+
Parameters:
+

year,month,day – the date for which to get the dataset.

+
+
Returns:
+

array of timestamps and values.

+
+
+
+ +
+
+temperature(year, month, day)
+

Get the temperature dataset

+
+
Parameters:
+

year,month,day – the date for which to get the dataset.

+
+
Returns:
+

array of timestamps and values.

+
+
+
+ +
+
+property electronics
+

Get the electronics version data

+
+
Returns:
+

array of timestamps and values.

+
+
+
+ +
+
+electronic(timestamp=None)
+

Get electronics version data for specific timestamp

+
+
Parameters:
+

timestamp – timestamp for which the values are valid.

+
+
Returns:
+

list of values for given timestamp.

+
+
+
+ +
+
+property voltages
+

Get the PMT voltage data

+
+
Returns:
+

array of timestamps and values.

+
+
+
+ +
+
+voltage(timestamp=None)
+

Get PMT voltage data for specific timestamp

+
+
Parameters:
+

timestamp – timestamp for which the values are valid.

+
+
Returns:
+

list of values for given timestamp.

+
+
+
+ +
+
+property currents
+

Get the PMT current data

+
+
Returns:
+

array of timestamps and values.

+
+
+
+ +
+
+current(timestamp=None)
+

Get PMT current data for specific timestamp

+
+
Parameters:
+

timestamp – timestamp for which the values are valid.

+
+
Returns:
+

list of values for given timestamp.

+
+
+
+ +
+
+property gps_locations
+

Get the GPS location data

+
+
Returns:
+

array of timestamps and values.

+
+
+
+ +
+
+gps_location(timestamp=None)
+

Get GPS location for specific timestamp

+
+
Parameters:
+

timestamp – optional timestamp or datetime object for which +the values are valid.

+
+
Returns:
+

dictionary with the values for given timestamp.

+
+
+
+ +
+
+property triggers
+

Get the trigger config data

+
+
Returns:
+

array of timestamps and values.

+
+
+
+ +
+
+trigger(timestamp=None)
+

Get trigger config for specific timestamp

+
+
Parameters:
+

timestamp – timestamp for which the values are valid.

+
+
Returns:
+

thresholds and trigger values for given timestamp.

+
+
+
+ +
+
+property station_layouts
+

Get the station layout data

+
+
Returns:
+

array of timestamps and values.

+
+
+
+ +
+
+station_layout(timestamp=None)
+

Get station layout data for specific timestamp

+
+
Parameters:
+

timestamp – timestamp for which the values are valid.

+
+
Returns:
+

list of coordinates for given timestamp.

+
+
+
+ +
+
+property detector_timing_offsets
+

Get the detector timing offsets data

+
+
Returns:
+

array of timestamps and values.

+
+
+
+ +
+
+detector_timing_offset(timestamp=None)
+

Get detector timing offset data for specific timestamp

+
+
Parameters:
+

timestamp – timestamp for which the values are valid.

+
+
Returns:
+

list of values for given timestamp.

+
+
+
+ +
+
+station_timing_offsets(reference_station)
+

Get the station timing offset relative to reference_station

+
+
Parameters:
+

reference_station – reference station

+
+
Returns:
+

array of timestamps and values.

+
+
+
+ +
+
+station_timing_offset(reference_station, timestamp=None)
+

Get station timing offset data for specific timestamp

+
+
Parameters:
+
    +
  • reference_station – reference station

  • +
  • timestamp – timestamp for which the value is valid.

  • +
+
+
Returns:
+

the offset and error for given timestamp.

+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/clusters.html b/clusters.html new file mode 100644 index 00000000..d634e47f --- /dev/null +++ b/clusters.html @@ -0,0 +1,785 @@ + + + + + + + + HiSPARC clusters — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

HiSPARC clusters

+

Define HiSPARC detectors, stations and clusters.

+

The BaseCluster defines a HiSPARC cluster consisting of one or +more stations. The Station defines a HiSPARC station, +consisting of one or more Detector objects.

+

To easily create a cluster object for a specific set of real HiSPARC +stations the HiSPARCStations can be used, for example:

+
>>> from sapphire import HiSPARCStations
+>>> cluster = HiSPARCStations([102, 104, 105], force_stale=True)
+
+
+

The use of force_stale forces the use of local data, which +is much faster to load than data from the server.

+

These cluster objects are mainly used by simulations and reconstructions.

+
+
+class sapphire.clusters.Detector(station, position, orientation='UD', detector_timestamps=None)
+

A HiSPARC detector

+

Initialize detector

+
+
Parameters:
+
    +
  • station – station instance this detector is part of.

  • +
  • position – x,y,z position of the center of the detectors +relative to the station center. z is optional. Multiple positions +can be provided by giving lists for each axis.

  • +
  • orientation – orientation of the long side of the detector. +Either the angle in radians, or ‘UD’ or ‘LR’ meaning an +up-down or left-right orientation of the long side of the +detector respectively.

  • +
  • detector_timestamps – list of timestamps, the timestamp at +which each of the layouts became active.

  • +
+
+
+
+
+property detector_size
+
+ +
+
+get_area()
+
+ +
+
+get_xy_coordinates()
+
+ +
+
+get_coordinates()
+
+ +
+
+get_polar_coordinates()
+
+ +
+
+get_cylindrical_coordinates()
+
+ +
+
+get_lla_coordinates()
+

Get detector LLA coordinates (latitude, longitude, altitude)

+

get detector WGS84 coordinates +LLA: Latitude, Longitude, Altitude

+
+
Returns:
+

tuple (latitude, longitude, altitude). +Latitude, longitude in degrees. Altitude in meters.

+
+
+
+ +
+
+get_corners()
+

Get the x, y coordinates of the detector corners

+

The z-coordinate is not returned because all detectors are +assumed to be laying flat.

+
+
Returns:
+

coordinates of detector corners, list of (x, y) tuples.

+
+
+
+ +
+ +
+
+class sapphire.clusters.Station(cluster, station_id, position, angle=None, detectors=None, station_timestamps=None, detector_timestamps=None, number=None)
+

A HiSPARC station

+

Initialize station

+
+
Parameters:
+
    +
  • cluster – cluster this station is a part of

  • +
  • station_id – int (unique identifier)

  • +
  • position – x,y,z position of the station center relative +to the cluster center, z is optional.

  • +
  • angle – angle of rotation of the station in radians

  • +
  • detectors – list of tuples. Each tuple consists of (dx, dy, +orientation) where dx and dy are x and y positions of the +center of the detectors relative to the station center. +Orientation is either ‘UD’ or ‘LR’ meaning an up-down or +left-right orientation of the long side of the detector +respectively.

  • +
  • station_timestamps – list of timestamps, the timestamp at +which each of the positions became active.

  • +
  • detector_timestamps – list of timestamps, the timestamp at +which each of the layouts became active.

  • +
  • number – optional unique identifier for a station this can +be used by the cluster to find a specific station and makes +it easier to link to a real station. If not given it will be +equal to the station_id.

  • +
+
+
+
+
+property detectors
+
+ +
+
+get_area(detector_ids=None)
+

Get the total area covered by the detectors

+
+
Parameters:
+

detector_ids – list of detectors for which to get the total area.

+
+
Returns:
+

total area of the detectors in m^2.

+
+
+
+ +
+
+get_xy_coordinates()
+

Same as get_coordinates but without the z and alpha

+
+ +
+
+get_xyalpha_coordinates()
+

Same as get_coordinates but without the z

+
+ +
+
+get_coordinates()
+

Calculate coordinates of a station

+
+
Returns:
+

x, y, z, alpha; coordinates and rotation of station +relative to absolute coordinate system

+
+
+
+ +
+
+get_polar_alpha_coordinates()
+
+ +
+
+get_cylindrical_alpha_coordinates()
+
+ +
+
+get_lla_coordinates()
+

Get station LLA coordinates (latitude, longitude, altitude)

+

LLA: Latitude, Longitude, Altitude

+
+
Returns:
+

tuple (latitude, longitude, altitude). +Latitude, longitude in degrees. Altitude in meters.

+
+
+
+ +
+
+calc_r_and_phi_for_detectors(d0, d1)
+
+ +
+
+calc_rphiz_for_detectors(d0, d1)
+

Calculate angle and distance between detectors

+
+
Parameters:
+

d0,d1 – detector ids to find the vector between.

+
+
Returns:
+

r,phi,z pointing from d0 to d1.

+
+
+
+ +
+
+calc_xy_center_of_mass_coordinates()
+
+ +
+
+calc_center_of_mass_coordinates()
+

Calculate center of mass coordinates of detectors in station

+
+
Returns:
+

x, y, z; coordinates of station center relative to +absolute coordinate system

+
+
+
+ +
+ +
+
+class sapphire.clusters.BaseCluster(position=(0, 0, 0), angle=0, lla=(52.35592417, 4.95114402, 56.10234594))
+

Base class for HiSPARC clusters

+

Override this function to build your cluster

+
+
Parameters:
+
    +
  • position – x,y,z position for the center of the cluster.

  • +
  • angle – rotation of the cluster in the x,y-plane.

  • +
  • lla – Reference WGS84 location of the cluster origin. +Defaults to (old) GPS location of station 501 (Nikhef).

  • +
+
+
+
+
+set_timestamp(timestamp)
+

Set the timestamp to set the active station and detector locations

+
+
Parameters:
+

timestamp – timestamp in seconds.

+
+
+
+ +
+
+set_center_off_mass_at_origin()
+

Set the cluster center of mass to (0, 0, 0)

+
+ +
+
+property stations
+
+ +
+
+get_station(number)
+

Get a station by its number

+
+ +
+
+get_xy_coordinates()
+

Same as get_coordinates but without the z and alpha

+
+ +
+
+get_xyalpha_coordinates()
+

Like get_coordinates, but without z

+
+ +
+
+get_coordinates()
+

Get cluster coordinates (x, y, z, alpha).

+

The coordinates should be interpreted as follows: first, the +cluster is rotated over angle alpha, around its original center. +Then, the cluster is translated to (x, y, z).

+
+ +
+
+get_polar_alpha_coordinates()
+

Like get_cylindrical_coordinates but without z.

+
+ +
+
+get_cylindrical_alpha_coordinates()
+

Get cluster coordinates (r, phi, z, alpha).

+

The coordinates should be interpreted as follows: first, the +cluster is rotated over angle alpha, around its original center. +Then, the cluster is translated to (r, phi, z).

+
+ +
+
+get_lla_coordinates()
+

Get cluster LLA coordinates (latitude, longitude, altitude)

+

get cluster WGS84 coordinates +LLA: Latitude, Longitude, Altitude

+
+
Returns:
+

tuple (latitude, longitude, altitude). +Latitude, longitude in degrees. Altitude in meters.

+
+
+
+ +
+
+set_coordinates(x, y, z, alpha)
+

Set cluster coordinates (x, y, z, alpha).

+

The coordinates should be interpreted as follows: first, the +cluster is rotated over angle alpha, around its original center. +Then, the cluster is translated to (x, y, z).

+
+ +
+
+set_cylindrical_coordinates(r, phi, z, alpha)
+

Set cluster coordinates (r, phi, z, alpha).

+

The coordinates should be interpreted as follows: first, the +cluster is rotated over angle alpha, around its original center. +Than, the cluster is translated to (r, phi).

+
+ +
+
+calc_rphiz_for_stations(s0, s1)
+

Calculate distance between and direction of two stations

+

The calculated result is between the center of mass coordinates +of the two stations.

+
+
Parameters:
+

s0,s1 – The station ids for the two stations.

+
+
Returns:
+

r, phi, z; the distance between and direction of the two +given stations.

+
+
+
+ +
+
+calc_xy_center_of_mass_coordinates()
+

Like calc_center_of_mass_coordinates, but without z

+
+ +
+
+calc_center_of_mass_coordinates()
+

Calculate center of mass coordinates of all detectors in cluster

+
+
Returns:
+

x, y, z; coordinates of cluster center relative to +absolute coordinate system

+
+
+
+ +
+
+calc_distance_between_stations(s1, s2)
+

Calculate distance between two stations

+
+
Parameters:
+

s1,s2 – station numbers.

+
+
Returns:
+

distance between stations.

+
+
+
+ +
+
+calc_horizontal_distance_between_stations(s1, s2)
+

Calculate 2D distance between two HiSPARC stations. Ignores altitude

+

The 2D plane is the East-North plane defined by the ENU axes at the +reference location for this cluster.

+
+
Parameters:
+

s1,s2 – station numbers.

+
+
Returns:
+

distance between stations.

+
+
+
+ +
+ +
+
+class sapphire.clusters.CompassStations(position=(0, 0, 0), angle=0, lla=(52.35592417, 4.95114402, 56.10234594))
+

Add detectors to stations using compass coordinates

+

Compass coordinates consist of r, alpha, z, beta. These define +the location and orientation of detectors. For more information +see Coordinate systems and units in HiSPARC.

+

This is meant for data from the Publicdb Database API, which +uses that coordinate system.

+

Override this function to build your cluster

+
+
Parameters:
+
    +
  • position – x,y,z position for the center of the cluster.

  • +
  • angle – rotation of the cluster in the x,y-plane.

  • +
  • lla – Reference WGS84 location of the cluster origin. +Defaults to (old) GPS location of station 501 (Nikhef).

  • +
+
+
+
+ +
+
+class sapphire.clusters.SimpleCluster(size=250)
+

Define a simple cluster containing four stations

+
+
Parameters:
+

size – This value is the distance between the three outer stations.

+
+
+

Override this function to build your cluster

+
+
Parameters:
+
    +
  • position – x,y,z position for the center of the cluster.

  • +
  • angle – rotation of the cluster in the x,y-plane.

  • +
  • lla – Reference WGS84 location of the cluster origin. +Defaults to (old) GPS location of station 501 (Nikhef).

  • +
+
+
+
+ +
+
+class sapphire.clusters.SingleStation
+

Define a cluster containing a single station

+

Override this function to build your cluster

+
+
Parameters:
+
    +
  • position – x,y,z position for the center of the cluster.

  • +
  • angle – rotation of the cluster in the x,y-plane.

  • +
  • lla – Reference WGS84 location of the cluster origin. +Defaults to (old) GPS location of station 501 (Nikhef).

  • +
+
+
+
+ +
+
+class sapphire.clusters.SingleDetectorStation
+

Define a cluster containing a single 1-detector station

+

Override this function to build your cluster

+
+
Parameters:
+
    +
  • position – x,y,z position for the center of the cluster.

  • +
  • angle – rotation of the cluster in the x,y-plane.

  • +
  • lla – Reference WGS84 location of the cluster origin. +Defaults to (old) GPS location of station 501 (Nikhef).

  • +
+
+
+
+ +
+
+class sapphire.clusters.SingleTwoDetectorStation
+

Define a cluster containing a single 2 detector station

+

Override this function to build your cluster

+
+
Parameters:
+
    +
  • position – x,y,z position for the center of the cluster.

  • +
  • angle – rotation of the cluster in the x,y-plane.

  • +
  • lla – Reference WGS84 location of the cluster origin. +Defaults to (old) GPS location of station 501 (Nikhef).

  • +
+
+
+
+ +
+
+class sapphire.clusters.SingleDiamondStation
+

Define a cluster containing a single diamond shaped station

+

Detectors 1, 3 and 4 are in the usual position for a 4 detector +layout, detector 2 is moved out of the center and positioned to +create a second equilateral triangle with detectors 1, 2 and 4.

+

Override this function to build your cluster

+
+
Parameters:
+
    +
  • position – x,y,z position for the center of the cluster.

  • +
  • angle – rotation of the cluster in the x,y-plane.

  • +
  • lla – Reference WGS84 location of the cluster origin. +Defaults to (old) GPS location of station 501 (Nikhef).

  • +
+
+
+
+ +
+
+class sapphire.clusters.HiSPARCStations(stations, skip_missing=False, force_fresh=False, force_stale=False)
+

A cluster containing any real station from the HiSPARC network

+

The gps position and number of detectors are taken from the API. +The detector positions are retrieved if available, otherwise +default values are used!

+
+
Parameters:
+
    +
  • stations – A list of station numbers to include. The +coordinates are retrieved from the Public Database API. +The first station is placed at the origin of the cluster.

  • +
  • skip_missing – Set to True to skip stations which have missing +location data, otherwise an exception will be raised. Stations +with missing location data will be excluded. Does not apply +to missing detector positions.

  • +
+
+
+

Example:

+
>>> cluster = HiSPARCStations([7001, 7002, 7003])
+
+
+

Override this function to build your cluster

+
+
Parameters:
+
    +
  • position – x,y,z position for the center of the cluster.

  • +
  • angle – rotation of the cluster in the x,y-plane.

  • +
  • lla – Reference WGS84 location of the cluster origin. +Defaults to (old) GPS location of station 501 (Nikhef).

  • +
+
+
+
+ +
+
+class sapphire.clusters.ScienceParkCluster(stations=None, skip_missing=False, force_fresh=False, force_stale=False)
+

A cluster containing stations from the Science Park subcluster

+
+
Parameters:
+

stations – A list of station numbers to include. Only stations +from the Science Park subcluster (5xx) are supported. By default 507 +is excluded.

+
+
+

Override this function to build your cluster

+
+
Parameters:
+
    +
  • position – x,y,z position for the center of the cluster.

  • +
  • angle – rotation of the cluster in the x,y-plane.

  • +
  • lla – Reference WGS84 location of the cluster origin. +Defaults to (old) GPS location of station 501 (Nikhef).

  • +
+
+
+
+ +
+
+class sapphire.clusters.HiSPARCNetwork(force_fresh=False, force_stale=False)
+

A cluster containing all station from the HiSPARC network

+

Override this function to build your cluster

+
+
Parameters:
+
    +
  • position – x,y,z position for the center of the cluster.

  • +
  • angle – rotation of the cluster in the x,y-plane.

  • +
  • lla – Reference WGS84 location of the cluster origin. +Defaults to (old) GPS location of station 501 (Nikhef).

  • +
+
+
+
+ +
+
+sapphire.clusters.flatten_cluster(cluster)
+

Set the altitudes for all detectors in a cluster object to z=0

+

Modify the given cluster by setting the z coordinates of the stations +and detectors to 0.

+
+
Parameters:
+

clusterBaseCluster object.

+
+
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/configuration.html b/configuration.html new file mode 100644 index 00000000..211bec0a --- /dev/null +++ b/configuration.html @@ -0,0 +1,123 @@ + + + + + + + + Configuration — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Configuration

+

Various modules (sapphire.api, sapphire.esd, and sapphire.publicdb) +connect to the HiSPARC Public Database to download data, metadata, configurations, etc. +Normally you will want to use the official HiSPARC Public Database, which is hosted +at https://data.hisparc.nl. However, during development, tests or other occasions you +may want to use a different server, for example when running a local version of the +publicdb. In that case you can overwrite the base url used. This overwrite is done +using an environment variable: PUBLICDB_BASE. This can be easily set when starting +your Python environment, for example:

+
$ PUBLICDB_BASE=http://localhost:8000 python
+
+
+

Or while already running Python:

+
from os import environ
+environ['PUBLICDB_BASE'] = 'http://localhost:8000'
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/corsika.html b/corsika.html new file mode 100644 index 00000000..2ff21551 --- /dev/null +++ b/corsika.html @@ -0,0 +1,160 @@ + + + + + + + + CORSIKA simulations — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

CORSIKA simulations

+

CORSIKA is an Air Shower +Simulation Program. To be used for detailed simulation of +extensive air showers initiated by high-energy cosmic-ray particles.

+

This module makes it easy to work with CORSIKA output, it was +original written by Javier Gonzalez and adapted for HiSPARC by Arne de Laat.

+

This documentation sometimes refers to the CORSIKA users manual, this +users manual can be found here CORSIKA User’s Guide

+

In addition to reading CORSIKA output, functionally is provided to +easily submit many CORSIKA jobs to the Nikhef batch facility +(Stoomboot).

+
+

CORSIKA Module

+

Process CORSIKA simulation data.

+

This package contains modules for working with CORSIKA simulations:

+
+
blocks

classes for the block and subblocks in CORSIKA data

+
+
corsika_queries

select CORSIKA showers from a corsika overview

+
+
generate_corsika_overview

generate an overview table of available CORSIKA simulations

+
+
particles

convert CORSIKA particle codes to common names

+
+
qsub_corsika

submit CORSIKA simulations to the Nikhef Stoomboot facility

+
+
qsub_store_corsika_data

submit store CORSIKA jobs to the Nikhef Stoomboot facility

+
+
reader

read CORSIKA data files into Python

+
+
store_corsika_data

convert CORSIKA data files to HDF5 files

+
+
units

convert values in units used by CORSIKA to HiSPARC units

+
+
+
+
+

Contents

+
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/corsika/blocks.html b/corsika/blocks.html new file mode 100644 index 00000000..30d13a24 --- /dev/null +++ b/corsika/blocks.html @@ -0,0 +1,330 @@ + + + + + + + + CORSIKA Blocks — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

CORSIKA Blocks

+

Classes corresponding to CORSIKA blocks and sub-blocks

+

The classes in this module correspond one-to-one with the sub-blocks +(and blocks) as specified in the CORSIKA users manual.

+

Author: Javier Gonzalez

+
+
+sapphire.corsika.blocks.jit(func)
+
+ +
+
+class sapphire.corsika.blocks.Format
+

The binary format information of the file.

+

As specified in the CORSIKA user manual, Section 10.2.1.

+
+ +
+
+class sapphire.corsika.blocks.RunHeader(subblock)
+

The run header sub-block

+

As specified in the CORSIKA user manual, Table 7.

+
+
+thickness_to_height(thickness)
+

“Calculate height (m) for given thickness (gramms/cm**2)

+

As specified in the CORSIKA user manual, Appendix D.

+
+ +
+
+height_to_thickness(height)
+

Thickness (gramms/cm**2) of atmosphere given a height (m)

+

As specified in the CORSIKA user manual, Appendix D.

+
+ +
+ +
+
+class sapphire.corsika.blocks.EventHeader(subblock)
+

The event header sub-block

+

As specified in the CORSIKA user manual, Table 8.

+
+
+property hadron_model_low
+
+ +
+
+property hadron_model_high
+
+ +
+
+property computer
+
+ +
+ +
+
+class sapphire.corsika.blocks.RunEnd(subblock)
+

The run end sub-block

+

As specified in the CORSIKA user manual, Table 14.

+
+ +
+
+class sapphire.corsika.blocks.EventEnd(subblock)
+

The event end sub-block

+

As specified in the CORSIKA user manual, Table 13.

+
+ +
+
+sapphire.corsika.blocks.particle_data(subblock)
+

Get particle data.

+

As specified in the CORSIKA user manual, Table 10. High-performing +version of the ParticleData class, but without all the easy-to-use +attribute access.

+

Transformations are needed for the x, y and p_z values from CORSIKA. +CORSIKA coordinate conventions are mentioned in Figure 1 and Table 10.

+
+
Returns:
+

tuple with p_x, p_y, p_z, x, y, t, id, r, hadron_generation, +observation_level, phi data.

+
+
+
+ +
+
+sapphire.corsika.blocks.particle_data_thin(subblock)
+

Get thinned particle data.

+

Similar to particle_data(), but includes particle weight.

+
+
Returns:
+

tuple with p_x, p_y, p_z, x, y, t, id, r, hadron_generation, +observation_level, phi, weight data.

+
+
+
+ +
+
+class sapphire.corsika.blocks.ParticleData(subblock)
+

The particle data sub-block

+

As specified in the CORSIKA user manual, Table 10.

+
+
+property is_detectable
+

Get True or False if the particle is detectable

+

Note: gamma particles are currently not included.

+
+ +
+
+property particle
+
+ +
+
+property is_particle
+
+ +
+
+property is_nucleus
+
+ +
+
+property is_cherenkov
+
+ +
+
+property atomic_number
+
+ +
+
+property atom
+
+ +
+ +
+
+class sapphire.corsika.blocks.CherenkovData(subblock)
+

The cherenkov photon sub-block

+

As specified in CORSIKA user manual, Table 11.

+

The number of CherenkovData records in a sub-block depends on +compilation options.

+
+ +
+
+class sapphire.corsika.blocks.FormatThin
+

The format information of the thinned file

+

As specified in CORSIKA user manual, Section 10.2.2.

+
+ +
+
+class sapphire.corsika.blocks.ParticleDataThin(subblock)
+

The thinned particle data sub-block

+

As specified in the CORSIKA user manual, Table 10.

+
+ +
+
+class sapphire.corsika.blocks.CherenkovDataThin(subblock)
+

The thinned cherenkov photon sub-block

+

As specified in CORSIKA user manual, Table 11.

+

The number of CherenkovData records in a sub-block depends on +compilation options.

+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/corsika/corsika_queries.html b/corsika/corsika_queries.html new file mode 100644 index 00000000..4a1219dc --- /dev/null +++ b/corsika/corsika_queries.html @@ -0,0 +1,344 @@ + + + + + + + + Query CORSIKA overview for simulations — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Query CORSIKA overview for simulations

+
+
+class sapphire.corsika.corsika_queries.CorsikaQuery(data, simulations_group='/simulations')
+

Setup variables to point to the tables

+
+
Parameters:
+
    +
  • data – either a PyTables file or path to a HDF5 file

  • +
  • simulations_group – path to the simulations group

  • +
+
+
+
+
+finish()
+

Clean-up after using

+

Do not use if you opened the file yourself and still intent to +use it.

+
+ +
+
+all_simulations(iterator=False)
+

Get all simulations

+
+
Returns:
+

all simulations.

+
+
+
+ +
+
+seeds(simulations, iterator=False)
+

Get combined seeds for set of simulations

+
+
Returns:
+

combined seed1 and seed2.

+
+
+
+ +
+
+get_info(seeds)
+

Get info for a simulation

+
+
Parameters:
+

seeds – combined string with seed1 and seed2.

+
+
Returns:
+

row matching the seeds.

+
+
+
+ +
+
+property all_energies
+

All available energies

+
+
Returns:
+

set of available simulation energies in log10(eV).

+
+
+
+ +
+
+property all_particles
+

All available particles

+
+
Returns:
+

set of available simulation particles.

+
+
+
+ +
+
+property all_azimuths
+

All available azimuths

+
+
Returns:
+

set of available simulation azimuths.

+
+
+
+ +
+
+property all_zeniths
+

All available zeniths

+
+
Returns:
+

set of available simulation zeniths.

+
+
+
+ +
+
+simulations(particle='proton', energy=None, zenith=None, azimuth=None, iterator=False)
+

Set of available energies given the requirements

+
+
Parameters:
+
    +
  • particle – primary particle must be this kind, name of particle. +Defaults to proton.

  • +
  • energy – primary energy must be this value, in log10(eV).

  • +
  • zenith – shower zenith must be this value, in degrees.

  • +
  • azimuth – shower azimuth must be this value, in degrees.

  • +
+
+
Returns:
+

simulations matching the query.

+
+
+
+ +
+
+available_parameters(parameter, *args, **kwargs)
+

Get set of available values of type parameter for a subset

+
+
Parameters:
+

parameter – name of the parameter for which the available +values are returned.

+
+
Param:
+

use the arguments available to simulations() to filter +the simulations.

+
+
Returns:
+

set of available values.

+
+
+
+ +
+
+filter(key, value)
+

Filter to be in a range

+
+
Parameters:
+
    +
  • key – variable to filter.

  • +
  • value – value to match.

  • +
+
+
Returns:
+

query.

+
+
+
+ +
+
+float_filter(key, value)
+

Filter float values

+

Take into account that the values are likely not a perfect match.

+
+
Parameters:
+
    +
  • key – variable to filter.

  • +
  • value – value to match.

  • +
+
+
Returns:
+

query.

+
+
+
+ +
+
+range_filter(key, min_value=None, max_value=None)
+

Filter to be in a range

+
+
Parameters:
+
    +
  • key – variable to filter.

  • +
  • min_value,max_value – limits on the value.

  • +
+
+
Returns:
+

query.

+
+
+
+ +
+
+perform_query(query, iterator=False)
+

Perform a query on the simulations table

+
+
Parameters:
+

query – a valid PyTables query string for the simulations table.

+
+
Returns:
+

simulations matching the query.

+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/corsika/generate_corsika_overview.html b/corsika/generate_corsika_overview.html new file mode 100644 index 00000000..ae7ea0ae --- /dev/null +++ b/corsika/generate_corsika_overview.html @@ -0,0 +1,225 @@ + + + + + + + + Create an overview of CORSIKA simulations — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Create an overview of CORSIKA simulations

+

Generate an overview table of the CORSIKA simulations

+

This script will look for all completed and converted CORSIKA +simulations in the given data path. Information about each +simulation is collected and then summarized in a new h5 file as an +overview.

+

The given source path should contain subdirectories named after the +seeds used for the simulation in the format {seed1}_{seed2}, +e.g. 821280921_182096636. These in turn should contain converted +CORSIKA simulation results called corsika.h5.

+
+
+sapphire.corsika.generate_corsika_overview.write_row(table, seeds, header, end)
+

Write the information of one simulation into a row

+
+
Parameters:
+
    +
  • table – the table where the new data should be appended.

  • +
  • seeds – the unique id consisting of the two seeds.

  • +
  • header,end – the event header and end for the simulation.

  • +
+
+
+
+ +
+
+sapphire.corsika.generate_corsika_overview.read_seeds(simulations_table, source, seeds)
+

Read the header and end of a simulation and write to overview.

+
+
Parameters:
+
    +
  • simulations_table – PyTables table in which the simulation +overview is stored.

  • +
  • source – directory containing the CORSIKA simulations.

  • +
  • seeds – directory name of a simulation, format: ‘{seed1}_{seed2}’.

  • +
+
+
+
+ +
+
+sapphire.corsika.generate_corsika_overview.get_simulations(source, simulations, overview, progress=False)
+

Get the information of the simulations and create a table.

+
+ +
+
+sapphire.corsika.generate_corsika_overview.prepare_output(n)
+

Create a temporary file in which to store the overview

+
+
Parameters:
+

n – the number of simulations, i.e. expected number of rows.

+
+
Returns:
+

path to the temporary file and a PyTables handler for the file.

+
+
+
+ +
+
+sapphire.corsika.generate_corsika_overview.create_tempfile_path()
+
+ +
+
+sapphire.corsika.generate_corsika_overview.move_tempfile_to_destination(tmp_path, destination)
+
+ +
+
+sapphire.corsika.generate_corsika_overview.all_seeds(source)
+

Get set of all seeds in the corsika data directory

+
+ +
+
+sapphire.corsika.generate_corsika_overview.generate_corsika_overview(source, destination, progress=False)
+

Create an overview of CORSIKA simulations for use by CorsikaQuery

+
+
Parameters:
+
    +
  • source – directory containing the CORSIKA simulations.

  • +
  • destination – path of the HDF5 output file.

  • +
  • progress – if True show a progressbar while processing simulations.

  • +
+
+
+
+ +
+
+sapphire.corsika.generate_corsika_overview.main()
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/corsika/particles.html b/corsika/particles.html new file mode 100644 index 00000000..862c127c --- /dev/null +++ b/corsika/particles.html @@ -0,0 +1,171 @@ + + + + + + + + CORSIKA Particles — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

CORSIKA Particles

+

Use this for particle identification for particles in CORSIKA

+

Particle codes as specified in CORSIKA user manual, Table 4.

+

This relates to the Description in Particles as:

+
particle id x 1000 + hadron generation x 10 + no. of observation level
+
+
+

So to find e+/e-:

+
from sapphire.corsika import particles
+
+particle.id = 2
+if particles.name(particle.id) in ['positron', 'electron']:
+    pass
+
+particle.id = 1206
+if particle.id > 200:
+    print('atom: %s' % particles.ATOMIC_NUMBER[particle.id % 100])
+
+
+
+
+sapphire.corsika.particles.name(particle_id)
+

Get the name for a CORSIKA particle code

+
+
Parameters:
+

particle_id – code for the particle

+
+
Returns:
+

name of the particle. In case of atoms the weight is added +to the name.

+
+
+
+ +
+
+sapphire.corsika.particles.particle_id(name)
+

Get the CORSIKA particle code for a particle name

+
+
Parameters:
+

name – name of the particle/atom, for atoms the mass +(neutrons + protons) can be appended to the name.

+
+
Returns:
+

CORSIKA code for the particle. +For atoms the code is: A x 100 + Z

+
+
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/corsika/qsub_corsika.html b/corsika/qsub_corsika.html new file mode 100644 index 00000000..291e05e8 --- /dev/null +++ b/corsika/qsub_corsika.html @@ -0,0 +1,306 @@ + + + + + + + + CORSIKA on Stoomboot — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

CORSIKA on Stoomboot

+

Run CORSIKA simulations on Stoomboot

+

In order to quickly get a good sample of simulated showers we use the +Nikhef computer cluster Stoomboot to run multiple jobs simultaneously. +For this purpose a script has been written that will make this easy. +The qsub_corsika script can submit as many +jobs as you want with the parameters that you desire. It automatically +ensures that a unique combination of seeds for the random number +sequences are used for each simulation.

+

To run this file correctly do it in the correct env:

+
$ source activate corsika
+
+
+

The syntax for calling the script can be seen by calling its help:

+
$ qsub_corsika --help
+
+
+

For example, running 100 showers with proton primaries of 1e16 eV +coming in at 22.5 degrees zenith and 90 degrees azimuth on the +standard Stoomboot queue with the default CORSIKA configuration:

+
$ qsub_corsika 100 16 proton 22.5 -q generic -a 90
+
+
+
+
+class sapphire.corsika.qsub_corsika.CorsikaBatch(energy=16, particle='proton', zenith=22.5, azimuth=180, queue='generic', corsika='corsika74000Linux_QGSII_gheisha')
+

Run many simultaneous CORSIKA simulations using Stoomboot

+

Stoomboot is the Nikhef computer cluster.

+
+
Parameters:
+
    +
  • energy – the energy of the primary particle in log10(E[eV]), +so an energy of 16 (10**16 eV) corresponds to 10**7 GeV, +integer values and values ending in .5 are allowed.

  • +
  • particle – name of primary particle, e.g. proton, gamma or iron

  • +
  • zenith – zenith angle of the primary particle (in degrees), +common choices: 0, 7.5, 15, 22.5, 30, 37.5, 45 and 52.5.

  • +
  • azimuth – azimuth angle of the primary particle (in degrees), +common choices: 0, 45, 90, 135, 180, 225, 270 and 315.

  • +
  • queue – choose a queue to submit the job to: +express - max 10 minutes, max 2 jobs +short - max 4 hours, max 1000 jobs +generic - max 24 hours, max 500 jobs +long - max 96 hours (default 48 hours), max 500 jobs

  • +
  • corsika – name of the compiled CORSIKA executable to use: +corsika74000Linux_EPOS_gheisha +corsika74000Linux_QGSII_gheisha +corsika74000Linux_QGSJET_gheisha +corsika74000Linux_SIBYLL_gheisha

  • +
+
+
+
+
+corsika_energy(energy)
+

Convert energy to format for CORSIKA input

+

Convert from log10(E/eV) to E[GeV] and split value to multiplier +and power.

+
+
Parameters:
+

energy – primary particle energy as log10(E/eV).

+
+
Returns:
+

separate multiplier and power

+
+
+
+ +
+
+run()
+
+ +
+
+prepare_env()
+

Setup CORSIKA environment

+
+ +
+
+submit_job()
+

Submit job to Stoomboot

+
+ +
+
+taken_seeds()
+

Get list of seeds already used

+
+ +
+
+generate_random_seeds(taken)
+

Get unused combination of two seeds for CORSIKA

+
+
Parameters:
+

taken – List of seed combinations already taken +each is formatted like this: ‘seed1_seed2’

+
+
+
+ +
+
+make_rundir()
+

Make the run directory

+
+ +
+
+goto_rundir()
+

Move into the run directory

+
+ +
+
+get_rundir()
+

Get run directory path

+
+ +
+
+create_input()
+

Make CORSIKA steering file

+
+ +
+
+create_script()
+

Make Stoomboot script file

+
+ +
+
+copy_config()
+

Copy the CORSIKA config file to the output directory

+

This way we can always check how CORSIKA was configured for each +run.

+
+ +
+ +
+
+sapphire.corsika.qsub_corsika.multiple_jobs(n, energy, particle, zenith, azimuth, queue, corsika, progress=True)
+

Use this to submit multiple jobs to Stoomboot

+
+
Parameters:
+
    +
  • n – Number of jobs to submit

  • +
  • energy – log10(E[eV]) energy of primary particle

  • +
  • particle – Particle kind (as string, see +particles for possibilities)

  • +
  • zenith – Zenith angle in degrees of the primary particle

  • +
  • azimuth – Azimuth angle in degrees of the primary particle

  • +
  • queue – Stoomboot queue to submit to

  • +
  • corsika – Name of the CORSIKA executable to use

  • +
  • progress – if True print an overview of the chosen parameters and +show a progressbar of the job submission progress.

  • +
+
+
+
+ +
+
+sapphire.corsika.qsub_corsika.main()
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/corsika/qsub_store_corsika_data.html b/corsika/qsub_store_corsika_data.html new file mode 100644 index 00000000..89c4b42f --- /dev/null +++ b/corsika/qsub_store_corsika_data.html @@ -0,0 +1,197 @@ + + + + + + + + Convert CORSIKA simulations on Stoomboot — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Convert CORSIKA simulations on Stoomboot

+

Convert CORSIKA stored showers to HDF5 on Stoomboot

+

Automatically submits Stoomboot jobs to convert corsika data. The +script store_corsika_data can be used to convert a DAT000000 +CORSIKA file to a HDF5 file. This script checks our data folder for +new or unconverted simulations and creates Stoomboot jobs to perform +the conversion.

+

This job is run as a cron job to ensure the simulations remain up to +date.

+
+
+sapphire.corsika.qsub_store_corsika_data.all_seeds()
+

Get set of all seeds in the corsika data directory

+
+ +
+
+sapphire.corsika.qsub_store_corsika_data.seeds_processed()
+

Get the seeds of simulations for which the h5 is already created

+
+ +
+
+sapphire.corsika.qsub_store_corsika_data.seeds_in_queue()
+

Get set of seeds already queued to be processed

+
+ +
+
+sapphire.corsika.qsub_store_corsika_data.write_queued_seeds(seeds)
+

Write queued seeds to file

+
+ +
+
+sapphire.corsika.qsub_store_corsika_data.append_queued_seeds(seeds)
+

Add seed to the queued seeds file

+
+ +
+
+sapphire.corsika.qsub_store_corsika_data.get_seeds_todo()
+

Get seeds to be processed

+
+ +
+
+sapphire.corsika.qsub_store_corsika_data.filter_large_seeds(seeds_todo)
+

Exclude seeds for data files that are to large

+
+ +
+
+sapphire.corsika.qsub_store_corsika_data.store_command(seed)
+

Write queued seeds to file

+
+ +
+
+sapphire.corsika.qsub_store_corsika_data.run(queue)
+

Get list of seeds to process, then submit jobs to process them

+
+ +
+
+sapphire.corsika.qsub_store_corsika_data.main()
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/corsika/reader.html b/corsika/reader.html new file mode 100644 index 00000000..317ba2d7 --- /dev/null +++ b/corsika/reader.html @@ -0,0 +1,345 @@ + + + + + + + + CORSIKA Reader — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

CORSIKA Reader

+

Read CORSIKA data files.

+

This provides functionality to read CORSIKA output +files with Python. It provides the following main +classes:

+
    +
  • CorsikaFile: The file class provides a +generator over all events in the file.

  • +
  • CorsikaEvent: The event class that +provides a generator over all particles at ground.

  • +
+

and the following classes that correspond to the sub-blocks defined in +the CORSIKA manual:

+ +

Additionally version for thinned showers are available:

+ +
+

Issues

+

This module does not handle platform dependent issues such as byte +ordering (endianness) and field size. This was the result of an +afternoon hack and has only been tested with files generated using +32 bit CORSIKA files on a linux system compiled with gfortran.

+
    +
  • Field Size: According to the CORSIKA user manual section 10.2 +all quantities are written as single precision real numbers +independently of 32-bit or 64-bit, so each field in the file +should be 4 bytes long.

  • +
  • Endianness: There is no check for byte ordering. It can be added +using Python’s struct module.

  • +
  • Special Particles: This module currently ignores all special +(book-keeping) particles like for muon additional information and +history.

  • +
+
+
+

More Info

+

For short information on fortran unformatted binary files, take a look +at http://paulbourke.net/dataformats/reading/

+

For detailed information on the CORSIKA format, check the ‘Outputs’ +chapter in the CORSIKA user manual. In particular, check the ‘Normal +Particle Output’ section.

+
+
+

Authors

+ +
+
+
+class sapphire.corsika.reader.CorsikaEvent(raw_file, header_index, end_index)
+

CorsikaEvent constructor

+

The user never calls this. The CorsikaFile does.

+
+
Parameters:
+
    +
  • raw_fileCorsikaFile object.

  • +
  • header_index – index where the event header starts.

  • +
  • end_index – index where the event end starts.

  • +
+
+
+
+
+get_header()
+

Get the Event Header

+
+
Returns:
+

an instance of EventHeader

+
+
+
+ +
+
+get_end()
+

Get the Event end sub-block

+
+
Returns:
+

an instance of EventEnd

+
+
+
+ +
+
+get_particles()
+

Generator over particles in the event.

+
+

Note

+

This generator filters out additional muon information and +all particles at observation levels other than 1.

+
+

Use like this:

+
for particle in event.get_particles():
+    pass
+
+
+
+
Yield:
+

each particle in the event

+
+
+
+ +
+ +
+
+class sapphire.corsika.reader.CorsikaFile(filename)
+

CORSIKA output file handler

+

This class will probide an interface for CORSIKA output files. +Allowing you go get at the events and particles in the file. +This class is meant for unthinned simulations.

+

CorsikaFile constructor

+
+
Param:
+

the filemame of the CORSIKA data file

+
+
+
+
+finish()
+

Close the opened CORSIKA data file

+
+ +
+
+check()
+

Check DAT file format

+

Some basic sanity checks.

+

Fortran unformatted files are written in ‘blocks’. Each block +has a header and end. They both contain the same +information: the number of bytes in the block.

+

This function only checks if there is an integer number of +blocks in the file and if the header and end are equal.

+

Here would be the place to dynamically check for endianness and +field size.

+
+ +
+
+get_sub_blocks()
+

Get the sub-blocks in the file.

+

Normally one would not need this function but it is here because +I have used it.

+
+ +
+
+get_header()
+

Get the Run header

+
+
Returns:
+

an instance of RunHeader

+
+
+
+ +
+
+get_end()
+

Get the Run end

+
+
Returns:
+

an instance of RunEnd

+
+
+
+ +
+
+get_events()
+

Generator over the Events in the file

+

This method is a generator over the events in the file. +Use it like this:

+
for event in my_file.get_events():
+    pass
+
+
+
+ +
+ +
+
+class sapphire.corsika.reader.CorsikaFileThin(filename)
+

CORSIKA thinned output file handler

+

Same as the unthinned output handler, but with support for +the different format, particles also have the weight property. +This class is meant for thinned simulations.

+

CorsikaFileThin constructor

+

It takes a filename as argument

+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/corsika/store_corsika_data.html b/corsika/store_corsika_data.html new file mode 100644 index 00000000..1420cd19 --- /dev/null +++ b/corsika/store_corsika_data.html @@ -0,0 +1,201 @@ + + + + + + + + Store CORSIKA data as HDF5 — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Store CORSIKA data as HDF5

+

Store CORSIKA simulation data in HDF5 file

+

This module reads the CORSIKA binary ground particles file and stores +each particle individually in a HDF5 file, using PyTables. This file +can then be used as input for the detector simulation.

+

The syntax and options for calling this script can be seen with:

+
$ store_corsika_data --help
+
+
+

For example to convert a CORSIKA file in the current directory called +DAT000000 to a HDF5 called corsika.h5 with a progress bar run:

+
$ store_corsika_data --progress DAT000000 corsika.h5
+
+
+
+
+sapphire.corsika.store_corsika_data.save_particle(row, particle)
+

Write the information of a particle into a row

+
+ +
+
+sapphire.corsika.store_corsika_data.save_thinned_particle(row, p)
+

Write the information of a thinned particle into a row

+
+ +
+
+sapphire.corsika.store_corsika_data.store_and_sort_corsika_data(source, destination, overwrite=False, progress=False, thin=False)
+

First convert the data to HDF5 and create a sorted version

+
+ +
+
+sapphire.corsika.store_corsika_data.store_corsika_data(source, destination, table_name='groundparticles', progress=False, thin=False)
+

Store particles from a CORSIKA simulation in a HDF5 file

+
+
Parameters:
+
    +
  • source – CorsikaFile instance of the source DAT file.

  • +
  • destination – PyTables file instance of the destination file.

  • +
  • table_name – table name in which particles are stored.

  • +
  • progress – if True show progressbar when saving particles.

  • +
  • thin – if True assume the data contains thinned particles.

  • +
+
+
+
+ +
+
+sapphire.corsika.store_corsika_data.create_index(hdf_data, table_name='groundparticles', progress=False)
+

Create a completely sorted index for the x column

+

This can speed up queries to select data based on the x column.

+
+ +
+
+sapphire.corsika.store_corsika_data.copy_and_sort_node(hdf_temp, hdf_data, table_name='groundparticles', progress=False)
+

Sort the data in the tables by the x column

+

This speeds up queries to select data based on the x column.

+
+ +
+
+sapphire.corsika.store_corsika_data.create_tempfile_path(temp_dir=None)
+

Create a temporary file, close it, and return the path

+
+ +
+
+sapphire.corsika.store_corsika_data.main()
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/corsika/units.html b/corsika/units.html new file mode 100644 index 00000000..b9379c18 --- /dev/null +++ b/corsika/units.html @@ -0,0 +1,154 @@ + + + + + + + + CORSIKA Units — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

CORSIKA Units

+

Defines units in terms of HiSPARC standard units

+

You should use the units defined in this file whenever you +have a dimensional quantity in your code. For example:

+

Do:

+
>>> distance = 1.5 * km
+
+
+

Don’t:

+
>>> distance = 1.5  # don't forget this is in km!
+
+
+

The conversion factors defined in this file convert your data into +HiSPARC base units, so that all dimensional quantities in the code are +in a single system of units! You can also use the conversions defined +here to, for example, display data with the unit of your choice. For +example:

+
>>> print("distance = %f mm" %  distance / mm)
+1500000 mm
+
+
+

The base units are:

+
    +
  • meter (meter)

  • +
  • nanosecond (nanosecond)

  • +
  • electron Volt (eV)

  • +
  • positron charge (eplus)

  • +
  • degree Kelvin (kelvin)

  • +
  • the amount of substance (mole)

  • +
  • luminous intensity (candela)

  • +
  • radian (radian)

  • +
  • steradian (steradian)

  • +
+

The SI numerical value of the positron charge is defined here, +as it is needed for conversion factor: positron charge = eSI (coulomb)

+

This is a slightly modified version of the units definitions +written by the Geant4 collaboration.

+

Authors:

+
    +
  • M Maire

  • +
  • S Giani

  • +
  • T Paul (modifications for Auger)

  • +
  • Arne de Laat <adelaat@nikhef.nl>

  • +
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/data.html b/data.html new file mode 100644 index 00000000..efc6b83f --- /dev/null +++ b/data.html @@ -0,0 +1,119 @@ + + + + + + + + Updating and extending local data — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Updating and extending local data

+

Update or extend local data with latest data from public database

+

This package contains modules for updating local data:

+
+
extend_local_data

add additional data

+
+
update_local_data

bring already included data up to date

+
+
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/data/extend_local_data.html b/data/extend_local_data.html new file mode 100644 index 00000000..bffee1f5 --- /dev/null +++ b/data/extend_local_data.html @@ -0,0 +1,148 @@ + + + + + + + + Download additional local data — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Download additional local data

+

Add more local JSON and TSV data

+

Add additional local data, to be used by api if internet is +unavailable. The use of local data can also be forced to skip calls to the +server or prevented to require fresh data from the server.

+

This data is not included by default because then the SAPPHiRE package would +become to large. By running this script the data is added after installation. +This script downloads approximately 100 MB of data.

+

This can be run by simply running the installed script from the command line:

+
$ extend_local_data
+
+
+

To make the script show information about what it will do add the help flag:

+
$ extend_local_data --help
+
+
+
+
+sapphire.data.extend_local_data.update_additional_local_tsv(progress=True)
+

Get location tsv data for all stations

+
+ +
+
+sapphire.data.extend_local_data.main()
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/data/update_local_data.html b/data/update_local_data.html new file mode 100644 index 00000000..d90389d3 --- /dev/null +++ b/data/update_local_data.html @@ -0,0 +1,191 @@ + + + + + + + + Update default local data with latest data from Publicdb — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Update default local data with latest data from Publicdb

+

Update local JSON and TSV data

+

This script updates the local copies of the JSON and TSV data from the Public +Database API. If internet is unavailable the api uses these +files. The use of local data can also be forced to skip calls to the server or +prevented to require fresh data from the server.

+

Not all available data is included by default because then the SAPPHiRE package +would become to large. It is possible to add those files after installation.

+

This can be run by simply running the installed script from the command line:

+
$ update_local_data
+
+
+

To make the script show information about what it will do add the help flag:

+
$ update_local_data --help
+
+
+
+
+sapphire.data.update_local_data.update_local_json(progress=True)
+

Get cluster organisation and basic station JSON data

+
+ +
+
+sapphire.data.update_local_data.update_local_tsv(progress=True)
+

Get configuration and calibration TSV data for all stations

+
+ +
+
+sapphire.data.update_local_data.update_toplevel_json(data_type)
+
+ +
+
+sapphire.data.update_local_data.update_sublevel_json(arg_type, data_type, progress=True)
+
+ +
+
+sapphire.data.update_local_data.update_sublevel_tsv(data_type, station_numbers, progress=True)
+
+ +
+
+sapphire.data.update_local_data.update_subsublevel_tsv(data_type, station_numbers, network, progress=True)
+
+ +
+
+sapphire.data.update_local_data.get_and_store_json(url)
+
+ +
+
+sapphire.data.update_local_data.get_and_store_tsv(url)
+
+ +
+
+sapphire.data.update_local_data.main()
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/esd.html b/esd.html new file mode 100644 index 00000000..997a8f86 --- /dev/null +++ b/esd.html @@ -0,0 +1,459 @@ + + + + + + + + Event Summary Data — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Event Summary Data

+

Fetch events and other data from the event summary data (ESD).

+

This module enables you to access the event summary data.

+

If you are in a real hurry and know what you’re doing (and took the +time to read this far), you can call the quick_download() +function like this:

+
>>> from sapphire import quick_download
+>>> data = quick_download(501)
+
+
+

For regular use, look up download_data().

+
+
+sapphire.esd.get_base_url()
+
+ +
+
+sapphire.esd.get_events_url()
+
+ +
+
+sapphire.esd.get_weather_url()
+
+ +
+
+sapphire.esd.get_singles_url()
+
+ +
+
+sapphire.esd.get_lightning_url()
+
+ +
+
+sapphire.esd.get_coincidences_url()
+
+ +
+
+sapphire.esd.quick_download(station_number, date=None)
+

Quickly download some data

+
+
Parameters:
+
    +
  • station_number – The HiSPARC station number.

  • +
  • date – the date for which to get data (datetime.datetime +instance), passed unchanged to the download_data() as +:param start:.

  • +
+
+
Returns:
+

handle to an open PyTables file.

+
+
+

Everything is handled by this function, including file creation. +Expect no frills: you just get yesterday’s data.

+

Example usage:

+
>>> import sapphire.esd
+>>> data = sapphire.esd.quick_download(501)
+>>> print(data)
+data1.h5 (File) u''
+Last modif.: 'Mon Jun  9 22:03:50 2014'
+Object Tree:
+/ (RootGroup) u''
+/s501 (Group) u''
+/s501/events (Table(58898,)) ''
+
+
+
+ +
+
+sapphire.esd.load_data(file, group, tsv_file, type='events')
+

Load downloaded event summary data into PyTables file.

+

If you’ve previously downloaded event summary data from the HiSPARC Public +Database in TSV format, you can load them into a PyTables +file using this method. The result is equal to directly downloading data +using download_data().

+
+
Parameters:
+
    +
  • file – the PyTables datafile handler.

  • +
  • group – the PyTables destination group, which need not exist.

  • +
  • tsv_file – path to the tsv file downloaded from the HiSPARC Public Database.

  • +
  • type – the datatype to load, either ‘events’, ‘weather’, ‘singles’, or ‘lightning’.

  • +
+
+
+

Example:

+
>>> import tables
+>>> import sapphire.esd
+>>> data = tables.open_file('data.h5', 'w')
+>>> sapphire.esd.load_data(data, '/s501', 'events-s501-20130910.tsv')
+
+
+
+ +
+
+sapphire.esd.download_data(file, group, station_number, start=None, end=None, type='events', progress=True)
+

Download event summary data

+
+
Parameters:
+
    +
  • file – the PyTables datafile handler.

  • +
  • group – the PyTables destination group, which need not exist.

  • +
  • station_number – The HiSPARC station number for which to get data.

  • +
  • start – a datetime instance defining the start of the search interval.

  • +
  • end – a datetime instance defining the end of the search interval.

  • +
  • type – the datatype to download, either ‘events’, ‘weather’, or ‘singles’.

  • +
  • progress – if True show a progressbar while downloading.

  • +
+
+
+

If group is None, use ‘/s<station_number>’ as a default.

+

The start and stop parameters may both be None. In that case, +yesterday’s data is downloaded. If only end is None, a single day’s +worth of data is downloaded, starting at the datetime specified with +start.

+

Example:

+
>>> import tables
+>>> import datetime
+>>> import sapphire.esd
+>>> data = tables.open_file('data.h5', 'w')
+>>> sapphire.esd.download_data(data, '/s501', 501,
+...     datetime.datetime(2013, 9, 1), datetime.datetime(2013, 9, 2))
+
+
+
+ +
+
+sapphire.esd.download_lightning(file, group, lightning_type=4, start=None, end=None, progress=True)
+

Download KNMI lightning data

+
+
Parameters:
+
    +
  • file – the PyTables datafile handler.

  • +
  • group – the PyTables destination group, which need not exist.

  • +
  • lightning_type – type of lightning, see list below for the possible type codes.

  • +
  • start – a datetime instance defining the start of the search interval.

  • +
  • end – a datetime instance defining the end of the search interval.

  • +
  • progress – if True show a progressbar while downloading.

  • +
+
+
+

Lightning types:

+
+

0 - Single-point +1 - Cloud-cloud +2 - Cloud-cloud mid +3 - Cloud-cloud end +4 - Cloud-ground (default) +5 - Cloud-ground return

+
+
+ +
+
+sapphire.esd.load_coincidences(file, tsv_file, group='')
+

Load downloaded event summary data into PyTables file.

+

If you’ve previously downloaded coincidence data from the HiSPARC Public +Database in TSV format, you can load them into a PyTables +file using this method. The result is equal to directly downloading data +using download_coincidences().

+
+
Parameters:
+
    +
  • file – the PyTables datafile handler.

  • +
  • tsv_file – path to the tsv file downloaded from the HiSPARC +Public Database containing coincidences.

  • +
  • group – the PyTables destination group, which need not exist.

  • +
+
+
+

Example:

+
>>> import tables
+>>> import sapphire.esd
+>>> data = tables.open_file('coincidences.h5', 'w')
+>>> sapphire.esd.load_coincidences(data, 'coincidences-20151130.tsv')
+
+
+
+ +
+
+sapphire.esd.download_coincidences(file, group='', cluster=None, stations=None, start=None, end=None, n=2, progress=True)
+

Download event summary data coincidences

+
+
Parameters:
+
    +
  • file – PyTables datafile handler.

  • +
  • group – path of destination group, which need not exist yet.

  • +
  • cluster – HiSPARC cluster name for which to get data.

  • +
  • stations – a list of HiSPARC station numbers for which to get data.

  • +
  • start – a datetime instance defining the start of the search interval.

  • +
  • end – a datetime instance defining the end of the search interval.

  • +
  • n – the minimum number of events in the coincidence.

  • +
+
+
+

The start and end parameters may both be None. In that case, +yesterday’s data is downloaded. If only end is None, a single day’s +worth of data is downloaded, starting at the datetime specified with +start.

+

Optionally either a cluster or stations can be defined to limit the +results to include only events from those stations.

+

Example:

+
>>> import tables
+>>> import datetime
+>>> import sapphire.esd
+>>> data = tables.open_file('data_coincidences.h5', 'w')
+>>> sapphire.esd.download_coincidences(data, cluster='Aarhus',
+...     start=datetime.datetime(2013, 9, 1),
+...     end=datetime.datetime(2013, 9, 2), n=3)
+
+
+
+ +
+
+class sapphire.esd.ReadLineAndStoreEventClass(table)
+

Store lines of event data from the ESD

+

Use this contextmanager to store events from a TSV file into a PyTables +table.

+
+
Parameters:
+

table – a PyTables Table object in which to store the data.

+
+
+
+
+store_line(line)
+

Store a single line

+
+
Parameters:
+

line – the line to store as a tuple of strings (one element per column).

+
+
Returns:
+

timestamp of the stored event, or 0 if the given line was a +comment line starting with a ‘#’.

+
+
+
+ +
+ +
+
+class sapphire.esd.ReadLineAndStoreWeatherClass(table)
+

Store lines of weather data from the ESD

+
+
+store_line(line)
+

Store a single line

+
+
Parameters:
+

line – the line to store as a tuple of strings (one element per column).

+
+
Returns:
+

timestamp of the stored event, or 0 if the given line was a +comment line starting with a ‘#’.

+
+
+
+ +
+ +
+
+class sapphire.esd.ReadLineAndStoreSinglesClass(table)
+

Store lines of singles data from the ESD

+
+
+store_line(line)
+

Store a single line

+
+
Parameters:
+

line – the line to store as a tuple of strings (one element per column).

+
+
Returns:
+

timestamp of the stored event, or 0 if the given line was a +comment line starting with a ‘#’.

+
+
+
+ +
+ +
+
+class sapphire.esd.ReadLineAndStoreLightningClass(table)
+

Store lines of lightning data from the ESD

+
+
+store_line(line)
+

Store a single line

+
+
Parameters:
+

line – the line to store as a tuple of strings (one element per column).

+
+
Returns:
+

timestamp of the stored event, or 0 if the given line was a +comment line starting with a ‘#’.

+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/examples.html b/examples.html new file mode 100644 index 00000000..9dc0dbfc --- /dev/null +++ b/examples.html @@ -0,0 +1,389 @@ + + + + + + + + Example scripts — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Example scripts

+

In this chapter we’ll discuss some scripts showing common examples of how to download and analyse data. We’ll start with a short discussion of the general layout of such scripts and how to run them interactively. Then, we’ll continue with examples for some common tasks.

+
+

First, some tips and tricks

+
+

The not in globals() trick

+

A simple script downloading data for a single day can look like:

+
+
simple-download.py
+
import datetime
+
+import tables
+
+from sapphire import esd
+
+DATAFILE = 'data.h5'
+START = datetime.datetime(2016, 1, 1)
+END = datetime.datetime(2016, 1, 2)
+
+
+data = tables.open_file(DATAFILE, 'w')
+esd.download_data(data, '/s501', 501, START, END)
+
+
+
+

This script can be run from the command line like this:

+
$ python <name_of_script.py>
+
+
+

Every time you run the script, the old data will be removed and new data will be downloaded. Except that the data is probably unchanged. What a waste of time and bandwidth! If you do not run this from the command line you can run into trouble. For example, the second time you run the script from an IPython console, you can run into an exception:

+
>>> %run simple-download.py
+100%|################################################################|Time: 5.22
+>>> %run simple-download.py
+Traceback (most recent call last):
+  File "/Users/david/work/HiSPARC/software/sapphire/doc/scripts/simple-download.py", line 10, in <module>
+    data = tables.open_file(DATAFILE, 'w')
+  File "/Users/david/anaconda/lib/python2.7/site-packages/tables/file.py", line 315, in open_file
+    "close it before reopening in write mode." % filename)
+ValueError: The file 'data.h5' is already opened.  Please close it before reopening in write mode.
+
+
+

The second time the script is run, the file is already opened. The script, however, does not know that. You can close the file at the end of your script, but then you don’t have access to the file from the interactive console. It is very useful to run the script, keep the file open, and be able to inspect the file and any variables created by the script. The console has access to all variables declared by the script, but by default the script is not allowed to know about any variables defined in the console. In other words, the script cannot know about the opened file. This is fixed by running the script with the -i option:

+
>>> %run -i simple-download.py
+
+
+

The script still does not check for opened files. To do this, one can use the globals() function. This will return a dictionary containing all variables in the global scope. If data is defined, then 'data' will be present in that dictionary. We can check for that:

+
+
simple-download-with-globals.py
+
import datetime
+
+import tables
+
+from sapphire import esd
+
+DATAFILE = 'data.h5'
+START = datetime.datetime(2016, 1, 1)
+END = datetime.datetime(2016, 1, 2)
+
+
+if 'data' not in globals():
+    data = tables.open_file(DATAFILE, 'w')
+    esd.download_data(data, '/s501', 501, START, END)
+
+
+
+

Now, the script can be rerun multiple times:

+
>>> %run -i simple-download-with-globals.py
+100%|################################################################|Time: 5.29
+>>> %run -i simple-download-with-globals.py
+
+
+

The second time the script is run, it does nothing. This is useful, because we can include stuff that needs to be rerun after the if-statement.

+
+
+

The not in data trick

+

Every time we run the previous script from the command-line, or start a new IPython console, the script still overwrites the data file with ‘new’ data. We need something more! In addition to checking if the file is already opened, the script needs to check if the data is already present in the file. If it is, the script should do nothing. It is important to open the file in append mode, not in write mode. If you do the latter, the file is overwritten the moment you open it. The script becomes:

+
+
simple-download-with-checks.py
+
import datetime
+
+import tables
+
+from sapphire import esd
+
+DATAFILE = 'data.h5'
+START = datetime.datetime(2016, 1, 1)
+END = datetime.datetime(2016, 1, 2)
+
+
+if 'data' not in globals():
+    data = tables.open_file(DATAFILE, 'a')
+
+if '/s501' not in data:
+    esd.download_data(data, '/s501', 501, START, END)
+
+
+
+
+
+

The if __name__ == '__main__' trick

+

Finally, most scripts of any decent size include a weird-looking line:

+
if __name__ == '__main__':
+   do_something()
+
+
+

This is very useful, in fact! A small script invariably grows to a larger size. Most probably, you’ll write a few functions that are useful elsewhere. If they are, you can import them from a new script. That, however, causes problems if you did not include the lines above. For example, take this script:

+
+
is_useful.py
+
def square(x):
+    return x**2
+
+
+print(1, 2, 3)
+print(square(1), square(2), square(3))
+
+
+
+

This script defines a function to calculate the squares of numbers. We use it to print the squared of the numbers 1, 2, and 3. Now, we want to print the square of 16:

+
>>> from is_useful import square
+1 2 3
+1 4 9
+>>> print(square(16))
+256
+
+
+

What happened? When we import a module, the code inside that module is run as well. We don’t want that. When we run a script, the special variable __name__ is equal to '__main__'. When we import a script, the variable is equal to the name of the module, and not equal to '__main__'. So, we can check for that:

+
+
is_useful_and_importable.py
+
def square(x):
+    return x**2
+
+
+if __name__ == '__main__':
+    print(1, 2, 3)
+    print(square(1), square(2), square(3))
+
+
+
+

If we run the script stand-alone, we get the expected result:

+
>>> %run is_useful_and_importable.py
+1 2 3
+1 4 9
+
+
+

But we can now also import the script without any unintended side effects:

+
>>> from is_useful_and_importable import square
+>>> print(square(16))
+256
+
+
+

It is good practice to always include the __name__ == '__main__' check.

+
+
+
+

Common tasks

+
+

Download event summary data for a few stations

+
import datetime
+
+import tables
+
+from sapphire import esd
+
+DATAFILE = 'data.h5'
+STATIONS = [501, 503, 506]
+START = datetime.datetime(2016, 1, 1)
+END = datetime.datetime(2016, 1, 2)
+
+
+if __name__ == '__main__':
+    if 'data' not in globals():
+        data = tables.open_file(DATAFILE, 'a')
+
+    for station in STATIONS:
+        group = '/s%d' % station
+        if group not in data:
+            esd.download_data(data, group, station, START, END)
+
+
+
+
+

Download coincidences for a few stations

+
import datetime
+
+import tables
+
+from sapphire import esd
+
+DATAFILE = 'data.h5'
+STATIONS = [501, 503, 506]
+START = datetime.datetime(2016, 1, 1)
+END = datetime.datetime(2016, 1, 2)
+
+
+if __name__ == '__main__':
+    if 'data' not in globals():
+        data = tables.open_file(DATAFILE, 'a')
+
+    if '/coincidences' not in data:
+        esd.download_coincidences(data, stations=STATIONS, start=START, end=END)
+
+
+
+
+

Download and reconstruct directions for coincidences

+
import datetime
+
+import tables
+
+from sapphire import esd
+from sapphire.analysis import reconstructions
+
+DATAFILE = 'data.h5'
+STATIONS = [501, 503, 506]
+START = datetime.datetime(2016, 1, 1)
+END = datetime.datetime(2016, 1, 2)
+
+
+if __name__ == '__main__':
+    if 'data' not in globals():
+        data = tables.open_file(DATAFILE, 'a')
+
+    if '/coincidences' not in data:
+        esd.download_coincidences(data, stations=STATIONS, start=START, end=END)
+
+    if '/reconstructions' not in data:
+        rec = reconstructions.ReconstructESDCoincidences(data)
+        rec.reconstruct_and_store()
+
+
+
+
+

Plot zenith angle distribution

+
import tables
+
+import pylab as plt
+
+
+def plot_zenith_distribution(data):
+    events = data.root.coincidences.reconstructions
+
+    # get all zenith values
+    zenith = events.col('zenith')
+
+    # remove all NaNs.
+    zenith = zenith.compress(-isnan(zenith))
+
+    plt.hist(degrees(zenith), bins=linspace(0, 90, 51), histtype='step')
+    plt.xlabel('zenith [deg]')
+    plt.ylabel('count')
+
+
+if __name__ == '__main__':
+    if 'data' not in globals():
+        data = tables.open_file('data.h5')
+
+    plot_zenith_distribution(data)
+
+
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/genindex.html b/genindex.html new file mode 100644 index 00000000..de2c0500 --- /dev/null +++ b/genindex.html @@ -0,0 +1,2353 @@ + + + + + + + Index — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + +
+
+
+
+ + +

Index

+ +
+ A + | B + | C + | D + | E + | F + | G + | H + | I + | J + | K + | L + | M + | N + | P + | Q + | R + | S + | T + | U + | V + | W + | X + | Y + | Z + +
+

A

+ + + +
+ +

B

+ + + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

H

+ + + +
+ +

I

+ + + +
+ +

J

+ + + +
+ +

K

+ + + +
+ +

L

+ + + +
+ +

M

+ + + +
+ +

N

+ + + +
+ +

P

+ + + +
+ +

Q

+ + +
+ +

R

+ + + +
+ +

S

+ + + +
    +
  • + sapphire + +
  • +
  • + sapphire.analysis + +
  • +
  • + sapphire.analysis.calibration + +
  • +
  • + sapphire.analysis.coincidence_queries + +
  • +
  • + sapphire.analysis.coincidences + +
  • +
  • + sapphire.analysis.core_reconstruction + +
  • +
  • + sapphire.analysis.direction_reconstruction + +
  • +
  • + sapphire.analysis.event_utils + +
  • +
  • + sapphire.analysis.find_mpv + +
  • +
  • + sapphire.analysis.landau + +
  • +
  • + sapphire.analysis.process_events + +
  • +
  • + sapphire.analysis.process_traces + +
  • +
  • + sapphire.analysis.reconstructions + +
  • +
  • + sapphire.analysis.signal_calibration + +
  • +
  • + sapphire.analysis.time_deltas + +
  • +
  • + sapphire.api + +
  • +
  • + sapphire.clusters + +
  • +
  • + sapphire.corsika + +
  • +
  • + sapphire.corsika.blocks + +
  • +
  • + sapphire.corsika.corsika_queries + +
  • +
  • + sapphire.corsika.generate_corsika_overview + +
  • +
  • + sapphire.corsika.particles + +
  • +
  • + sapphire.corsika.qsub_corsika + +
  • +
  • + sapphire.corsika.qsub_store_corsika_data + +
  • +
  • + sapphire.corsika.reader + +
  • +
  • + sapphire.corsika.store_corsika_data + +
  • +
  • + sapphire.corsika.units + +
  • +
  • + sapphire.data + +
  • +
  • + sapphire.data.extend_local_data + +
  • +
  • + sapphire.data.update_local_data + +
  • +
  • + sapphire.esd + +
  • +
  • + sapphire.kascade + +
  • +
  • + sapphire.publicdb + +
  • +
  • + sapphire.qsub + +
  • +
  • + sapphire.simulations + +
  • +
  • + sapphire.simulations.base + +
  • +
  • + sapphire.simulations.detector + +
  • +
  • + sapphire.simulations.gammas + +
  • +
  • + sapphire.simulations.groundparticles + +
  • +
  • + sapphire.simulations.ldf + +
  • +
  • + sapphire.simulations.showerfront + +
  • +
  • + sapphire.storage + +
  • +
  • + sapphire.tests + +
  • +
  • + sapphire.time_util + +
  • +
  • + sapphire.transformations + +
  • +
  • + sapphire.transformations.angles + +
  • +
  • + sapphire.transformations.axes + +
  • +
  • + sapphire.transformations.base + +
  • +
  • + sapphire.transformations.celestial + +
  • +
  • + sapphire.transformations.clock + +
  • +
  • + sapphire.transformations.geographic + +
  • +
+ +

T

+ + + +
+ +

U

+ + + +
+ +

V

+ + + +
+ +

W

+ + + +
+ +

X

+ + + +
+ +

Y

+ + +
+ +

Z

+ + + +
+ + + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..22594de8 --- /dev/null +++ b/index.html @@ -0,0 +1,159 @@ + + + + + + + + Welcome to SAPPHiRE’s documentation! — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + +
+
+
+
+ +
+

Welcome to SAPPHiRE’s documentation!

+

SAPPHiRE is a Simulation and Analysis Program Package for HiSPARC Research +and Education. This is your first stop if you want to download HiSPARC +station data, perform a simulation or start analyzing (simulated) data.

+

While SAPPHiRE currently is very capable, the documentation is still being +heavily developed. Please check the GitHub repository to view the activity log or browse +or download the code.

+

Contents:

+ +
+
+

Indices and tables

+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/installation.html b/installation.html new file mode 100644 index 00000000..ffa008be --- /dev/null +++ b/installation.html @@ -0,0 +1,307 @@ + + + + + + + + Installation — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Installation

+

Python is a very versatile language. As such, it can be either installed with +lots and lots of packages to create an environment for e.g. data analysis or +game development, or it can be installed for a very specific task, taking up +much less space. To install a complete environment without all the hassle, you +can install a Python distribution which includes Python and a long list +of packages. This is the recommended approach, certainly if you’re new to +Python. If you really want, you can install a much smaller set of packages for +which we’ll provide minimal instructions only.

+

Before we’ll go on describing how to install SAPPHiRE itself, we will first +install the prerequisites.

+
+

Installing the prerequisites

+
+

Python distributions

+

SAPPHiRE supports both Python 2.7 and newer versions of Python, e.g. 3.5. +If you don’t mind to install a large package, use a distribution. This mostly +includes everything you’ll ever need. One such distribution is Anaconda. It includes many scientific python +packages, as well as graphical environments for doing your work. Anaconda has +packages available for the three major platforms: Windows, OS X and Linux.

+

Anaconda includes a graphical programming environment (Spyder) which makes it easy to write analysis +scripts while creating plots, testing small snippets of code, or inspecting +your variables.

+
+
+

Minimal installation (miniconda)

+

In theory, installing a Python package should be very easy. To install +SAPPHiRE, the Python package called sapphire would be retrieved from the +internet. It would have its dependencies listed and pip would pull them in +and all should be well. In fact, SAPPHiRE does have its dependencies +listed and Pip will pull them in. It is only then, that things start go +wrong. Whether you’ll experience difficulties depends on the operating system +you’re using and any previously installed software. But don’t worry, we’ve got +you covered.

+

Miniconda is the package manager used by the Anaconda distribution. +Installation instructions can be found at +https://conda.pydata.org/docs/install/quick.html. After installation, install +the following package:

+
$ conda install --channel conda-forge hdf5
+
+
+

After this is should be possible to simply install SAPPHiRE using Pip (see below).

+
+
+

Minimal installation (OS-specific)

+

If you want to use a package manager specifically for your OS, follow the +(minimal) instructions below for your operating system of choice.

+
+

Mac OS X

+

If you’re using Mac OS X, the easiest way to install open source software +(like Python, the program language we’re using) including lots and lots of +great packages, is done using Homebrew. Please follow the installation +instructions (really easy) and when done, type the following into a +terminal:

+
$ brew install python
+
+
+

This will install Python and Pip.

+

As of this writing, several of the dependencies listed by SAPPHiRE do not +have their own dependencies listed in a way that Pip (or other tools, for that +matter) know how to handle. To install matplotlib with its requirements, you +can type:

+
$ brew install homebrew/python/matplotlib
+
+
+

Warning: this will install gcc and start a very long compilation process. Alternatively, with the introduction of wheels in Python, you can simply try to install packages like numpy, scipy and matplotlib using Pip:

+
$ pip install numpy scipy matplotlib
+
+
+

If you’re lucky, using a wheel will not need a compiler. We haven’t tried this +ourselves for quite a while. YMMV.

+
+
+

Debian and derivatives (like Ubuntu)

+

Debian has a first-class package manager which other distributions and +operating systems have a hard time competing with. In my personal opinion, +anyway. Lots of Python packages can be installed using apt-get, but some +of them might be outdated, depending on the age of your distribution. Use +apt-get for Python packages at your own discretion (read: risk). Pip +handles Python packages very well, so you’ll probably need some packages to +install using Pip.

+

As of this writing, several of the dependencies listed by SAPPHiRE do not +have their own dependencies listed in a way that Pip (or other tools, for +that matter) know how to handle. Furthermore, matplotlib needs to be +installed all by itself, and its dependencies must be installed before it.

+

You can try to install packages using apt-get, for example:

+
$ sudo apt-get install python-matplotlib
+
+
+

To figure out what you need, look at the prerequisites for SAPPHiRE, listed +in the setup.py file in the code repository. You can also try to install +SAPPHiRE using pip, and waiting for the installation to fail on some +prerequisites. If you then need development libraries, apt-get can help you +with that:

+
$ sudo apt-get build-dep python-numpy
+
+
+

will install everything you need to build numpy from source.

+
+
+
+
+

Installing SAPPHiRE

+

The SAPPHiRE package has been uploaded to PyPI so that pip knows where to find it.

+

There are now several scenarios for installing SAPPHiRE: let pip +install the release or development version or download the source code +and use setup.py to install it.

+
+

Just let me get to work!

+

These scenarios do not involve fetching the code. They will just +install SAPPHiRE, so that you can get to work. To get the latest +stable release version, simply issue:

+
$ pip install hisparc-sapphire
+
+
+

Done. Now get to work.

+

If you like living on the edge with a possibly broken version of +SAPPHiRE, get the latest development version:

+
$ pip install https://github.com/hisparc/sapphire/zipball/master
+
+
+
+
+

Let me see the code!

+

If you’re interested in the development of SAPPHiRE, you can either go to the +GitHub page or install the version +control system (we use Git) yourself. For that, please +see the GitHub Help pages.

+

To download the code and install SAPPHiRE, first go to +https://github.com/hisparc/sapphire/. Then, click on the Clone in Desktop, +which will prompt you to download the GitHub Desktop app (recommended).

+_images/github-zipball.png +

Open a terminal and navigate to the top-level directory containing the code. +Then issue:

+
$ python setup.py develop
+
+
+

This takes care of installing the missing dependencies and SAPPHiRE itself. +Whenever you update the code using the GitHub Desktop application, the new code +is immediately available.

+
+
+
+

Checking that SAPPHiRE is installed correctly

+

First off, the following is not an exhaustive check. But it will tell you +if SAPPHiRE is, in fact, installed on your system and that Python knows +how to find it.

+
+

Note

+

When you run this check from inside the top-level SAPPHiRE +code directory, it will always return successfully. The reason +for this is that Python also checks the current working +directory for packages. So, run this check from e.g. your home +directory.

+
+

Start a Python session. You can use a launcher of some type (e.g. the one +from Python(x,y)), or open a terminal and type:

+
$ python
+
+
+

Or, if you prefer, IPython:

+
$ ipython
+
+
+

In fact, we recommend using IPython for interactive use. Then, try to import +SAPPHiRE:

+
>>> import sapphire
+
+
+

If this returns without an error message, all is well and SAPPHiRE should be +correctly installed. As an additional assurance the SAPPHiRE code tests can +be executed. To run the tests simply call the function to run the tests:

+
>>> sapphire.run_tests()
+
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/kascade.html b/kascade.html new file mode 100644 index 00000000..047b3bfb --- /dev/null +++ b/kascade.html @@ -0,0 +1,199 @@ + + + + + + + + KASCADE data — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

KASCADE data

+

Read and store KASCADE data.

+

Read data files provided by the KASCADE collaboration and store them +in a format compatible with HiSPARC data.

+

This module contains the following class:

+
+
StoreKascadeData

Read and store KASCADE data files.

+
+
KascadeCoincidences

Find HiSPARC and KASCADE events that belong together.

+
+
+
+
+class sapphire.kascade.StoreKascadeData(data, kascade_filename, kascade_path='/kascade', hisparc_path=None, force=False, progress=True)
+

Initialize the class.

+
+
Parameters:
+
    +
  • data – the PyTables datafile

  • +
  • hisparc_path – path to the group containing HiSPARC station data.

  • +
  • kascade_path – path of group where KASCADE data will be stored.

  • +
  • kascade_filename – filename of the KASCADE data source.

  • +
  • force – overwrite existing KASCADE group if it already exists.

  • +
  • progress – if True progress info will be shown.

  • +
+
+
+
+
+read_and_store_data()
+

Read and store KASCADE data matching HiSPARC data

+

This function looks at the HiSPARC event data in the specified +datafile and then processes and adds KASCADE data surrounding +those events, for later coincidence processing.

+
+ +
+ +
+
+class sapphire.kascade.KascadeCoincidences(data, hisparc_group, kascade_group, overwrite=False, ignore_existing=False)
+
+
+search_coincidences(timeshift=0, dtlimit=None, limit=None)
+

Search for coincidences

+

This function does the actual searching of coincidences. It uses +a timeshift to shift the HiSPARC data (we know that these employ +GPS time, so not taking UTC leap seconds into account). The +shift will also compensate for delays in the experimental setup.

+

The coincidences are stored as an instance variable +(self.coincidences). Final storage can be done by calling +store_coincidences().

+
+
Parameters:
+
    +
  • timeshift – the amount of time the HiSPARC data are shifted (in +seconds). Default: 0.

  • +
  • dtlimit – limit on the time difference between hisparc and +kascade events in seconds. If this limit is exceeded, +coincidences are not stored. Default: None.

  • +
  • limit – limit on the number of KASCADE events investigated.

  • +
+
+
+
+ +
+
+store_coincidences()
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..64cb50c38cf8dd0eb541d00bff02a0f51a2eae49 GIT binary patch literal 7558 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 literal 0 HcmV?d00001 diff --git a/publicdb.html b/publicdb.html new file mode 100644 index 00000000..37656aca --- /dev/null +++ b/publicdb.html @@ -0,0 +1,214 @@ + + + + + + + + Public data access — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Public data access

+

Fetch raw events and other data from the public database

+

This module enables you to access the public database and even the raw +event data. This is intended for specialized use only. For most uses, it is +faster and more convenient to access the event summary data (ESD) using +esd.

+
+
+sapphire.publicdb.get_publicdb_xmlrpc_url()
+
+ +
+
+sapphire.publicdb.download_data(file, group, station_id, start, end, get_blobs=False)
+

Download raw data from the datastore

+

This function downloads data from the datastore, using the XML-RPC API +exposed by the public database.

+
+
Parameters:
+
    +
  • file – The PyTables datafile handler

  • +
  • group – The PyTables destination group, which need not exist

  • +
  • station_id – The HiSPARC station number for which to get events

  • +
  • start – a datetime instance defining the start of the search +interval

  • +
  • end – a datetime instance defining the end of the search +interval

  • +
  • get_blobs – boolean, select whether binary data like traces +should be fetched

  • +
+
+
+

Example:

+
>>> import tables
+>>> import datetime
+>>> import sapphire.publicdb
+>>> data = tables.open_file('data.h5', 'w')
+>>> start = datetime.datetime(2010, 9, 1)
+>>> end = datetime.datetime(2010, 9, 2)
+>>> sapphire.publicdb.download_data(data, '/s501', 501, start, end)
+INFO:sapphire.publicdb:2010-09-01 00:00:00 None
+INFO:sapphire.publicdb:Getting server data URL (2010-09-01 00:00:00)
+INFO:sapphire.publicdb:Downloading data...
+INFO:sapphire.publicdb:Storing data...
+INFO:sapphire.publicdb:Done.
+
+
+
+ +
+
+sapphire.publicdb.datetimerange(start, stop)
+

Generator for datetime ranges

+

This is a very specific generator for datetime ranges. Based on a +start and stop value, it generates one day intervals. On the first +and subsequent full days, it only returns a start value. On the last +day, it returns a start and stop value. See example below.

+
+
Parameters:
+
    +
  • start – a datetime instance

  • +
  • stop – a datetime instance

  • +
+
+
+

Example:

+
>>> for x in datetimerange(datetime.datetime(2010, 1, 1, 11), datetime.datetime(2010, 1, 1, 13)):
+...     x
+...
+(datetime.datetime(2010, 1, 1, 11, 0), datetime.datetime(2010, 1, 1, 13, 0))
+
+>>> for x in datetimerange(datetime.datetime(2010, 1, 1, 11), datetime.datetime(2010, 1, 2)):
+...     x
+...
+(datetime.datetime(2010, 1, 1, 11, 0), None)
+
+>>> for x in datetimerange(datetime.datetime(2010, 1, 1, 11), datetime.datetime(2010, 1, 2, 13)):
+...     x
+...
+(datetime.datetime(2010, 1, 1, 11, 0), None)
+(datetime.datetime(2010, 1, 2, 0, 0), datetime.datetime(2010, 1, 2, 13, 0))
+
+>>> for x in datetimerange(datetime.datetime(2010, 1, 1, 11), datetime.datetime(2010, 1, 5, 13)):
+...     x
+...
+(datetime.datetime(2010, 1, 1, 11, 0), None)
+(datetime.datetime(2010, 1, 2, 0, 0), None)
+(datetime.datetime(2010, 1, 3, 0, 0), None)
+(datetime.datetime(2010, 1, 4, 0, 0), None)
+(datetime.datetime(2010, 1, 5, 0, 0), datetime.datetime(2010, 1, 5, 13, 0))
+
+
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/py-modindex.html b/py-modindex.html new file mode 100644 index 00000000..1c9e1627 --- /dev/null +++ b/py-modindex.html @@ -0,0 +1,355 @@ + + + + + + + Python Module Index — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + + +
+
+
+
+ + +

Python Module Index

+ +
+ s +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ s
+ sapphire +
    + sapphire.analysis +
    + sapphire.analysis.calibration +
    + sapphire.analysis.coincidence_queries +
    + sapphire.analysis.coincidences +
    + sapphire.analysis.core_reconstruction +
    + sapphire.analysis.direction_reconstruction +
    + sapphire.analysis.event_utils +
    + sapphire.analysis.find_mpv +
    + sapphire.analysis.landau +
    + sapphire.analysis.process_events +
    + sapphire.analysis.process_traces +
    + sapphire.analysis.reconstructions +
    + sapphire.analysis.signal_calibration +
    + sapphire.analysis.time_deltas +
    + sapphire.api +
    + sapphire.clusters +
    + sapphire.corsika +
    + sapphire.corsika.blocks +
    + sapphire.corsika.corsika_queries +
    + sapphire.corsika.generate_corsika_overview +
    + sapphire.corsika.particles +
    + sapphire.corsika.qsub_corsika +
    + sapphire.corsika.qsub_store_corsika_data +
    + sapphire.corsika.reader +
    + sapphire.corsika.store_corsika_data +
    + sapphire.corsika.units +
    + sapphire.data +
    + sapphire.data.extend_local_data +
    + sapphire.data.update_local_data +
    + sapphire.esd +
    + sapphire.kascade +
    + sapphire.publicdb +
    + sapphire.qsub +
    + sapphire.simulations +
    + sapphire.simulations.base +
    + sapphire.simulations.detector +
    + sapphire.simulations.gammas +
    + sapphire.simulations.groundparticles +
    + sapphire.simulations.ldf +
    + sapphire.simulations.showerfront +
    + sapphire.storage +
    + sapphire.tests +
    + sapphire.time_util +
    + sapphire.transformations +
    + sapphire.transformations.angles +
    + sapphire.transformations.axes +
    + sapphire.transformations.base +
    + sapphire.transformations.celestial +
    + sapphire.transformations.clock +
    + sapphire.transformations.geographic +
    + sapphire.utils +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/qsub.html b/qsub.html new file mode 100644 index 00000000..f62d5cb2 --- /dev/null +++ b/qsub.html @@ -0,0 +1,189 @@ + + + + + + + + Nikhef Stoomboot facilities — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Nikhef Stoomboot facilities

+

Access the Nikhef Stoomboot cluster.

+
+

Note

+

This module is only for use at Nikhef. The Stoomboot cluster is only +accessible for Nikhef users.

+
+

Easy to use functions to make use of the Nikhef Stoomboot facilities. +This checks the available slots on the requested queue, creates the +scripts to submit, submits the jobs, and cleans up afterwards.

+

Example usage:

+
>>> from sapphire import qsub
+>>> qsub.check_queue('long')
+340
+>>> qsub.submit_job('touch /data/hisparc/test', 'job_1', 'express')
+
+
+
+
+sapphire.qsub.check_queue(queue)
+

Check for available job slots on the selected queue for current user

+

Maximum numbers from: +qstat -Q -f | grep -e Queue: -e max_user_queuable -e max_queuable. +Note that some queues also have global maximum number of jobs.

+
+
Parameters:
+

queue – queue name for which to check current number of job +slots in use.

+
+
Returns:
+

number of available slots.

+
+
+
+ +
+
+sapphire.qsub.submit_job(script, name, queue, extra='')
+

Submit a job to Stoomboot

+
+
Parameters:
+
    +
  • script – contents of the script to run.

  • +
  • name – name for the job.

  • +
  • queue – name of the queue to run the job on.

  • +
  • extra – optional extra arguments for the qsub command.

  • +
+
+
+
+ +
+
+sapphire.qsub.create_script(script, name)
+

Create script as temp file to be run on Stoomboot

+
+ +
+
+sapphire.qsub.delete_script(script_path)
+

Delete script after submitting to Stoomboot

+
+
Parameters:
+

script_path – path to the script to be removed

+
+
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/sapphire.html b/sapphire.html new file mode 100644 index 00000000..3c2b885b --- /dev/null +++ b/sapphire.html @@ -0,0 +1,147 @@ + + + + + + + + SAPPHiRE Reference — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

SAPPHiRE Reference

+

Simulation and Analysis Program Package for HiSPARC Research

+

SAPPHiRE simplifies data access, simulations and analysis for the HiSPARC experiment. It was born out of a combination of the +old framework and the collection of simulation and analysis scripts developed +by David Fokkema for his PhD thesis work. Development is ongoing, while Arne +de Laat is working on his PhD research.

+

The following packages and modules are included:

+
+
analysis

package containing analysis-related modules

+
+
api

publicdb api interface

+
+
clusters

definitions for HiSPARC detectors, stations and clusters

+
+
corsika

package containing CORSIKA simulation related modules

+
+
data

scripts for updating local data

+
+
esd

event summary data access

+
+
kascade

work on KASCADE data

+
+
publicdb

public data access

+
+
qsub

submit jobs to Stoomboot

+
+
simulations

package containing simulation-related modules

+
+
storage

storage-related definitions

+
+
tests

code tests

+
+
time_util

GPS date/time utility functions

+
+
transformations

transformations between different systems

+
+
utils

commonly used functions such as a progressbar

+
+
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/search.html b/search.html new file mode 100644 index 00000000..d3789e58 --- /dev/null +++ b/search.html @@ -0,0 +1,102 @@ + + + + + + + Search — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +

Search

+ + + + +

+ Searching for multiple words only shows matches that contain + all words. +

+ + +
+ + + +
+ + +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 00000000..483b14f4 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"Accessing the data": [[55, "accessing-the-data"]], "Authors": [[24, "authors"]], "CORSIKA Blocks": [[18, null]], "CORSIKA Module": [[17, "module-sapphire.corsika"]], "CORSIKA Particles": [[21, null]], "CORSIKA Reader": [[24, null]], "CORSIKA Units": [[26, null]], "CORSIKA on Stoomboot": [[22, null]], "CORSIKA simulations": [[17, null]], "Checking that SAPPHiRE is installed correctly": [[33, "checking-that-sapphire-is-installed-correctly"]], "Common tasks": [[31, "common-tasks"]], "Common utility functions": [[56, null]], "Configuration": [[16, null]], "Contents": [[17, "contents"]], "Conversion between axes coordinate systems": [[50, null]], "Conversion between different angle notations": [[49, null]], "Conversion between different bases": [[51, null]], "Convert CORSIKA simulations on Stoomboot": [[23, null]], "Coordinate and time transformations": [[48, null]], "Create an overview of CORSIKA simulations": [[20, null]], "Data analysis": [[0, null]], "Data timing and signal calibration": [[1, null]], "Debian and derivatives (like Ubuntu)": [[33, "debian-and-derivatives-like-ubuntu"]], "Detector signal calibration": [[12, null]], "Detector simulations": [[40, null]], "Download additional local data": [[28, null]], "Download and reconstruct directions for coincidences": [[31, "download-and-reconstruct-directions-for-coincidences"]], "Download coincidences for a few stations": [[31, "download-coincidences-for-a-few-stations"]], "Download event summary data for a few stations": [[31, "download-event-summary-data-for-a-few-stations"]], "Downloading and accessing HiSPARC data": [[55, "downloading-and-accessing-hisparc-data"]], "Downloading coincidences": [[55, "downloading-coincidences"]], "Downloading data": [[55, "downloading-data"]], "Event Summary Data": [[30, null]], "Example scripts": [[31, null]], "First steps": [[55, "first-steps"]], "First, some tips and tricks": [[31, "first-some-tips-and-tricks"]], "GPS date/time utility functions": [[47, null]], "Get signal and timing values from events": [[6, null]], "HiSPARC API": [[14, null]], "HiSPARC clusters": [[15, null]], "Indices and tables": [[32, "indices-and-tables"]], "Installation": [[33, null]], "Installing SAPPHiRE": [[33, "installing-sapphire"]], "Installing the prerequisites": [[33, "installing-the-prerequisites"]], "Issues": [[24, "issues"]], "Just let me get to work!": [[33, "just-let-me-get-to-work"]], "KASCADE data": [[34, null]], "Landau distribution": [[8, null]], "Let me see the code!": [[33, "let-me-see-the-code"]], "Looking around": [[55, "looking-around"]], "Low-level storage constructs": [[45, null]], "MPV fit": [[7, null]], "Mac OS X": [[33, "mac-os-x"]], "Minimal installation (OS-specific)": [[33, "minimal-installation-os-specific"]], "Minimal installation (miniconda)": [[33, "minimal-installation-miniconda"]], "Modules in this package:": [[0, "modules-in-this-package"]], "More Info": [[24, "more-info"]], "Nikhef Stoomboot facilities": [[36, null]], "Obtaining coincidences": [[55, "obtaining-coincidences"]], "Performing the search": [[55, "performing-the-search"]], "Plot zenith angle distribution": [[31, "plot-zenith-angle-distribution"]], "Plotting data": [[55, "plotting-data"]], "Processing of HiSPARC events": [[9, null]], "Processing of HiSPARC traces": [[10, null]], "Public data access": [[35, null]], "Python distributions": [[33, "python-distributions"]], "Query CORSIKA overview for simulations": [[19, null]], "Query coincidences from a datafile": [[2, null]], "Reconstructing ESD Events": [[55, "reconstructing-esd-events"]], "Reconstructing ESD coinicdences": [[55, "reconstructing-esd-coinicdences"]], "Reconstructing simulated coincidences": [[55, "reconstructing-simulated-coincidences"]], "Reconstructing simulated events": [[55, "reconstructing-simulated-events"]], "Reconstruction of EAS core and size": [[4, null]], "Reconstruction of EAS direction": [[5, null]], "Reconstructions": [[11, null], [55, "reconstructions"]], "SAPPHiRE Reference": [[37, null]], "Search for coincidences between HiSPARC stations": [[3, null]], "Simulation base classes": [[39, null]], "Simulation of detector response due to gammas": [[41, null]], "Simulation of the detection of EAS events": [[38, null]], "Simulations based on Monte Carlo EAS ground particle data": [[42, null]], "Simulations based on theoretical models of EAS lateral distributions": [[43, null]], "Simulations based on time structure of EAS shower fronts": [[44, null]], "Store CORSIKA data as HDF5": [[25, null]], "Test installation": [[46, null]], "The if __name__ == '__main__' trick": [[31, "the-if-name-main-trick"]], "The not in data trick": [[31, "the-not-in-data-trick"]], "The not in globals() trick": [[31, "the-not-in-globals-trick"]], "The sapphire.time_util module": [[55, "the-sapphire-time-util-module"]], "Time conversion functions": [[53, null]], "Time deltas": [[13, null]], "Transformations between Celestial coordinate systems": [[52, null]], "Transformations between geographic coordinate systems": [[54, null]], "Tutorial": [[55, null]], "Update default local data with latest data from Publicdb": [[29, null]], "Updating and extending local data": [[27, null]], "Welcome to SAPPHiRE\u2019s documentation!": [[32, null]]}, "docnames": ["analysis", "analysis/calibration", "analysis/coincidence_queries", "analysis/coincidences", "analysis/core_reconstruction", "analysis/direction_reconstruction", "analysis/event_utils", "analysis/find_mpv", "analysis/landau", "analysis/process_events", "analysis/process_traces", "analysis/reconstructions", "analysis/signal_calibration", "analysis/time_deltas", "api", "clusters", "configuration", "corsika", "corsika/blocks", "corsika/corsika_queries", "corsika/generate_corsika_overview", "corsika/particles", "corsika/qsub_corsika", "corsika/qsub_store_corsika_data", "corsika/reader", "corsika/store_corsika_data", "corsika/units", "data", "data/extend_local_data", "data/update_local_data", "esd", "examples", "index", "installation", "kascade", "publicdb", "qsub", "sapphire", "simulations", "simulations/base", "simulations/detector", "simulations/gammas", "simulations/groundparticles", "simulations/ldf", "simulations/showerfront", "storage", "tests", "time_util", "transformations", "transformations/angles", "transformations/axes", "transformations/base", "transformations/celestial", "transformations/clock", "transformations/geographic", "tutorial", "utils"], "envversion": {"sphinx": 64, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["analysis.rst", "analysis/calibration.rst", "analysis/coincidence_queries.rst", "analysis/coincidences.rst", "analysis/core_reconstruction.rst", "analysis/direction_reconstruction.rst", "analysis/event_utils.rst", "analysis/find_mpv.rst", "analysis/landau.rst", "analysis/process_events.rst", "analysis/process_traces.rst", "analysis/reconstructions.rst", "analysis/signal_calibration.rst", "analysis/time_deltas.rst", "api.rst", "clusters.rst", "configuration.rst", "corsika.rst", "corsika/blocks.rst", "corsika/corsika_queries.rst", "corsika/generate_corsika_overview.rst", "corsika/particles.rst", "corsika/qsub_corsika.rst", "corsika/qsub_store_corsika_data.rst", "corsika/reader.rst", "corsika/store_corsika_data.rst", "corsika/units.rst", "data.rst", "data/extend_local_data.rst", "data/update_local_data.rst", "esd.rst", "examples.rst", "index.rst", "installation.rst", "kascade.rst", "publicdb.rst", "qsub.rst", "sapphire.rst", "simulations.rst", "simulations/base.rst", "simulations/detector.rst", "simulations/gammas.rst", "simulations/groundparticles.rst", "simulations/ldf.rst", "simulations/showerfront.rst", "storage.rst", "tests.rst", "time_util.rst", "transformations.rst", "transformations/angles.rst", "transformations/axes.rst", "transformations/base.rst", "transformations/celestial.rst", "transformations/clock.rst", "transformations/geographic.rst", "tutorial.rst", "utils.rst"], "indexentries": {"a (sapphire.transformations.geographic.wgs84datum attribute)": [[54, "sapphire.transformations.geographic.WGS84Datum.a", false]], "adc_baseline_threshold (in module sapphire.analysis.process_traces)": [[10, "sapphire.analysis.process_traces.ADC_BASELINE_THRESHOLD", false]], "adc_filter_threshold (in module sapphire.analysis.process_traces)": [[10, "sapphire.analysis.process_traces.ADC_FILTER_THRESHOLD", false]], "adc_high_threshold (in module sapphire.analysis.process_traces)": [[10, "sapphire.analysis.process_traces.ADC_HIGH_THRESHOLD", false]], "adc_high_threshold_iii (in module sapphire.analysis.process_traces)": [[10, "sapphire.analysis.process_traces.ADC_HIGH_THRESHOLD_III", false]], "adc_low_threshold (in module sapphire.analysis.process_traces)": [[10, "sapphire.analysis.process_traces.ADC_LOW_THRESHOLD", false]], "adc_low_threshold_iii (in module sapphire.analysis.process_traces)": [[10, "sapphire.analysis.process_traces.ADC_LOW_THRESHOLD_III", false]], "adc_threshold (in module sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.ADC_THRESHOLD", false]], "add_padding() (sapphire.analysis.process_traces.datareduction method)": [[10, "sapphire.analysis.process_traces.DataReduction.add_padding", false]], "all() (sapphire.analysis.coincidence_queries.coincidencequery method)": [[2, "sapphire.analysis.coincidence_queries.CoincidenceQuery.all", false]], "all_azimuths (sapphire.corsika.corsika_queries.corsikaquery property)": [[19, "sapphire.corsika.corsika_queries.CorsikaQuery.all_azimuths", false]], "all_coincidences() (sapphire.analysis.coincidence_queries.coincidencequery method)": [[2, "sapphire.analysis.coincidence_queries.CoincidenceQuery.all_coincidences", false]], "all_energies (sapphire.corsika.corsika_queries.corsikaquery property)": [[19, "sapphire.corsika.corsika_queries.CorsikaQuery.all_energies", false]], "all_events() (sapphire.analysis.coincidence_queries.coincidencequery method)": [[2, "sapphire.analysis.coincidence_queries.CoincidenceQuery.all_events", false]], "all_particles (sapphire.corsika.corsika_queries.corsikaquery property)": [[19, "sapphire.corsika.corsika_queries.CorsikaQuery.all_particles", false]], "all_reconstructions() (sapphire.analysis.coincidence_queries.coincidencequery method)": [[2, "sapphire.analysis.coincidence_queries.CoincidenceQuery.all_reconstructions", false]], "all_seeds() (in module sapphire.corsika.generate_corsika_overview)": [[20, "sapphire.corsika.generate_corsika_overview.all_seeds", false]], "all_seeds() (in module sapphire.corsika.qsub_store_corsika_data)": [[23, "sapphire.corsika.qsub_store_corsika_data.all_seeds", false]], "all_simulations() (sapphire.corsika.corsika_queries.corsikaquery method)": [[19, "sapphire.corsika.corsika_queries.CorsikaQuery.all_simulations", false]], "all_zeniths (sapphire.corsika.corsika_queries.corsikaquery property)": [[19, "sapphire.corsika.corsika_queries.CorsikaQuery.all_zeniths", false]], "alpha (sapphire.storage.eventobservables attribute)": [[45, "sapphire.storage.EventObservables.alpha", false]], "angle_between() (in module sapphire.utils)": [[56, "sapphire.utils.angle_between", false]], "any() (sapphire.analysis.coincidence_queries.coincidencequery method)": [[2, "sapphire.analysis.coincidence_queries.CoincidenceQuery.any", false]], "api (class in sapphire.api)": [[14, "sapphire.api.API", false]], "append_queued_seeds() (in module sapphire.corsika.qsub_store_corsika_data)": [[23, "sapphire.corsika.qsub_store_corsika_data.append_queued_seeds", false]], "at_least() (sapphire.analysis.coincidence_queries.coincidencequery method)": [[2, "sapphire.analysis.coincidence_queries.CoincidenceQuery.at_least", false]], "atom (sapphire.corsika.blocks.particledata property)": [[18, "sapphire.corsika.blocks.ParticleData.atom", false]], "atomic_number (sapphire.corsika.blocks.particledata property)": [[18, "sapphire.corsika.blocks.ParticleData.atomic_number", false]], "available_parameters() (sapphire.corsika.corsika_queries.corsikaquery method)": [[19, "sapphire.corsika.corsika_queries.CorsikaQuery.available_parameters", false]], "averageintersectionalgorithm (class in sapphire.analysis.core_reconstruction)": [[4, "sapphire.analysis.core_reconstruction.AverageIntersectionAlgorithm", false]], "azimuth (sapphire.storage.coincidence attribute)": [[45, "sapphire.storage.Coincidence.azimuth", false]], "azimuth() (sapphire.api.station method)": [[14, "sapphire.api.Station.azimuth", false]], "b (sapphire.transformations.geographic.wgs84datum attribute)": [[54, "sapphire.transformations.geographic.WGS84Datum.b", false]], "barometer() (sapphire.api.station method)": [[14, "sapphire.api.Station.barometer", false]], "basecluster (class in sapphire.clusters)": [[15, "sapphire.clusters.BaseCluster", false]], "basecorealgorithm (class in sapphire.analysis.core_reconstruction)": [[4, "sapphire.analysis.core_reconstruction.BaseCoreAlgorithm", false]], "basedirectionalgorithm (class in sapphire.analysis.direction_reconstruction)": [[5, "sapphire.analysis.direction_reconstruction.BaseDirectionAlgorithm", false]], "baseldf (class in sapphire.simulations.ldf)": [[43, "sapphire.simulations.ldf.BaseLdf", false]], "baseldfsimulation (class in sapphire.simulations.ldf)": [[43, "sapphire.simulations.ldf.BaseLdfSimulation", false]], "baseldfsimulationwithouterrors (class in sapphire.simulations.ldf)": [[43, "sapphire.simulations.ldf.BaseLdfSimulationWithoutErrors", false]], "baselines (sapphire.analysis.process_traces.traceobservables property)": [[10, "sapphire.analysis.process_traces.TraceObservables.baselines", false]], "basesimulation (class in sapphire.simulations.base)": [[39, "sapphire.simulations.base.BaseSimulation", false]], "best_fit() (sapphire.analysis.direction_reconstruction.fitalgorithm3d static method)": [[5, "sapphire.analysis.direction_reconstruction.FitAlgorithm3D.best_fit", false]], "c (in module sapphire.utils)": [[56, "sapphire.utils.c", false]], "calc_center_of_mass_coordinates() (sapphire.clusters.basecluster method)": [[15, "sapphire.clusters.BaseCluster.calc_center_of_mass_coordinates", false]], "calc_center_of_mass_coordinates() (sapphire.clusters.station method)": [[15, "sapphire.clusters.Station.calc_center_of_mass_coordinates", false]], "calc_distance_between_stations() (sapphire.clusters.basecluster method)": [[15, "sapphire.clusters.BaseCluster.calc_distance_between_stations", false]], "calc_horizontal_distance_between_stations() (sapphire.clusters.basecluster method)": [[15, "sapphire.clusters.BaseCluster.calc_horizontal_distance_between_stations", false]], "calc_r_and_phi_for_detectors() (sapphire.clusters.station method)": [[15, "sapphire.clusters.Station.calc_r_and_phi_for_detectors", false]], "calc_rphiz_for_detectors() (sapphire.clusters.station method)": [[15, "sapphire.clusters.Station.calc_rphiz_for_detectors", false]], "calc_rphiz_for_stations() (sapphire.clusters.basecluster method)": [[15, "sapphire.clusters.BaseCluster.calc_rphiz_for_stations", false]], "calc_xy_center_of_mass_coordinates() (sapphire.clusters.basecluster method)": [[15, "sapphire.clusters.BaseCluster.calc_xy_center_of_mass_coordinates", false]], "calc_xy_center_of_mass_coordinates() (sapphire.clusters.station method)": [[15, "sapphire.clusters.Station.calc_xy_center_of_mass_coordinates", false]], "calculate_core_distance() (sapphire.simulations.ldf.baseldf method)": [[43, "sapphire.simulations.ldf.BaseLdf.calculate_core_distance", false]], "calculate_core_distance_and_angle() (sapphire.simulations.ldf.ellipsldf method)": [[43, "sapphire.simulations.ldf.EllipsLdf.calculate_core_distance_and_angle", false]], "calculate_ldf_value() (sapphire.simulations.ldf.baseldf method)": [[43, "sapphire.simulations.ldf.BaseLdf.calculate_ldf_value", false]], "calculate_ldf_value() (sapphire.simulations.ldf.ellipsldf method)": [[43, "sapphire.simulations.ldf.EllipsLdf.calculate_ldf_value", false]], "calculate_ldf_value() (sapphire.simulations.ldf.nkgldf method)": [[43, "sapphire.simulations.ldf.NkgLdf.calculate_ldf_value", false]], "cartesian_to_compass() (in module sapphire.transformations.axes)": [[50, "sapphire.transformations.axes.cartesian_to_compass", false]], "cartesian_to_cylindrical() (in module sapphire.transformations.axes)": [[50, "sapphire.transformations.axes.cartesian_to_cylindrical", false]], "cartesian_to_polar() (in module sapphire.transformations.axes)": [[50, "sapphire.transformations.axes.cartesian_to_polar", false]], "cartesian_to_spherical() (in module sapphire.transformations.axes)": [[50, "sapphire.transformations.axes.cartesian_to_spherical", false]], "ceil_in_base() (in module sapphire.utils)": [[56, "sapphire.utils.ceil_in_base", false]], "centermassalgorithm (class in sapphire.analysis.core_reconstruction)": [[4, "sapphire.analysis.core_reconstruction.CenterMassAlgorithm", false]], "check() (sapphire.corsika.reader.corsikafile method)": [[24, "sapphire.corsika.reader.CorsikaFile.check", false]], "check_connection() (sapphire.api.api static method)": [[14, "sapphire.api.API.check_connection", false]], "check_queue() (in module sapphire.qsub)": [[36, "sapphire.qsub.check_queue", false]], "cherenkovdata (class in sapphire.corsika.blocks)": [[18, "sapphire.corsika.blocks.CherenkovData", false]], "cherenkovdatathin (class in sapphire.corsika.blocks)": [[18, "sapphire.corsika.blocks.CherenkovDataThin", false]], "closest_in_list() (in module sapphire.utils)": [[56, "sapphire.utils.closest_in_list", false]], "cluster() (sapphire.api.station method)": [[14, "sapphire.api.Station.cluster", false]], "cluster_numbers() (sapphire.api.network method)": [[14, "sapphire.api.Network.cluster_numbers", false]], "clusters() (sapphire.api.network method)": [[14, "sapphire.api.Network.clusters", false]], "coincidence (class in sapphire.storage)": [[45, "sapphire.storage.Coincidence", false]], "coincidence_number() (sapphire.api.network method)": [[14, "sapphire.api.Network.coincidence_number", false]], "coincidence_time() (sapphire.api.network method)": [[14, "sapphire.api.Network.coincidence_time", false]], "coincidencecorereconstruction (class in sapphire.analysis.core_reconstruction)": [[4, "sapphire.analysis.core_reconstruction.CoincidenceCoreReconstruction", false]], "coincidencecorereconstructiondetectors (class in sapphire.analysis.core_reconstruction)": [[4, "sapphire.analysis.core_reconstruction.CoincidenceCoreReconstructionDetectors", false]], "coincidencedirectionreconstruction (class in sapphire.analysis.direction_reconstruction)": [[5, "sapphire.analysis.direction_reconstruction.CoincidenceDirectionReconstruction", false]], "coincidencedirectionreconstructiondetectors (class in sapphire.analysis.direction_reconstruction)": [[5, "sapphire.analysis.direction_reconstruction.CoincidenceDirectionReconstructionDetectors", false]], "coincidencequery (class in sapphire.analysis.coincidence_queries)": [[2, "sapphire.analysis.coincidence_queries.CoincidenceQuery", false]], "coincidences (class in sapphire.analysis.coincidences)": [[3, "sapphire.analysis.coincidences.Coincidences", false]], "coincidencesesd (class in sapphire.analysis.coincidences)": [[3, "sapphire.analysis.coincidences.CoincidencesESD", false]], "columns (sapphire.storage.coincidence attribute)": [[45, "sapphire.storage.Coincidence.columns", false]], "columns (sapphire.storage.eventobservables attribute)": [[45, "sapphire.storage.EventObservables.columns", false]], "columns (sapphire.storage.kascadeevent attribute)": [[45, "sapphire.storage.KascadeEvent.columns", false]], "columns (sapphire.storage.reconstructedcoincidence attribute)": [[45, "sapphire.storage.ReconstructedCoincidence.columns", false]], "columns (sapphire.storage.reconstructedevent attribute)": [[45, "sapphire.storage.ReconstructedEvent.columns", false]], "columns (sapphire.storage.reconstructedkascadeevent attribute)": [[45, "sapphire.storage.ReconstructedKascadeEvent.columns", false]], "columns (sapphire.storage.timedelta attribute)": [[45, "sapphire.storage.TimeDelta.columns", false]], "compass_to_cartesian() (in module sapphire.transformations.axes)": [[50, "sapphire.transformations.axes.compass_to_cartesian", false]], "compassstations (class in sapphire.clusters)": [[15, "sapphire.clusters.CompassStations", false]], "compton_edge() (in module sapphire.simulations.gammas)": [[41, "sapphire.simulations.gammas.compton_edge", false]], "compton_energy_transfer() (in module sapphire.simulations.gammas)": [[41, "sapphire.simulations.gammas.compton_energy_transfer", false]], "compton_mean_free_path() (in module sapphire.simulations.gammas)": [[41, "sapphire.simulations.gammas.compton_mean_free_path", false]], "computer (sapphire.corsika.blocks.eventheader property)": [[18, "sapphire.corsika.blocks.EventHeader.computer", false]], "conefront (class in sapphire.simulations.showerfront)": [[44, "sapphire.simulations.showerfront.ConeFront", false]], "conefrontsimulation (class in sapphire.simulations.showerfront)": [[44, "sapphire.simulations.showerfront.ConeFrontSimulation", false]], "config() (sapphire.api.station method)": [[14, "sapphire.api.Station.config", false]], "constrained_residuals() (sapphire.analysis.landau.scintillator method)": [[8, "sapphire.analysis.landau.Scintillator.constrained_residuals", false]], "constraint_normal_vector() (sapphire.analysis.direction_reconstruction.fitalgorithm3d static method)": [[5, "sapphire.analysis.direction_reconstruction.FitAlgorithm3D.constraint_normal_vector", false]], "conv_landau() (sapphire.analysis.landau.scintillator method)": [[8, "sapphire.analysis.landau.Scintillator.conv_landau", false]], "conv_landau_for_x() (sapphire.analysis.landau.scintillator method)": [[8, "sapphire.analysis.landau.Scintillator.conv_landau_for_x", false]], "copy_and_sort_node() (in module sapphire.corsika.store_corsika_data)": [[25, "sapphire.corsika.store_corsika_data.copy_and_sort_node", false]], "copy_config() (sapphire.corsika.qsub_corsika.corsikabatch method)": [[22, "sapphire.corsika.qsub_corsika.CorsikaBatch.copy_config", false]], "corsika_energy() (sapphire.corsika.qsub_corsika.corsikabatch method)": [[22, "sapphire.corsika.qsub_corsika.CorsikaBatch.corsika_energy", false]], "corsikabatch (class in sapphire.corsika.qsub_corsika)": [[22, "sapphire.corsika.qsub_corsika.CorsikaBatch", false]], "corsikaevent (class in sapphire.corsika.reader)": [[24, "sapphire.corsika.reader.CorsikaEvent", false]], "corsikafile (class in sapphire.corsika.reader)": [[24, "sapphire.corsika.reader.CorsikaFile", false]], "corsikafilethin (class in sapphire.corsika.reader)": [[24, "sapphire.corsika.reader.CorsikaFileThin", false]], "corsikaquery (class in sapphire.corsika.corsika_queries)": [[19, "sapphire.corsika.corsika_queries.CorsikaQuery", false]], "corsikastationfront (class in sapphire.simulations.showerfront)": [[44, "sapphire.simulations.showerfront.CorsikaStationFront", false]], "countries() (sapphire.api.network method)": [[14, "sapphire.api.Network.countries", false]], "country() (sapphire.api.station method)": [[14, "sapphire.api.Station.country", false]], "country_numbers() (sapphire.api.network method)": [[14, "sapphire.api.Network.country_numbers", false]], "create_index() (in module sapphire.corsika.store_corsika_data)": [[25, "sapphire.corsika.store_corsika_data.create_index", false]], "create_input() (sapphire.corsika.qsub_corsika.corsikabatch method)": [[22, "sapphire.corsika.qsub_corsika.CorsikaBatch.create_input", false]], "create_script() (in module sapphire.qsub)": [[36, "sapphire.qsub.create_script", false]], "create_script() (sapphire.corsika.qsub_corsika.corsikabatch method)": [[22, "sapphire.corsika.qsub_corsika.CorsikaBatch.create_script", false]], "create_tempfile_path() (in module sapphire.corsika.generate_corsika_overview)": [[20, "sapphire.corsika.generate_corsika_overview.create_tempfile_path", false]], "create_tempfile_path() (in module sapphire.corsika.store_corsika_data)": [[25, "sapphire.corsika.store_corsika_data.create_tempfile_path", false]], "current() (sapphire.api.station method)": [[14, "sapphire.api.Station.current", false]], "currents (sapphire.api.station property)": [[14, "sapphire.api.Station.currents", false]], "curvedmixin (class in sapphire.analysis.direction_reconstruction)": [[5, "sapphire.analysis.direction_reconstruction.CurvedMixin", false]], "curvedregressionalgorithm (class in sapphire.analysis.direction_reconstruction)": [[5, "sapphire.analysis.direction_reconstruction.CurvedRegressionAlgorithm", false]], "curvedregressionalgorithm3d (class in sapphire.analysis.direction_reconstruction)": [[5, "sapphire.analysis.direction_reconstruction.CurvedRegressionAlgorithm3D", false]], "cylindrical_to_cartesian() (in module sapphire.transformations.axes)": [[50, "sapphire.transformations.axes.cylindrical_to_cartesian", false]], "data (sapphire.simulations.groundparticles.multiplegroundparticlessimulation attribute)": [[42, "sapphire.simulations.groundparticles.MultipleGroundParticlesSimulation.DATA", false]], "data_reduction_padding (in module sapphire.analysis.process_traces)": [[10, "sapphire.analysis.process_traces.DATA_REDUCTION_PADDING", false]], "datareduction (class in sapphire.analysis.process_traces)": [[10, "sapphire.analysis.process_traces.DataReduction", false]], "date_to_juliandate() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.date_to_juliandate", false]], "datetime() (sapphire.time_util.gpstime method)": [[47, "sapphire.time_util.GPSTime.datetime", false]], "datetime_range() (in module sapphire.analysis.calibration)": [[1, "sapphire.analysis.calibration.datetime_range", false]], "datetime_to_gps() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.datetime_to_gps", false]], "datetime_to_juliandate() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.datetime_to_juliandate", false]], "datetime_to_modifiedjd() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.datetime_to_modifiedjd", false]], "datetimerange() (in module sapphire.publicdb)": [[35, "sapphire.publicdb.datetimerange", false]], "decimal_to_sexagesimal() (in module sapphire.transformations.base)": [[51, "sapphire.transformations.base.decimal_to_sexagesimal", false]], "decimal_to_time() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.decimal_to_time", false]], "degrees_to_hours() (in module sapphire.transformations.angles)": [[49, "sapphire.transformations.angles.degrees_to_hours", false]], "delay_at_r() (sapphire.simulations.showerfront.conefront method)": [[44, "sapphire.simulations.showerfront.ConeFront.delay_at_r", false]], "delay_at_r() (sapphire.simulations.showerfront.corsikastationfront method)": [[44, "sapphire.simulations.showerfront.CorsikaStationFront.delay_at_r", false]], "delay_at_r() (sapphire.simulations.showerfront.flatfront method)": [[44, "sapphire.simulations.showerfront.FlatFront.delay_at_r", false]], "delete_script() (in module sapphire.qsub)": [[36, "sapphire.qsub.delete_script", false]], "delta (sapphire.analysis.landau.scintillator attribute)": [[8, "sapphire.analysis.landau.Scintillator.delta", false]], "description() (sapphire.time_util.gpstime method)": [[47, "sapphire.time_util.GPSTime.description", false]], "detector (class in sapphire.clusters)": [[15, "sapphire.clusters.Detector", false]], "detector_arrival_time() (in module sapphire.analysis.event_utils)": [[6, "sapphire.analysis.event_utils.detector_arrival_time", false]], "detector_arrival_times() (in module sapphire.analysis.event_utils)": [[6, "sapphire.analysis.event_utils.detector_arrival_times", false]], "detector_densities() (in module sapphire.analysis.event_utils)": [[6, "sapphire.analysis.event_utils.detector_densities", false]], "detector_density() (in module sapphire.analysis.event_utils)": [[6, "sapphire.analysis.event_utils.detector_density", false]], "detector_size (sapphire.clusters.detector property)": [[15, "sapphire.clusters.Detector.detector_size", false]], "detector_timing_offset() (sapphire.api.station method)": [[14, "sapphire.api.Station.detector_timing_offset", false]], "detector_timing_offsets (sapphire.api.station property)": [[14, "sapphire.api.Station.detector_timing_offsets", false]], "detectorboundarysimulation (class in sapphire.simulations.groundparticles)": [[42, "sapphire.simulations.groundparticles.DetectorBoundarySimulation", false]], "detectors (sapphire.clusters.station property)": [[15, "sapphire.clusters.Station.detectors", false]], "determine_and_store_time_deltas() (sapphire.analysis.time_deltas.processtimedeltas method)": [[13, "sapphire.analysis.time_deltas.ProcessTimeDeltas.determine_and_store_time_deltas", false]], "determine_and_store_time_deltas_for_pairs() (sapphire.analysis.time_deltas.processtimedeltas method)": [[13, "sapphire.analysis.time_deltas.ProcessTimeDeltas.determine_and_store_time_deltas_for_pairs", false]], "determine_best_offsets() (sapphire.analysis.direction_reconstruction.coincidencedirectionreconstruction method)": [[5, "sapphire.analysis.direction_reconstruction.CoincidenceDirectionReconstruction.determine_best_offsets", false]], "determine_best_reference() (in module sapphire.analysis.calibration)": [[1, "sapphire.analysis.calibration.determine_best_reference", false]], "determine_best_reference() (sapphire.analysis.direction_reconstruction.coincidencedirectionreconstruction method)": [[5, "sapphire.analysis.direction_reconstruction.CoincidenceDirectionReconstruction.determine_best_reference", false]], "determine_cuts() (sapphire.analysis.process_traces.datareduction method)": [[10, "sapphire.analysis.process_traces.DataReduction.determine_cuts", false]], "determine_detector_timing_offset() (in module sapphire.analysis.calibration)": [[1, "sapphire.analysis.calibration.determine_detector_timing_offset", false]], "determine_detector_timing_offsets() (in module sapphire.analysis.calibration)": [[1, "sapphire.analysis.calibration.determine_detector_timing_offsets", false]], "determine_first_and_last_date() (sapphire.analysis.calibration.determinestationtimingoffsets method)": [[1, "sapphire.analysis.calibration.DetermineStationTimingOffsets.determine_first_and_last_date", false]], "determine_station_timing_offset() (in module sapphire.analysis.calibration)": [[1, "sapphire.analysis.calibration.determine_station_timing_offset", false]], "determine_station_timing_offset() (sapphire.analysis.calibration.determinestationtimingoffsets method)": [[1, "sapphire.analysis.calibration.DetermineStationTimingOffsets.determine_station_timing_offset", false]], "determine_station_timing_offsets() (sapphire.analysis.calibration.determinestationtimingoffsets method)": [[1, "sapphire.analysis.calibration.DetermineStationTimingOffsets.determine_station_timing_offsets", false]], "determine_station_timing_offsets_for_date() (sapphire.analysis.calibration.determinestationtimingoffsets method)": [[1, "sapphire.analysis.calibration.DetermineStationTimingOffsets.determine_station_timing_offsets_for_date", false]], "determine_time_deltas_for_pair() (sapphire.analysis.time_deltas.processtimedeltas method)": [[13, "sapphire.analysis.time_deltas.ProcessTimeDeltas.determine_time_deltas_for_pair", false]], "determinestationtimingoffsets (class in sapphire.analysis.calibration)": [[1, "sapphire.analysis.calibration.DetermineStationTimingOffsets", false]], "directalgorithm (class in sapphire.analysis.direction_reconstruction)": [[5, "sapphire.analysis.direction_reconstruction.DirectAlgorithm", false]], "directalgorithmcartesian (class in sapphire.analysis.direction_reconstruction)": [[5, "sapphire.analysis.direction_reconstruction.DirectAlgorithmCartesian", false]], "directalgorithmcartesian3d (class in sapphire.analysis.direction_reconstruction)": [[5, "sapphire.analysis.direction_reconstruction.DirectAlgorithmCartesian3D", false]], "discrete_convolution() (in module sapphire.analysis.landau)": [[8, "sapphire.analysis.landau.discrete_convolution", false]], "distance_between() (in module sapphire.utils)": [[56, "sapphire.utils.distance_between", false]], "download_coincidences() (in module sapphire.esd)": [[30, "sapphire.esd.download_coincidences", false]], "download_data() (in module sapphire.esd)": [[30, "sapphire.esd.download_data", false]], "download_data() (in module sapphire.publicdb)": [[35, "sapphire.publicdb.download_data", false]], "download_lightning() (in module sapphire.esd)": [[30, "sapphire.esd.download_lightning", false]], "dphi_dt0() (sapphire.analysis.direction_reconstruction.directalgorithm class method)": [[5, "sapphire.analysis.direction_reconstruction.DirectAlgorithm.dphi_dt0", false]], "dphi_dt1() (sapphire.analysis.direction_reconstruction.directalgorithm static method)": [[5, "sapphire.analysis.direction_reconstruction.DirectAlgorithm.dphi_dt1", false]], "dphi_dt2() (sapphire.analysis.direction_reconstruction.directalgorithm static method)": [[5, "sapphire.analysis.direction_reconstruction.DirectAlgorithm.dphi_dt2", false]], "e (sapphire.transformations.geographic.wgs84datum attribute)": [[54, "sapphire.transformations.geographic.WGS84Datum.e", false]], "ecef_to_enu() (sapphire.transformations.geographic.fromwgs84toenutransformation method)": [[54, "sapphire.transformations.geographic.FromWGS84ToENUTransformation.ecef_to_enu", false]], "ecef_to_lla() (sapphire.transformations.geographic.fromwgs84toenutransformation method)": [[54, "sapphire.transformations.geographic.FromWGS84ToENUTransformation.ecef_to_lla", false]], "electronic() (sapphire.api.station method)": [[14, "sapphire.api.Station.electronic", false]], "electronics (sapphire.api.station property)": [[14, "sapphire.api.Station.electronics", false]], "ellipsldf (class in sapphire.simulations.ldf)": [[43, "sapphire.simulations.ldf.EllipsLdf", false]], "ellipsldfalgorithm (class in sapphire.analysis.core_reconstruction)": [[4, "sapphire.analysis.core_reconstruction.EllipsLdfAlgorithm", false]], "ellipsldfsimulation (class in sapphire.simulations.ldf)": [[43, "sapphire.simulations.ldf.EllipsLdfSimulation", false]], "energy (sapphire.storage.coincidence attribute)": [[45, "sapphire.storage.Coincidence.energy", false]], "energy_transfer_cross_section() (in module sapphire.simulations.gammas)": [[41, "sapphire.simulations.gammas.energy_transfer_cross_section", false]], "enu_to_ecef() (sapphire.transformations.geographic.fromwgs84toenutransformation method)": [[54, "sapphire.transformations.geographic.FromWGS84ToENUTransformation.enu_to_ecef", false]], "enu_to_lla() (sapphire.transformations.geographic.fromwgs84toenutransformation method)": [[54, "sapphire.transformations.geographic.FromWGS84ToENUTransformation.enu_to_lla", false]], "eprime (sapphire.transformations.geographic.wgs84datum attribute)": [[54, "sapphire.transformations.geographic.WGS84Datum.eprime", false]], "epsilon (sapphire.analysis.landau.scintillator attribute)": [[8, "sapphire.analysis.landau.Scintillator.epsilon", false]], "equatorial_to_horizontal_astropy() (in module sapphire.transformations.celestial)": [[52, "sapphire.transformations.celestial.equatorial_to_horizontal_astropy", false]], "equatorial_to_zenithazimuth() (in module sapphire.transformations.celestial)": [[52, "sapphire.transformations.celestial.equatorial_to_zenithazimuth", false]], "equatorial_to_zenithazimuth_astropy() (in module sapphire.transformations.celestial)": [[52, "sapphire.transformations.celestial.equatorial_to_zenithazimuth_astropy", false]], "err (in module sapphire.utils)": [[56, "sapphire.utils.ERR", false]], "errorlesssimulation (class in sapphire.simulations.detector)": [[40, "sapphire.simulations.detector.ErrorlessSimulation", false]], "euler (sapphire.analysis.landau.scintillator attribute)": [[8, "sapphire.analysis.landau.Scintillator.Euler", false]], "event_time() (sapphire.api.station method)": [[14, "sapphire.api.Station.event_time", false]], "event_trace() (sapphire.api.station method)": [[14, "sapphire.api.Station.event_trace", false]], "eventcorereconstruction (class in sapphire.analysis.core_reconstruction)": [[4, "sapphire.analysis.core_reconstruction.EventCoreReconstruction", false]], "eventdirectionreconstruction (class in sapphire.analysis.direction_reconstruction)": [[5, "sapphire.analysis.direction_reconstruction.EventDirectionReconstruction", false]], "eventend (class in sapphire.corsika.blocks)": [[18, "sapphire.corsika.blocks.EventEnd", false]], "eventheader (class in sapphire.corsika.blocks)": [[18, "sapphire.corsika.blocks.EventHeader", false]], "eventobservables (class in sapphire.storage)": [[45, "sapphire.storage.EventObservables", false]], "events_from_stations() (sapphire.analysis.coincidence_queries.coincidencequery method)": [[2, "sapphire.analysis.coincidence_queries.CoincidenceQuery.events_from_stations", false]], "events_in_cluster() (sapphire.analysis.coincidence_queries.coincidencequery method)": [[2, "sapphire.analysis.coincidence_queries.CoincidenceQuery.events_in_cluster", false]], "events_in_subcluster() (sapphire.analysis.coincidence_queries.coincidencequery method)": [[2, "sapphire.analysis.coincidence_queries.CoincidenceQuery.events_in_subcluster", false]], "f (sapphire.transformations.geographic.wgs84datum attribute)": [[54, "sapphire.transformations.geographic.WGS84Datum.f", false]], "filter() (sapphire.corsika.corsika_queries.corsikaquery method)": [[19, "sapphire.corsika.corsika_queries.CorsikaQuery.filter", false]], "filter_large_seeds() (in module sapphire.corsika.qsub_store_corsika_data)": [[23, "sapphire.corsika.qsub_store_corsika_data.filter_large_seeds", false]], "filter_trace() (sapphire.analysis.process_traces.meanfilter method)": [[10, "sapphire.analysis.process_traces.MeanFilter.filter_trace", false]], "filter_traces() (sapphire.analysis.process_traces.meanfilter method)": [[10, "sapphire.analysis.process_traces.MeanFilter.filter_traces", false]], "find_first_guess_mpv() (sapphire.analysis.find_mpv.findmostprobablevalueinspectrum method)": [[7, "sapphire.analysis.find_mpv.FindMostProbableValueInSpectrum.find_first_guess_mpv", false]], "find_mpv() (sapphire.analysis.find_mpv.findmostprobablevalueinspectrum method)": [[7, "sapphire.analysis.find_mpv.FindMostProbableValueInSpectrum.find_mpv", false]], "find_station_pairs() (sapphire.analysis.time_deltas.processtimedeltas method)": [[13, "sapphire.analysis.time_deltas.ProcessTimeDeltas.find_station_pairs", false]], "findmostprobablevalueinspectrum (class in sapphire.analysis.find_mpv)": [[7, "sapphire.analysis.find_mpv.FindMostProbableValueInSpectrum", false]], "finish() (sapphire.analysis.coincidence_queries.coincidencequery method)": [[2, "sapphire.analysis.coincidence_queries.CoincidenceQuery.finish", false]], "finish() (sapphire.corsika.corsika_queries.corsikaquery method)": [[19, "sapphire.corsika.corsika_queries.CorsikaQuery.finish", false]], "finish() (sapphire.corsika.reader.corsikafile method)": [[24, "sapphire.corsika.reader.CorsikaFile.finish", false]], "finish() (sapphire.simulations.groundparticles.groundparticlessimulation method)": [[42, "sapphire.simulations.groundparticles.GroundParticlesSimulation.finish", false]], "finish() (sapphire.simulations.groundparticles.multiplegroundparticlessimulation method)": [[42, "sapphire.simulations.groundparticles.MultipleGroundParticlesSimulation.finish", false]], "first_above_threshold() (sapphire.analysis.process_events.processevents static method)": [[9, "sapphire.analysis.process_events.ProcessEvents.first_above_threshold", false]], "fit_mpv() (sapphire.analysis.find_mpv.findmostprobablevalueinspectrum method)": [[7, "sapphire.analysis.find_mpv.FindMostProbableValueInSpectrum.fit_mpv", false]], "fit_timing_offset() (in module sapphire.analysis.calibration)": [[1, "sapphire.analysis.calibration.fit_timing_offset", false]], "fitalgorithm3d (class in sapphire.analysis.direction_reconstruction)": [[5, "sapphire.analysis.direction_reconstruction.FitAlgorithm3D", false]], "fixedcoredistancesimulation (class in sapphire.simulations.groundparticles)": [[42, "sapphire.simulations.groundparticles.FixedCoreDistanceSimulation", false]], "flatfront (class in sapphire.simulations.showerfront)": [[44, "sapphire.simulations.showerfront.FlatFront", false]], "flatfrontsimulation (class in sapphire.simulations.showerfront)": [[44, "sapphire.simulations.showerfront.FlatFrontSimulation", false]], "flatfrontsimulation2d (class in sapphire.simulations.showerfront)": [[44, "sapphire.simulations.showerfront.FlatFrontSimulation2D", false]], "flatfrontsimulation2dwithouterrors (class in sapphire.simulations.showerfront)": [[44, "sapphire.simulations.showerfront.FlatFrontSimulation2DWithoutErrors", false]], "flatfrontsimulationwithouterrors (class in sapphire.simulations.showerfront)": [[44, "sapphire.simulations.showerfront.FlatFrontSimulationWithoutErrors", false]], "flatten_cluster() (in module sapphire.clusters)": [[15, "sapphire.clusters.flatten_cluster", false]], "float_filter() (sapphire.corsika.corsika_queries.corsikaquery method)": [[19, "sapphire.corsika.corsika_queries.CorsikaQuery.float_filter", false]], "floor_in_base() (in module sapphire.utils)": [[56, "sapphire.utils.floor_in_base", false]], "format (class in sapphire.corsika.blocks)": [[18, "sapphire.corsika.blocks.Format", false]], "formatthin (class in sapphire.corsika.blocks)": [[18, "sapphire.corsika.blocks.FormatThin", false]], "fromwgs84toenutransformation (class in sapphire.transformations.geographic)": [[54, "sapphire.transformations.geographic.FromWGS84ToENUTransformation", false]], "front_shape() (sapphire.simulations.showerfront.conefront method)": [[44, "sapphire.simulations.showerfront.ConeFront.front_shape", false]], "front_shape() (sapphire.simulations.showerfront.corsikastationfront method)": [[44, "sapphire.simulations.showerfront.CorsikaStationFront.front_shape", false]], "front_shape() (sapphire.simulations.showerfront.flatfront method)": [[44, "sapphire.simulations.showerfront.FlatFront.front_shape", false]], "full_domain (sapphire.analysis.landau.scintillator attribute)": [[8, "sapphire.analysis.landau.Scintillator.full_domain", false]], "gauss() (in module sapphire.utils)": [[56, "sapphire.utils.gauss", false]], "gauss_scale (sapphire.analysis.landau.scintillator attribute)": [[8, "sapphire.analysis.landau.Scintillator.gauss_scale", false]], "generate_attenuated_zenith() (sapphire.simulations.detector.hisparcsimulation class method)": [[40, "sapphire.simulations.detector.HiSPARCSimulation.generate_attenuated_zenith", false]], "generate_azimuth() (sapphire.simulations.detector.hisparcsimulation class method)": [[40, "sapphire.simulations.detector.HiSPARCSimulation.generate_azimuth", false]], "generate_core_position() (sapphire.simulations.detector.hisparcsimulation class method)": [[40, "sapphire.simulations.detector.HiSPARCSimulation.generate_core_position", false]], "generate_core_position() (sapphire.simulations.groundparticles.fixedcoredistancesimulation class method)": [[42, "sapphire.simulations.groundparticles.FixedCoreDistanceSimulation.generate_core_position", false]], "generate_corsika_overview() (in module sapphire.corsika.generate_corsika_overview)": [[20, "sapphire.corsika.generate_corsika_overview.generate_corsika_overview", false]], "generate_energy() (sapphire.simulations.detector.hisparcsimulation class method)": [[40, "sapphire.simulations.detector.HiSPARCSimulation.generate_energy", false]], "generate_random_seeds() (sapphire.corsika.qsub_corsika.corsikabatch method)": [[22, "sapphire.corsika.qsub_corsika.CorsikaBatch.generate_random_seeds", false]], "generate_shower_parameters() (sapphire.simulations.base.basesimulation method)": [[39, "sapphire.simulations.base.BaseSimulation.generate_shower_parameters", false]], "generate_shower_parameters() (sapphire.simulations.groundparticles.groundparticlessimulation method)": [[42, "sapphire.simulations.groundparticles.GroundParticlesSimulation.generate_shower_parameters", false]], "generate_shower_parameters() (sapphire.simulations.groundparticles.multiplegroundparticlessimulation method)": [[42, "sapphire.simulations.groundparticles.MultipleGroundParticlesSimulation.generate_shower_parameters", false]], "generate_shower_parameters() (sapphire.simulations.ldf.baseldfsimulation method)": [[43, "sapphire.simulations.ldf.BaseLdfSimulation.generate_shower_parameters", false]], "generate_shower_parameters() (sapphire.simulations.ldf.ellipsldfsimulation method)": [[43, "sapphire.simulations.ldf.EllipsLdfSimulation.generate_shower_parameters", false]], "generate_shower_parameters() (sapphire.simulations.showerfront.conefrontsimulation method)": [[44, "sapphire.simulations.showerfront.ConeFrontSimulation.generate_shower_parameters", false]], "generate_shower_parameters() (sapphire.simulations.showerfront.flatfrontsimulation method)": [[44, "sapphire.simulations.showerfront.FlatFrontSimulation.generate_shower_parameters", false]], "generate_zenith() (sapphire.simulations.detector.hisparcsimulation class method)": [[40, "sapphire.simulations.detector.HiSPARCSimulation.generate_zenith", false]], "geode (sapphire.transformations.geographic.fromwgs84toenutransformation attribute)": [[54, "sapphire.transformations.geographic.FromWGS84ToENUTransformation.geode", false]], "get_active_index() (in module sapphire.utils)": [[56, "sapphire.utils.get_active_index", false]], "get_and_store_json() (in module sapphire.data.update_local_data)": [[29, "sapphire.data.update_local_data.get_and_store_json", false]], "get_and_store_tsv() (in module sapphire.data.update_local_data)": [[29, "sapphire.data.update_local_data.get_and_store_tsv", false]], "get_api_base() (in module sapphire.api)": [[14, "sapphire.api.get_api_base", false]], "get_area() (sapphire.clusters.detector method)": [[15, "sapphire.clusters.Detector.get_area", false]], "get_area() (sapphire.clusters.station method)": [[15, "sapphire.clusters.Station.get_area", false]], "get_arrival_time() (sapphire.simulations.showerfront.conefrontsimulation method)": [[44, "sapphire.simulations.showerfront.ConeFrontSimulation.get_arrival_time", false]], "get_arrival_time() (sapphire.simulations.showerfront.flatfrontsimulation method)": [[44, "sapphire.simulations.showerfront.FlatFrontSimulation.get_arrival_time", false]], "get_arrival_time() (sapphire.simulations.showerfront.flatfrontsimulation2d method)": [[44, "sapphire.simulations.showerfront.FlatFrontSimulation2D.get_arrival_time", false]], "get_base_url() (in module sapphire.esd)": [[30, "sapphire.esd.get_base_url", false]], "get_coincidences_url() (in module sapphire.esd)": [[30, "sapphire.esd.get_coincidences_url", false]], "get_coordinates() (sapphire.clusters.basecluster method)": [[15, "sapphire.clusters.BaseCluster.get_coordinates", false]], "get_coordinates() (sapphire.clusters.detector method)": [[15, "sapphire.clusters.Detector.get_coordinates", false]], "get_coordinates() (sapphire.clusters.station method)": [[15, "sapphire.clusters.Station.get_coordinates", false]], "get_corners() (sapphire.clusters.detector method)": [[15, "sapphire.clusters.Detector.get_corners", false]], "get_cylindrical_alpha_coordinates() (sapphire.clusters.basecluster method)": [[15, "sapphire.clusters.BaseCluster.get_cylindrical_alpha_coordinates", false]], "get_cylindrical_alpha_coordinates() (sapphire.clusters.station method)": [[15, "sapphire.clusters.Station.get_cylindrical_alpha_coordinates", false]], "get_cylindrical_coordinates() (sapphire.clusters.detector method)": [[15, "sapphire.clusters.Detector.get_cylindrical_coordinates", false]], "get_detector_ids() (in module sapphire.analysis.event_utils)": [[6, "sapphire.analysis.event_utils.get_detector_ids", false]], "get_detector_offsets() (sapphire.analysis.reconstructions.reconstructesdevents method)": [[11, "sapphire.analysis.reconstructions.ReconstructESDEvents.get_detector_offsets", false]], "get_detector_offsets() (sapphire.analysis.time_deltas.processtimedeltas method)": [[13, "sapphire.analysis.time_deltas.ProcessTimeDeltas.get_detector_offsets", false]], "get_end() (sapphire.corsika.reader.corsikaevent method)": [[24, "sapphire.corsika.reader.CorsikaEvent.get_end", false]], "get_end() (sapphire.corsika.reader.corsikafile method)": [[24, "sapphire.corsika.reader.CorsikaFile.get_end", false]], "get_events() (in module sapphire.analysis.coincidences)": [[3, "sapphire.analysis.coincidences.get_events", false]], "get_events() (sapphire.corsika.reader.corsikafile method)": [[24, "sapphire.corsika.reader.CorsikaFile.get_events", false]], "get_events_url() (in module sapphire.esd)": [[30, "sapphire.esd.get_events_url", false]], "get_header() (sapphire.corsika.reader.corsikaevent method)": [[24, "sapphire.corsika.reader.CorsikaEvent.get_header", false]], "get_header() (sapphire.corsika.reader.corsikafile method)": [[24, "sapphire.corsika.reader.CorsikaFile.get_header", false]], "get_info() (sapphire.corsika.corsika_queries.corsikaquery method)": [[19, "sapphire.corsika.corsika_queries.CorsikaQuery.get_info", false]], "get_lightning_url() (in module sapphire.esd)": [[30, "sapphire.esd.get_lightning_url", false]], "get_line_boundary_eqs() (sapphire.simulations.groundparticles.detectorboundarysimulation method)": [[42, "sapphire.simulations.groundparticles.DetectorBoundarySimulation.get_line_boundary_eqs", false]], "get_lla_coordinates() (sapphire.clusters.basecluster method)": [[15, "sapphire.clusters.BaseCluster.get_lla_coordinates", false]], "get_lla_coordinates() (sapphire.clusters.detector method)": [[15, "sapphire.clusters.Detector.get_lla_coordinates", false]], "get_lla_coordinates() (sapphire.clusters.station method)": [[15, "sapphire.clusters.Station.get_lla_coordinates", false]], "get_num_particles_in_detector() (sapphire.simulations.ldf.baseldfsimulation method)": [[43, "sapphire.simulations.ldf.BaseLdfSimulation.get_num_particles_in_detector", false]], "get_num_particles_in_detector() (sapphire.simulations.ldf.ellipsldfsimulation method)": [[43, "sapphire.simulations.ldf.EllipsLdfSimulation.get_num_particles_in_detector", false]], "get_particles() (sapphire.corsika.reader.corsikaevent method)": [[24, "sapphire.corsika.reader.CorsikaEvent.get_particles", false]], "get_particles_in_detector() (sapphire.simulations.groundparticles.detectorboundarysimulation method)": [[42, "sapphire.simulations.groundparticles.DetectorBoundarySimulation.get_particles_in_detector", false]], "get_particles_in_detector() (sapphire.simulations.groundparticles.groundparticlesgammasimulation method)": [[42, "sapphire.simulations.groundparticles.GroundParticlesGammaSimulation.get_particles_in_detector", false]], "get_particles_in_detector() (sapphire.simulations.groundparticles.groundparticlessimulation method)": [[42, "sapphire.simulations.groundparticles.GroundParticlesSimulation.get_particles_in_detector", false]], "get_polar_alpha_coordinates() (sapphire.clusters.basecluster method)": [[15, "sapphire.clusters.BaseCluster.get_polar_alpha_coordinates", false]], "get_polar_alpha_coordinates() (sapphire.clusters.station method)": [[15, "sapphire.clusters.Station.get_polar_alpha_coordinates", false]], "get_polar_coordinates() (sapphire.clusters.detector method)": [[15, "sapphire.clusters.Detector.get_polar_coordinates", false]], "get_publicdb_base() (in module sapphire.utils)": [[56, "sapphire.utils.get_publicdb_base", false]], "get_publicdb_xmlrpc_url() (in module sapphire.publicdb)": [[35, "sapphire.publicdb.get_publicdb_xmlrpc_url", false]], "get_rundir() (sapphire.corsika.qsub_corsika.corsikabatch method)": [[22, "sapphire.corsika.qsub_corsika.CorsikaBatch.get_rundir", false]], "get_seeds_todo() (in module sapphire.corsika.qsub_store_corsika_data)": [[23, "sapphire.corsika.qsub_store_corsika_data.get_seeds_todo", false]], "get_simulations() (in module sapphire.corsika.generate_corsika_overview)": [[20, "sapphire.corsika.generate_corsika_overview.get_simulations", false]], "get_singles_url() (in module sapphire.esd)": [[30, "sapphire.esd.get_singles_url", false]], "get_src_base() (in module sapphire.api)": [[14, "sapphire.api.get_src_base", false]], "get_station() (sapphire.clusters.basecluster method)": [[15, "sapphire.clusters.BaseCluster.get_station", false]], "get_station_offsets() (sapphire.analysis.direction_reconstruction.coincidencedirectionreconstruction method)": [[5, "sapphire.analysis.direction_reconstruction.CoincidenceDirectionReconstruction.get_station_offsets", false]], "get_station_pairs_within_max_distance() (sapphire.analysis.calibration.determinestationtimingoffsets method)": [[1, "sapphire.analysis.calibration.DetermineStationTimingOffsets.get_station_pairs_within_max_distance", false]], "get_station_timing_offsets() (sapphire.analysis.reconstructions.reconstructesdcoincidences method)": [[11, "sapphire.analysis.reconstructions.ReconstructESDCoincidences.get_station_timing_offsets", false]], "get_sub_blocks() (sapphire.corsika.reader.corsikafile method)": [[24, "sapphire.corsika.reader.CorsikaFile.get_sub_blocks", false]], "get_traces_for_event() (sapphire.analysis.process_events.processevents method)": [[9, "sapphire.analysis.process_events.ProcessEvents.get_traces_for_event", false]], "get_traces_for_event_index() (sapphire.analysis.process_events.processevents method)": [[9, "sapphire.analysis.process_events.ProcessEvents.get_traces_for_event_index", false]], "get_traces_for_indexed_event_index() (sapphire.analysis.process_events.processindexedevents method)": [[9, "sapphire.analysis.process_events.ProcessIndexedEvents.get_traces_for_indexed_event_index", false]], "get_weather_url() (in module sapphire.esd)": [[30, "sapphire.esd.get_weather_url", false]], "get_xy_coordinates() (sapphire.clusters.basecluster method)": [[15, "sapphire.clusters.BaseCluster.get_xy_coordinates", false]], "get_xy_coordinates() (sapphire.clusters.detector method)": [[15, "sapphire.clusters.Detector.get_xy_coordinates", false]], "get_xy_coordinates() (sapphire.clusters.station method)": [[15, "sapphire.clusters.Station.get_xy_coordinates", false]], "get_xyalpha_coordinates() (sapphire.clusters.basecluster method)": [[15, "sapphire.clusters.BaseCluster.get_xyalpha_coordinates", false]], "get_xyalpha_coordinates() (sapphire.clusters.station method)": [[15, "sapphire.clusters.Station.get_xyalpha_coordinates", false]], "gmst_to_lst() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.gmst_to_lst", false]], "gmst_to_utc() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.gmst_to_utc", false]], "goto_rundir() (sapphire.corsika.qsub_corsika.corsikabatch method)": [[22, "sapphire.corsika.qsub_corsika.CorsikaBatch.goto_rundir", false]], "gps_from_string() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.gps_from_string", false]], "gps_location() (sapphire.api.station method)": [[14, "sapphire.api.Station.gps_location", false]], "gps_locations (sapphire.api.station property)": [[14, "sapphire.api.Station.gps_locations", false]], "gps_to_datetime() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.gps_to_datetime", false]], "gps_to_lst() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.gps_to_lst", false]], "gps_to_utc() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.gps_to_utc", false]], "gpstime (class in sapphire.time_util)": [[47, "sapphire.time_util.GPSTime", false]], "gpstimestamp() (sapphire.time_util.gpstime method)": [[47, "sapphire.time_util.GPSTime.gpstimestamp", false]], "groundparticlesgammasimulation (class in sapphire.simulations.groundparticles)": [[42, "sapphire.simulations.groundparticles.GroundParticlesGammaSimulation", false]], "groundparticlessimulation (class in sapphire.simulations.groundparticles)": [[42, "sapphire.simulations.groundparticles.GroundParticlesSimulation", false]], "groundparticlessimulationwithouterrors (class in sapphire.simulations.groundparticles)": [[42, "sapphire.simulations.groundparticles.GroundParticlesSimulationWithoutErrors", false]], "ha_to_ra() (in module sapphire.transformations.celestial)": [[52, "sapphire.transformations.celestial.ha_to_ra", false]], "hadron_model_high (sapphire.corsika.blocks.eventheader property)": [[18, "sapphire.corsika.blocks.EventHeader.hadron_model_high", false]], "hadron_model_low (sapphire.corsika.blocks.eventheader property)": [[18, "sapphire.corsika.blocks.EventHeader.hadron_model_low", false]], "has_data() (sapphire.api.station method)": [[14, "sapphire.api.Station.has_data", false]], "has_weather() (sapphire.api.station method)": [[14, "sapphire.api.Station.has_weather", false]], "height_to_thickness() (sapphire.corsika.blocks.runheader method)": [[18, "sapphire.corsika.blocks.RunHeader.height_to_thickness", false]], "hisparcnetwork (class in sapphire.clusters)": [[15, "sapphire.clusters.HiSPARCNetwork", false]], "hisparcsimulation (class in sapphire.simulations.detector)": [[40, "sapphire.simulations.detector.HiSPARCSimulation", false]], "hisparcstations (class in sapphire.clusters)": [[15, "sapphire.clusters.HiSPARCStations", false]], "horizontal_to_equatorial() (in module sapphire.transformations.celestial)": [[52, "sapphire.transformations.celestial.horizontal_to_equatorial", false]], "horizontal_to_equatorial_astropy() (in module sapphire.transformations.celestial)": [[52, "sapphire.transformations.celestial.horizontal_to_equatorial_astropy", false]], "horizontal_to_hadec() (in module sapphire.transformations.celestial)": [[52, "sapphire.transformations.celestial.horizontal_to_hadec", false]], "horizontal_to_zenithazimuth() (in module sapphire.transformations.celestial)": [[52, "sapphire.transformations.celestial.horizontal_to_zenithazimuth", false]], "hours_to_degrees() (in module sapphire.transformations.angles)": [[49, "sapphire.transformations.angles.hours_to_degrees", false]], "hours_to_radians() (in module sapphire.transformations.angles)": [[49, "sapphire.transformations.angles.hours_to_radians", false]], "id (sapphire.storage.coincidence attribute)": [[45, "sapphire.storage.Coincidence.id", false]], "id (sapphire.storage.eventobservables attribute)": [[45, "sapphire.storage.EventObservables.id", false]], "id (sapphire.storage.reconstructedevent attribute)": [[45, "sapphire.storage.ReconstructedEvent.id", false]], "info (sapphire.api.station property)": [[14, "sapphire.api.Station.info", false]], "integrals (sapphire.analysis.process_traces.traceobservables property)": [[10, "sapphire.analysis.process_traces.TraceObservables.integrals", false]], "interaction_curve() (sapphire.analysis.direction_reconstruction.spherealgorithm static method)": [[5, "sapphire.analysis.direction_reconstruction.SphereAlgorithm.interaction_curve", false]], "inverse_linear() (in module sapphire.analysis.signal_calibration)": [[12, "sapphire.analysis.signal_calibration.inverse_linear", false]], "inverse_zenith_probability() (sapphire.simulations.detector.hisparcsimulation class method)": [[40, "sapphire.simulations.detector.HiSPARCSimulation.inverse_zenith_probability", false]], "is_cherenkov (sapphire.corsika.blocks.particledata property)": [[18, "sapphire.corsika.blocks.ParticleData.is_cherenkov", false]], "is_detectable (sapphire.corsika.blocks.particledata property)": [[18, "sapphire.corsika.blocks.ParticleData.is_detectable", false]], "is_nucleus (sapphire.corsika.blocks.particledata property)": [[18, "sapphire.corsika.blocks.ParticleData.is_nucleus", false]], "is_particle (sapphire.corsika.blocks.particledata property)": [[18, "sapphire.corsika.blocks.ParticleData.is_particle", false]], "jit() (in module sapphire.corsika.blocks)": [[18, "sapphire.corsika.blocks.jit", false]], "juliandate_to_gmst() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.juliandate_to_gmst", false]], "juliandate_to_modifiedjd() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.juliandate_to_modifiedjd", false]], "juliandate_to_utc() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.juliandate_to_utc", false]], "kascadecoincidences (class in sapphire.kascade)": [[34, "sapphire.kascade.KascadeCoincidences", false]], "kascadeevent (class in sapphire.storage)": [[45, "sapphire.storage.KascadeEvent", false]], "kascadeldf (class in sapphire.simulations.ldf)": [[43, "sapphire.simulations.ldf.KascadeLdf", false]], "kascadeldfsimulation (class in sapphire.simulations.ldf)": [[43, "sapphire.simulations.ldf.KascadeLdfSimulation", false]], "kascadeldfsimulationwithouterrors (class in sapphire.simulations.ldf)": [[43, "sapphire.simulations.ldf.KascadeLdfSimulationWithoutErrors", false]], "landau_pdf() (sapphire.analysis.landau.scintillator method)": [[8, "sapphire.analysis.landau.Scintillator.landau_pdf", false]], "ldf_value() (sapphire.simulations.ldf.ellipsldf method)": [[43, "sapphire.simulations.ldf.EllipsLdf.ldf_value", false]], "ldf_value() (sapphire.simulations.ldf.kascadeldf method)": [[43, "sapphire.simulations.ldf.KascadeLdf.ldf_value", false]], "ldf_value() (sapphire.simulations.ldf.nkgldf method)": [[43, "sapphire.simulations.ldf.NkgLdf.ldf_value", false]], "leap_seconds (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.LEAP_SECONDS", false]], "lf() (sapphire.analysis.landau.scintillator method)": [[8, "sapphire.analysis.landau.Scintillator.lf", false]], "linear() (in module sapphire.analysis.signal_calibration)": [[12, "sapphire.analysis.signal_calibration.linear", false]], "linear_circle_linear() (in module sapphire.analysis.signal_calibration)": [[12, "sapphire.analysis.signal_calibration.linear_circle_linear", false]], "linear_intersection() (in module sapphire.analysis.signal_calibration)": [[12, "sapphire.analysis.signal_calibration.linear_intersection", false]], "lla_to_ecef() (sapphire.transformations.geographic.fromwgs84toenutransformation method)": [[54, "sapphire.transformations.geographic.FromWGS84ToENUTransformation.lla_to_ecef", false]], "lla_to_enu() (sapphire.transformations.geographic.fromwgs84toenutransformation method)": [[54, "sapphire.transformations.geographic.FromWGS84ToENUTransformation.lla_to_enu", false]], "load_coincidences() (in module sapphire.esd)": [[30, "sapphire.esd.load_coincidences", false]], "load_data() (in module sapphire.esd)": [[30, "sapphire.esd.load_data", false]], "log_linear() (in module sapphire.analysis.signal_calibration)": [[12, "sapphire.analysis.signal_calibration.log_linear", false]], "logic_checks() (in module sapphire.analysis.direction_reconstruction)": [[5, "sapphire.analysis.direction_reconstruction.logic_checks", false]], "loglog_linear_circle_linear() (in module sapphire.analysis.signal_calibration)": [[12, "sapphire.analysis.signal_calibration.loglog_linear_circle_linear", false]], "loglog_xy_circle_linear() (in module sapphire.analysis.signal_calibration)": [[12, "sapphire.analysis.signal_calibration.loglog_xy_circle_linear", false]], "lst_to_gmst() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.lst_to_gmst", false]], "main() (in module sapphire.corsika.generate_corsika_overview)": [[20, "sapphire.corsika.generate_corsika_overview.main", false]], "main() (in module sapphire.corsika.qsub_corsika)": [[22, "sapphire.corsika.qsub_corsika.main", false]], "main() (in module sapphire.corsika.qsub_store_corsika_data)": [[23, "sapphire.corsika.qsub_store_corsika_data.main", false]], "main() (in module sapphire.corsika.store_corsika_data)": [[25, "sapphire.corsika.store_corsika_data.main", false]], "main() (in module sapphire.data.extend_local_data)": [[28, "sapphire.data.extend_local_data.main", false]], "main() (in module sapphire.data.update_local_data)": [[29, "sapphire.data.update_local_data.main", false]], "make_relative() (in module sapphire.utils)": [[56, "sapphire.utils.make_relative", false]], "make_rundir() (sapphire.corsika.qsub_corsika.corsikabatch method)": [[22, "sapphire.corsika.qsub_corsika.CorsikaBatch.make_rundir", false]], "max_distance (sapphire.analysis.calibration.determinestationtimingoffsets attribute)": [[1, "sapphire.analysis.calibration.DetermineStationTimingOffsets.MAX_DISTANCE", false]], "max_energy_deposit_in_mips() (in module sapphire.simulations.gammas)": [[41, "sapphire.simulations.gammas.max_energy_deposit_in_mips", false]], "max_iterations (sapphire.analysis.direction_reconstruction.curvedregressionalgorithm attribute)": [[5, "sapphire.analysis.direction_reconstruction.CurvedRegressionAlgorithm.MAX_ITERATIONS", false]], "max_iterations (sapphire.analysis.direction_reconstruction.curvedregressionalgorithm3d attribute)": [[5, "sapphire.analysis.direction_reconstruction.CurvedRegressionAlgorithm3D.MAX_ITERATIONS", false]], "max_iterations (sapphire.analysis.direction_reconstruction.regressionalgorithm3d attribute)": [[5, "sapphire.analysis.direction_reconstruction.RegressionAlgorithm3D.MAX_ITERATIONS", false]], "mean_filter_with_threshold() (sapphire.analysis.process_traces.meanfilter method)": [[10, "sapphire.analysis.process_traces.MeanFilter.mean_filter_with_threshold", false]], "mean_filter_without_threshold() (sapphire.analysis.process_traces.meanfilter method)": [[10, "sapphire.analysis.process_traces.MeanFilter.mean_filter_without_threshold", false]], "meanfilter (class in sapphire.analysis.process_traces)": [[10, "sapphire.analysis.process_traces.MeanFilter", false]], "memoize() (in module sapphire.utils)": [[56, "sapphire.utils.memoize", false]], "mev_scale (sapphire.analysis.landau.scintillator attribute)": [[8, "sapphire.analysis.landau.Scintillator.mev_scale", false]], "min_len_dt (sapphire.analysis.calibration.determinestationtimingoffsets attribute)": [[1, "sapphire.analysis.calibration.DetermineStationTimingOffsets.MIN_LEN_DT", false]], "minimum_events_for_coincidence() (sapphire.analysis.coincidence_queries.coincidencequery method)": [[2, "sapphire.analysis.coincidence_queries.CoincidenceQuery.minimum_events_for_coincidence", false]], "modifiedjd_to_juliandate() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.modifiedjd_to_juliandate", false]], "modifiedjd_to_utc() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.modifiedjd_to_utc", false]], "module": [[0, "module-sapphire.analysis", false], [1, "module-sapphire.analysis.calibration", false], [2, "module-sapphire.analysis.coincidence_queries", false], [3, "module-sapphire.analysis.coincidences", false], [4, "module-sapphire.analysis.core_reconstruction", false], [5, "module-sapphire.analysis.direction_reconstruction", false], [6, "module-sapphire.analysis.event_utils", false], [7, "module-sapphire.analysis.find_mpv", false], [8, "module-sapphire.analysis.landau", false], [9, "module-sapphire.analysis.process_events", false], [10, "module-sapphire.analysis.process_traces", false], [11, "module-sapphire.analysis.reconstructions", false], [12, "module-sapphire.analysis.signal_calibration", false], [13, "module-sapphire.analysis.time_deltas", false], [14, "module-sapphire.api", false], [15, "module-sapphire.clusters", false], [17, "module-sapphire.corsika", false], [18, "module-sapphire.corsika.blocks", false], [19, "module-sapphire.corsika.corsika_queries", false], [20, "module-sapphire.corsika.generate_corsika_overview", false], [21, "module-sapphire.corsika.particles", false], [22, "module-sapphire.corsika.qsub_corsika", false], [23, "module-sapphire.corsika.qsub_store_corsika_data", false], [24, "module-sapphire.corsika.reader", false], [25, "module-sapphire.corsika.store_corsika_data", false], [26, "module-sapphire.corsika.units", false], [27, "module-sapphire.data", false], [28, "module-sapphire.data.extend_local_data", false], [29, "module-sapphire.data.update_local_data", false], [30, "module-sapphire.esd", false], [34, "module-sapphire.kascade", false], [35, "module-sapphire.publicdb", false], [36, "module-sapphire.qsub", false], [37, "module-sapphire", false], [38, "module-sapphire.simulations", false], [39, "module-sapphire.simulations.base", false], [40, "module-sapphire.simulations.detector", false], [41, "module-sapphire.simulations.gammas", false], [42, "module-sapphire.simulations.groundparticles", false], [43, "module-sapphire.simulations.ldf", false], [44, "module-sapphire.simulations.showerfront", false], [45, "module-sapphire.storage", false], [46, "module-sapphire.tests", false], [47, "module-sapphire.time_util", false], [48, "module-sapphire.transformations", false], [49, "module-sapphire.transformations.angles", false], [50, "module-sapphire.transformations.axes", false], [51, "module-sapphire.transformations.base", false], [52, "module-sapphire.transformations.celestial", false], [53, "module-sapphire.transformations.clock", false], [54, "module-sapphire.transformations.geographic", false], [56, "module-sapphire.utils", false]], "move_tempfile_to_destination() (in module sapphire.corsika.generate_corsika_overview)": [[20, "sapphire.corsika.generate_corsika_overview.move_tempfile_to_destination", false]], "multiple_jobs() (in module sapphire.corsika.qsub_corsika)": [[22, "sapphire.corsika.qsub_corsika.multiple_jobs", false]], "multiplegroundparticlessimulation (class in sapphire.simulations.groundparticles)": [[42, "sapphire.simulations.groundparticles.MultipleGroundParticlesSimulation", false]], "n (sapphire.storage.coincidence attribute)": [[45, "sapphire.storage.Coincidence.N", false]], "n (sapphire.storage.eventobservables attribute)": [[45, "sapphire.storage.EventObservables.N", false]], "n_detectors() (sapphire.api.station method)": [[14, "sapphire.api.Station.n_detectors", false]], "n_events() (sapphire.api.station method)": [[14, "sapphire.api.Station.n_events", false]], "n_peaks (sapphire.analysis.process_traces.traceobservables property)": [[10, "sapphire.analysis.process_traces.TraceObservables.n_peaks", false]], "name() (in module sapphire.corsika.particles)": [[21, "sapphire.corsika.particles.name", false]], "nested_network() (sapphire.api.network method)": [[14, "sapphire.api.Network.nested_network", false]], "network (class in sapphire.api)": [[14, "sapphire.api.Network", false]], "nkgldf (class in sapphire.simulations.ldf)": [[43, "sapphire.simulations.ldf.NkgLdf", false]], "nkgldfsimulation (class in sapphire.simulations.ldf)": [[43, "sapphire.simulations.ldf.NkgLdfSimulation", false]], "nkgldfsimulationwithouterrors (class in sapphire.simulations.ldf)": [[43, "sapphire.simulations.ldf.NkgLdfSimulationWithoutErrors", false]], "norm_angle() (in module sapphire.utils)": [[56, "sapphire.utils.norm_angle", false]], "pair_mean_free_path() (in module sapphire.simulations.gammas)": [[41, "sapphire.simulations.gammas.pair_mean_free_path", false]], "pairwise() (in module sapphire.analysis.calibration)": [[1, "sapphire.analysis.calibration.pairwise", false]], "particle (sapphire.corsika.blocks.particledata property)": [[18, "sapphire.corsika.blocks.ParticleData.particle", false]], "particle_data() (in module sapphire.corsika.blocks)": [[18, "sapphire.corsika.blocks.particle_data", false]], "particle_data_thin() (in module sapphire.corsika.blocks)": [[18, "sapphire.corsika.blocks.particle_data_thin", false]], "particle_id() (in module sapphire.corsika.particles)": [[21, "sapphire.corsika.particles.particle_id", false]], "particlecountersimulation (class in sapphire.simulations.groundparticles)": [[42, "sapphire.simulations.groundparticles.ParticleCounterSimulation", false]], "particledata (class in sapphire.corsika.blocks)": [[18, "sapphire.corsika.blocks.ParticleData", false]], "particledatathin (class in sapphire.corsika.blocks)": [[18, "sapphire.corsika.blocks.ParticleDataThin", false]], "pbar() (in module sapphire.utils)": [[56, "sapphire.utils.pbar", false]], "pdf() (sapphire.analysis.landau.scintillator method)": [[8, "sapphire.analysis.landau.Scintillator.pdf", false]], "pdf_domain (sapphire.analysis.landau.scintillator attribute)": [[8, "sapphire.analysis.landau.Scintillator.pdf_domain", false]], "pdf_kernel() (in module sapphire.analysis.landau)": [[8, "sapphire.analysis.landau.pdf_kernel", false]], "pdf_kernel2() (in module sapphire.analysis.landau)": [[8, "sapphire.analysis.landau.pdf_kernel2", false]], "pdf_values (sapphire.analysis.landau.scintillator attribute)": [[8, "sapphire.analysis.landau.Scintillator.pdf_values", false]], "perform_query() (sapphire.analysis.coincidence_queries.coincidencequery method)": [[2, "sapphire.analysis.coincidence_queries.CoincidenceQuery.perform_query", false]], "perform_query() (sapphire.corsika.corsika_queries.corsikaquery method)": [[19, "sapphire.corsika.corsika_queries.CorsikaQuery.perform_query", false]], "polar_to_cartesian() (in module sapphire.transformations.axes)": [[50, "sapphire.transformations.axes.polar_to_cartesian", false]], "post_trigger (in module sapphire.analysis.process_traces)": [[10, "sapphire.analysis.process_traces.POST_TRIGGER", false]], "pre_trigger (in module sapphire.analysis.process_traces)": [[10, "sapphire.analysis.process_traces.PRE_TRIGGER", false]], "prepare_env() (sapphire.corsika.qsub_corsika.corsikabatch method)": [[22, "sapphire.corsika.qsub_corsika.CorsikaBatch.prepare_env", false]], "prepare_output() (in module sapphire.corsika.generate_corsika_overview)": [[20, "sapphire.corsika.generate_corsika_overview.prepare_output", false]], "prepare_output() (sapphire.analysis.reconstructions.reconstructesdcoincidences method)": [[11, "sapphire.analysis.reconstructions.ReconstructESDCoincidences.prepare_output", false]], "prepare_output() (sapphire.analysis.reconstructions.reconstructesdcoincidencesfromsource method)": [[11, "sapphire.analysis.reconstructions.ReconstructESDCoincidencesFromSource.prepare_output", false]], "prepare_output() (sapphire.analysis.reconstructions.reconstructesdevents method)": [[11, "sapphire.analysis.reconstructions.ReconstructESDEvents.prepare_output", false]], "prepare_output() (sapphire.analysis.reconstructions.reconstructesdeventsfromsource method)": [[11, "sapphire.analysis.reconstructions.ReconstructESDEventsFromSource.prepare_output", false]], "process_and_store_results() (sapphire.analysis.process_events.processdatatable method)": [[9, "sapphire.analysis.process_events.ProcessDataTable.process_and_store_results", false]], "process_and_store_results() (sapphire.analysis.process_events.processevents method)": [[9, "sapphire.analysis.process_events.ProcessEvents.process_and_store_results", false]], "process_detector_observables() (sapphire.simulations.base.basesimulation method)": [[39, "sapphire.simulations.base.BaseSimulation.process_detector_observables", false]], "process_events() (sapphire.analysis.coincidences.coincidences method)": [[3, "sapphire.analysis.coincidences.Coincidences.process_events", false]], "process_time() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.process_time", false]], "process_traces() (sapphire.analysis.process_events.processevents method)": [[9, "sapphire.analysis.process_events.ProcessEvents.process_traces", false]], "process_traces() (sapphire.analysis.process_events.processindexedevents method)": [[9, "sapphire.analysis.process_events.ProcessIndexedEvents.process_traces", false]], "processdatatable (class in sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.ProcessDataTable", false]], "processdatatablefromsource (class in sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.ProcessDataTableFromSource", false]], "processed_events_description (sapphire.analysis.process_events.processevents attribute)": [[9, "sapphire.analysis.process_events.ProcessEvents.processed_events_description", false]], "processevents (class in sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.ProcessEvents", false]], "processeventsfromsource (class in sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.ProcessEventsFromSource", false]], "processeventsfromsourcewithtriggeroffset (class in sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.ProcessEventsFromSourceWithTriggerOffset", false]], "processeventswithlint (class in sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.ProcessEventsWithLINT", false]], "processeventswithouttraces (class in sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.ProcessEventsWithoutTraces", false]], "processeventswithtriggeroffset (class in sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.ProcessEventsWithTriggerOffset", false]], "processindexedevents (class in sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.ProcessIndexedEvents", false]], "processindexedeventswithlint (class in sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.ProcessIndexedEventsWithLINT", false]], "processindexedeventswithouttraces (class in sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.ProcessIndexedEventsWithoutTraces", false]], "processsingles (class in sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.ProcessSingles", false]], "processsinglesfromsource (class in sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.ProcessSinglesFromSource", false]], "processtimedeltas (class in sapphire.analysis.time_deltas)": [[13, "sapphire.analysis.time_deltas.ProcessTimeDeltas", false]], "processweather (class in sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.ProcessWeather", false]], "processweatherfromsource (class in sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.ProcessWeatherFromSource", false]], "pulse_height() (sapphire.api.station method)": [[14, "sapphire.api.Station.pulse_height", false]], "pulse_integral() (sapphire.api.station method)": [[14, "sapphire.api.Station.pulse_integral", false]], "pulseheights (sapphire.analysis.process_traces.traceobservables property)": [[10, "sapphire.analysis.process_traces.TraceObservables.pulseheights", false]], "quick_download() (in module sapphire.esd)": [[30, "sapphire.esd.quick_download", false]], "radial_core_distance() (sapphire.analysis.direction_reconstruction.curvedmixin class method)": [[5, "sapphire.analysis.direction_reconstruction.CurvedMixin.radial_core_distance", false]], "radians_to_hours() (in module sapphire.transformations.angles)": [[49, "sapphire.transformations.angles.radians_to_hours", false]], "range_filter() (sapphire.corsika.corsika_queries.corsikaquery method)": [[19, "sapphire.corsika.corsika_queries.CorsikaQuery.range_filter", false]], "read_and_store_data() (sapphire.kascade.storekascadedata method)": [[34, "sapphire.kascade.StoreKascadeData.read_and_store_data", false]], "read_dt() (sapphire.analysis.calibration.determinestationtimingoffsets method)": [[1, "sapphire.analysis.calibration.DetermineStationTimingOffsets.read_dt", false]], "read_seeds() (in module sapphire.corsika.generate_corsika_overview)": [[20, "sapphire.corsika.generate_corsika_overview.read_seeds", false]], "readlineandstoreeventclass (class in sapphire.esd)": [[30, "sapphire.esd.ReadLineAndStoreEventClass", false]], "readlineandstorelightningclass (class in sapphire.esd)": [[30, "sapphire.esd.ReadLineAndStoreLightningClass", false]], "readlineandstoresinglesclass (class in sapphire.esd)": [[30, "sapphire.esd.ReadLineAndStoreSinglesClass", false]], "readlineandstoreweatherclass (class in sapphire.esd)": [[30, "sapphire.esd.ReadLineAndStoreWeatherClass", false]], "reconstruct() (sapphire.analysis.core_reconstruction.basecorealgorithm static method)": [[4, "sapphire.analysis.core_reconstruction.BaseCoreAlgorithm.reconstruct", false]], "reconstruct() (sapphire.analysis.core_reconstruction.centermassalgorithm static method)": [[4, "sapphire.analysis.core_reconstruction.CenterMassAlgorithm.reconstruct", false]], "reconstruct() (sapphire.analysis.core_reconstruction.ellipsldfalgorithm class method)": [[4, "sapphire.analysis.core_reconstruction.EllipsLdfAlgorithm.reconstruct", false]], "reconstruct() (sapphire.analysis.direction_reconstruction.basedirectionalgorithm static method)": [[5, "sapphire.analysis.direction_reconstruction.BaseDirectionAlgorithm.reconstruct", false]], "reconstruct() (sapphire.analysis.direction_reconstruction.curvedregressionalgorithm method)": [[5, "sapphire.analysis.direction_reconstruction.CurvedRegressionAlgorithm.reconstruct", false]], "reconstruct() (sapphire.analysis.direction_reconstruction.curvedregressionalgorithm3d method)": [[5, "sapphire.analysis.direction_reconstruction.CurvedRegressionAlgorithm3D.reconstruct", false]], "reconstruct() (sapphire.analysis.direction_reconstruction.directalgorithm class method)": [[5, "sapphire.analysis.direction_reconstruction.DirectAlgorithm.reconstruct", false]], "reconstruct() (sapphire.analysis.direction_reconstruction.directalgorithmcartesian static method)": [[5, "sapphire.analysis.direction_reconstruction.DirectAlgorithmCartesian.reconstruct", false]], "reconstruct() (sapphire.analysis.direction_reconstruction.directalgorithmcartesian3d static method)": [[5, "sapphire.analysis.direction_reconstruction.DirectAlgorithmCartesian3D.reconstruct", false]], "reconstruct() (sapphire.analysis.direction_reconstruction.fitalgorithm3d class method)": [[5, "sapphire.analysis.direction_reconstruction.FitAlgorithm3D.reconstruct", false]], "reconstruct() (sapphire.analysis.direction_reconstruction.regressionalgorithm class method)": [[5, "sapphire.analysis.direction_reconstruction.RegressionAlgorithm.reconstruct", false]], "reconstruct() (sapphire.analysis.direction_reconstruction.regressionalgorithm3d class method)": [[5, "sapphire.analysis.direction_reconstruction.RegressionAlgorithm3D.reconstruct", false]], "reconstruct_and_store() (sapphire.analysis.reconstructions.reconstructesdcoincidences method)": [[11, "sapphire.analysis.reconstructions.ReconstructESDCoincidences.reconstruct_and_store", false]], "reconstruct_and_store() (sapphire.analysis.reconstructions.reconstructesdevents method)": [[11, "sapphire.analysis.reconstructions.ReconstructESDEvents.reconstruct_and_store", false]], "reconstruct_coincidence() (sapphire.analysis.core_reconstruction.coincidencecorereconstruction method)": [[4, "sapphire.analysis.core_reconstruction.CoincidenceCoreReconstruction.reconstruct_coincidence", false]], "reconstruct_coincidence() (sapphire.analysis.core_reconstruction.coincidencecorereconstructiondetectors method)": [[4, "sapphire.analysis.core_reconstruction.CoincidenceCoreReconstructionDetectors.reconstruct_coincidence", false]], "reconstruct_coincidence() (sapphire.analysis.direction_reconstruction.coincidencedirectionreconstruction method)": [[5, "sapphire.analysis.direction_reconstruction.CoincidenceDirectionReconstruction.reconstruct_coincidence", false]], "reconstruct_coincidence() (sapphire.analysis.direction_reconstruction.coincidencedirectionreconstructiondetectors method)": [[5, "sapphire.analysis.direction_reconstruction.CoincidenceDirectionReconstructionDetectors.reconstruct_coincidence", false]], "reconstruct_coincidences() (sapphire.analysis.core_reconstruction.coincidencecorereconstruction method)": [[4, "sapphire.analysis.core_reconstruction.CoincidenceCoreReconstruction.reconstruct_coincidences", false]], "reconstruct_coincidences() (sapphire.analysis.direction_reconstruction.coincidencedirectionreconstruction method)": [[5, "sapphire.analysis.direction_reconstruction.CoincidenceDirectionReconstruction.reconstruct_coincidences", false]], "reconstruct_common() (sapphire.analysis.core_reconstruction.averageintersectionalgorithm class method)": [[4, "sapphire.analysis.core_reconstruction.AverageIntersectionAlgorithm.reconstruct_common", false]], "reconstruct_common() (sapphire.analysis.core_reconstruction.basecorealgorithm class method)": [[4, "sapphire.analysis.core_reconstruction.BaseCoreAlgorithm.reconstruct_common", false]], "reconstruct_common() (sapphire.analysis.core_reconstruction.centermassalgorithm class method)": [[4, "sapphire.analysis.core_reconstruction.CenterMassAlgorithm.reconstruct_common", false]], "reconstruct_common() (sapphire.analysis.core_reconstruction.ellipsldfalgorithm class method)": [[4, "sapphire.analysis.core_reconstruction.EllipsLdfAlgorithm.reconstruct_common", false]], "reconstruct_common() (sapphire.analysis.direction_reconstruction.basedirectionalgorithm class method)": [[5, "sapphire.analysis.direction_reconstruction.BaseDirectionAlgorithm.reconstruct_common", false]], "reconstruct_common() (sapphire.analysis.direction_reconstruction.curvedregressionalgorithm method)": [[5, "sapphire.analysis.direction_reconstruction.CurvedRegressionAlgorithm.reconstruct_common", false]], "reconstruct_common() (sapphire.analysis.direction_reconstruction.curvedregressionalgorithm3d method)": [[5, "sapphire.analysis.direction_reconstruction.CurvedRegressionAlgorithm3D.reconstruct_common", false]], "reconstruct_common() (sapphire.analysis.direction_reconstruction.directalgorithm class method)": [[5, "sapphire.analysis.direction_reconstruction.DirectAlgorithm.reconstruct_common", false]], "reconstruct_common() (sapphire.analysis.direction_reconstruction.directalgorithmcartesian class method)": [[5, "sapphire.analysis.direction_reconstruction.DirectAlgorithmCartesian.reconstruct_common", false]], "reconstruct_common() (sapphire.analysis.direction_reconstruction.directalgorithmcartesian3d class method)": [[5, "sapphire.analysis.direction_reconstruction.DirectAlgorithmCartesian3D.reconstruct_common", false]], "reconstruct_common() (sapphire.analysis.direction_reconstruction.fitalgorithm3d class method)": [[5, "sapphire.analysis.direction_reconstruction.FitAlgorithm3D.reconstruct_common", false]], "reconstruct_common() (sapphire.analysis.direction_reconstruction.regressionalgorithm class method)": [[5, "sapphire.analysis.direction_reconstruction.RegressionAlgorithm.reconstruct_common", false]], "reconstruct_common() (sapphire.analysis.direction_reconstruction.regressionalgorithm3d class method)": [[5, "sapphire.analysis.direction_reconstruction.RegressionAlgorithm3D.reconstruct_common", false]], "reconstruct_cores() (sapphire.analysis.reconstructions.reconstructesdcoincidences method)": [[11, "sapphire.analysis.reconstructions.ReconstructESDCoincidences.reconstruct_cores", false]], "reconstruct_cores() (sapphire.analysis.reconstructions.reconstructesdevents method)": [[11, "sapphire.analysis.reconstructions.ReconstructESDEvents.reconstruct_cores", false]], "reconstruct_directions() (sapphire.analysis.reconstructions.reconstructesdcoincidences method)": [[11, "sapphire.analysis.reconstructions.ReconstructESDCoincidences.reconstruct_directions", false]], "reconstruct_directions() (sapphire.analysis.reconstructions.reconstructesdevents method)": [[11, "sapphire.analysis.reconstructions.ReconstructESDEvents.reconstruct_directions", false]], "reconstruct_equatorial() (sapphire.analysis.direction_reconstruction.spherealgorithm class method)": [[5, "sapphire.analysis.direction_reconstruction.SphereAlgorithm.reconstruct_equatorial", false]], "reconstruct_event() (sapphire.analysis.core_reconstruction.eventcorereconstruction method)": [[4, "sapphire.analysis.core_reconstruction.EventCoreReconstruction.reconstruct_event", false]], "reconstruct_event() (sapphire.analysis.direction_reconstruction.eventdirectionreconstruction method)": [[5, "sapphire.analysis.direction_reconstruction.EventDirectionReconstruction.reconstruct_event", false]], "reconstruct_events() (sapphire.analysis.core_reconstruction.eventcorereconstruction method)": [[4, "sapphire.analysis.core_reconstruction.EventCoreReconstruction.reconstruct_events", false]], "reconstruct_events() (sapphire.analysis.direction_reconstruction.eventdirectionreconstruction method)": [[5, "sapphire.analysis.direction_reconstruction.EventDirectionReconstruction.reconstruct_events", false]], "reconstructedcoincidence (class in sapphire.storage)": [[45, "sapphire.storage.ReconstructedCoincidence", false]], "reconstructedevent (class in sapphire.storage)": [[45, "sapphire.storage.ReconstructedEvent", false]], "reconstructedkascadeevent (class in sapphire.storage)": [[45, "sapphire.storage.ReconstructedKascadeEvent", false]], "reconstructesdcoincidences (class in sapphire.analysis.reconstructions)": [[11, "sapphire.analysis.reconstructions.ReconstructESDCoincidences", false]], "reconstructesdcoincidencesfromsource (class in sapphire.analysis.reconstructions)": [[11, "sapphire.analysis.reconstructions.ReconstructESDCoincidencesFromSource", false]], "reconstructesdevents (class in sapphire.analysis.reconstructions)": [[11, "sapphire.analysis.reconstructions.ReconstructESDEvents", false]], "reconstructesdeventsfromsource (class in sapphire.analysis.reconstructions)": [[11, "sapphire.analysis.reconstructions.ReconstructESDEventsFromSource", false]], "reconstructions_from_stations() (sapphire.analysis.coincidence_queries.coincidencequery method)": [[2, "sapphire.analysis.coincidence_queries.CoincidenceQuery.reconstructions_from_stations", false]], "reconstructsimulatedcoincidences (class in sapphire.analysis.reconstructions)": [[11, "sapphire.analysis.reconstructions.ReconstructSimulatedCoincidences", false]], "reconstructsimulatedevents (class in sapphire.analysis.reconstructions)": [[11, "sapphire.analysis.reconstructions.ReconstructSimulatedEvents", false]], "reduce_traces() (sapphire.analysis.process_traces.datareduction method)": [[10, "sapphire.analysis.process_traces.DataReduction.reduce_traces", false]], "regressionalgorithm (class in sapphire.analysis.direction_reconstruction)": [[5, "sapphire.analysis.direction_reconstruction.RegressionAlgorithm", false]], "regressionalgorithm3d (class in sapphire.analysis.direction_reconstruction)": [[5, "sapphire.analysis.direction_reconstruction.RegressionAlgorithm3D", false]], "rel_phi_errorsq() (sapphire.analysis.direction_reconstruction.directalgorithm static method)": [[5, "sapphire.analysis.direction_reconstruction.DirectAlgorithm.rel_phi_errorsq", false]], "rel_theta1_errorsq() (sapphire.analysis.direction_reconstruction.directalgorithm class method)": [[5, "sapphire.analysis.direction_reconstruction.DirectAlgorithm.rel_theta1_errorsq", false]], "rel_theta2_errorsq() (sapphire.analysis.direction_reconstruction.directalgorithm class method)": [[5, "sapphire.analysis.direction_reconstruction.DirectAlgorithm.rel_theta2_errorsq", false]], "relative_detector_arrival_times() (in module sapphire.analysis.event_utils)": [[6, "sapphire.analysis.event_utils.relative_detector_arrival_times", false]], "residuals() (sapphire.analysis.landau.scintillator method)": [[8, "sapphire.analysis.landau.Scintillator.residuals", false]], "rotate_cartesian() (in module sapphire.transformations.axes)": [[50, "sapphire.transformations.axes.rotate_cartesian", false]], "rotation_matrix() (in module sapphire.transformations.axes)": [[50, "sapphire.transformations.axes.rotation_matrix", false]], "round_in_base() (in module sapphire.utils)": [[56, "sapphire.utils.round_in_base", false]], "run() (in module sapphire.corsika.qsub_store_corsika_data)": [[23, "sapphire.corsika.qsub_store_corsika_data.run", false]], "run() (sapphire.corsika.qsub_corsika.corsikabatch method)": [[22, "sapphire.corsika.qsub_corsika.CorsikaBatch.run", false]], "run() (sapphire.simulations.base.basesimulation method)": [[39, "sapphire.simulations.base.BaseSimulation.run", false]], "run_tests() (in module sapphire.tests)": [[46, "sapphire.tests.run_tests", false]], "runend (class in sapphire.corsika.blocks)": [[18, "sapphire.corsika.blocks.RunEnd", false]], "runheader (class in sapphire.corsika.blocks)": [[18, "sapphire.corsika.blocks.RunHeader", false]], "sapphire": [[37, "module-sapphire", false]], "sapphire.analysis": [[0, "module-sapphire.analysis", false]], "sapphire.analysis.calibration": [[1, "module-sapphire.analysis.calibration", false]], "sapphire.analysis.coincidence_queries": [[2, "module-sapphire.analysis.coincidence_queries", false]], "sapphire.analysis.coincidences": [[3, "module-sapphire.analysis.coincidences", false]], "sapphire.analysis.core_reconstruction": [[4, "module-sapphire.analysis.core_reconstruction", false]], "sapphire.analysis.direction_reconstruction": [[5, "module-sapphire.analysis.direction_reconstruction", false]], "sapphire.analysis.event_utils": [[6, "module-sapphire.analysis.event_utils", false]], "sapphire.analysis.find_mpv": [[7, "module-sapphire.analysis.find_mpv", false]], "sapphire.analysis.landau": [[8, "module-sapphire.analysis.landau", false]], "sapphire.analysis.process_events": [[9, "module-sapphire.analysis.process_events", false]], "sapphire.analysis.process_traces": [[10, "module-sapphire.analysis.process_traces", false]], "sapphire.analysis.reconstructions": [[11, "module-sapphire.analysis.reconstructions", false]], "sapphire.analysis.signal_calibration": [[12, "module-sapphire.analysis.signal_calibration", false]], "sapphire.analysis.time_deltas": [[13, "module-sapphire.analysis.time_deltas", false]], "sapphire.api": [[14, "module-sapphire.api", false]], "sapphire.clusters": [[15, "module-sapphire.clusters", false]], "sapphire.corsika": [[17, "module-sapphire.corsika", false]], "sapphire.corsika.blocks": [[18, "module-sapphire.corsika.blocks", false]], "sapphire.corsika.corsika_queries": [[19, "module-sapphire.corsika.corsika_queries", false]], "sapphire.corsika.generate_corsika_overview": [[20, "module-sapphire.corsika.generate_corsika_overview", false]], "sapphire.corsika.particles": [[21, "module-sapphire.corsika.particles", false]], "sapphire.corsika.qsub_corsika": [[22, "module-sapphire.corsika.qsub_corsika", false]], "sapphire.corsika.qsub_store_corsika_data": [[23, "module-sapphire.corsika.qsub_store_corsika_data", false]], "sapphire.corsika.reader": [[24, "module-sapphire.corsika.reader", false]], "sapphire.corsika.store_corsika_data": [[25, "module-sapphire.corsika.store_corsika_data", false]], "sapphire.corsika.units": [[26, "module-sapphire.corsika.units", false]], "sapphire.data": [[27, "module-sapphire.data", false]], "sapphire.data.extend_local_data": [[28, "module-sapphire.data.extend_local_data", false]], "sapphire.data.update_local_data": [[29, "module-sapphire.data.update_local_data", false]], "sapphire.esd": [[30, "module-sapphire.esd", false]], "sapphire.kascade": [[34, "module-sapphire.kascade", false]], "sapphire.publicdb": [[35, "module-sapphire.publicdb", false]], "sapphire.qsub": [[36, "module-sapphire.qsub", false]], "sapphire.simulations": [[38, "module-sapphire.simulations", false]], "sapphire.simulations.base": [[39, "module-sapphire.simulations.base", false]], "sapphire.simulations.detector": [[40, "module-sapphire.simulations.detector", false]], "sapphire.simulations.gammas": [[41, "module-sapphire.simulations.gammas", false]], "sapphire.simulations.groundparticles": [[42, "module-sapphire.simulations.groundparticles", false]], "sapphire.simulations.ldf": [[43, "module-sapphire.simulations.ldf", false]], "sapphire.simulations.showerfront": [[44, "module-sapphire.simulations.showerfront", false]], "sapphire.storage": [[45, "module-sapphire.storage", false]], "sapphire.tests": [[46, "module-sapphire.tests", false]], "sapphire.time_util": [[47, "module-sapphire.time_util", false]], "sapphire.transformations": [[48, "module-sapphire.transformations", false]], "sapphire.transformations.angles": [[49, "module-sapphire.transformations.angles", false]], "sapphire.transformations.axes": [[50, "module-sapphire.transformations.axes", false]], "sapphire.transformations.base": [[51, "module-sapphire.transformations.base", false]], "sapphire.transformations.celestial": [[52, "module-sapphire.transformations.celestial", false]], "sapphire.transformations.clock": [[53, "module-sapphire.transformations.clock", false]], "sapphire.transformations.geographic": [[54, "module-sapphire.transformations.geographic", false]], "sapphire.utils": [[56, "module-sapphire.utils", false]], "save_particle() (in module sapphire.corsika.store_corsika_data)": [[25, "sapphire.corsika.store_corsika_data.save_particle", false]], "save_thinned_particle() (in module sapphire.corsika.store_corsika_data)": [[25, "sapphire.corsika.store_corsika_data.save_thinned_particle", false]], "scienceparkcluster (class in sapphire.clusters)": [[15, "sapphire.clusters.ScienceParkCluster", false]], "scintillator (class in sapphire.analysis.landau)": [[8, "sapphire.analysis.landau.Scintillator", false]], "search_and_store_coincidences() (sapphire.analysis.coincidences.coincidences method)": [[3, "sapphire.analysis.coincidences.Coincidences.search_and_store_coincidences", false]], "search_and_store_coincidences() (sapphire.analysis.coincidences.coincidencesesd method)": [[3, "sapphire.analysis.coincidences.CoincidencesESD.search_and_store_coincidences", false]], "search_coincidences() (sapphire.analysis.coincidences.coincidences method)": [[3, "sapphire.analysis.coincidences.Coincidences.search_coincidences", false]], "search_coincidences() (sapphire.analysis.coincidences.coincidencesesd method)": [[3, "sapphire.analysis.coincidences.CoincidencesESD.search_coincidences", false]], "search_coincidences() (sapphire.kascade.kascadecoincidences method)": [[34, "sapphire.kascade.KascadeCoincidences.search_coincidences", false]], "seeds() (sapphire.corsika.corsika_queries.corsikaquery method)": [[19, "sapphire.corsika.corsika_queries.CorsikaQuery.seeds", false]], "seeds_in_queue() (in module sapphire.corsika.qsub_store_corsika_data)": [[23, "sapphire.corsika.qsub_store_corsika_data.seeds_in_queue", false]], "seeds_processed() (in module sapphire.corsika.qsub_store_corsika_data)": [[23, "sapphire.corsika.qsub_store_corsika_data.seeds_processed", false]], "select_newlist() (sapphire.analysis.core_reconstruction.averageintersectionalgorithm static method)": [[4, "sapphire.analysis.core_reconstruction.AverageIntersectionAlgorithm.select_newlist", false]], "select_simulation() (sapphire.simulations.groundparticles.multiplegroundparticlessimulation method)": [[42, "sapphire.simulations.groundparticles.MultipleGroundParticlesSimulation.select_simulation", false]], "selectbest() (sapphire.analysis.core_reconstruction.ellipsldfalgorithm static method)": [[4, "sapphire.analysis.core_reconstruction.EllipsLdfAlgorithm.selectbest", false]], "set_center_off_mass_at_origin() (sapphire.clusters.basecluster method)": [[15, "sapphire.clusters.BaseCluster.set_center_off_mass_at_origin", false]], "set_coordinates() (sapphire.clusters.basecluster method)": [[15, "sapphire.clusters.BaseCluster.set_coordinates", false]], "set_cylindrical_coordinates() (sapphire.clusters.basecluster method)": [[15, "sapphire.clusters.BaseCluster.set_cylindrical_coordinates", false]], "set_timestamp() (sapphire.clusters.basecluster method)": [[15, "sapphire.clusters.BaseCluster.set_timestamp", false]], "sexagesimal_to_decimal() (in module sapphire.transformations.base)": [[51, "sapphire.transformations.base.sexagesimal_to_decimal", false]], "simplecluster (class in sapphire.clusters)": [[15, "sapphire.clusters.SimpleCluster", false]], "simulate_adc_sampling() (sapphire.simulations.detector.errorlesssimulation class method)": [[40, "sapphire.simulations.detector.ErrorlessSimulation.simulate_adc_sampling", false]], "simulate_adc_sampling() (sapphire.simulations.detector.hisparcsimulation class method)": [[40, "sapphire.simulations.detector.HiSPARCSimulation.simulate_adc_sampling", false]], "simulate_all_detectors() (sapphire.simulations.base.basesimulation method)": [[39, "sapphire.simulations.base.BaseSimulation.simulate_all_detectors", false]], "simulate_and_store_offsets() (sapphire.simulations.detector.hisparcsimulation method)": [[40, "sapphire.simulations.detector.HiSPARCSimulation.simulate_and_store_offsets", false]], "simulate_detector_mips() (sapphire.simulations.detector.errorlesssimulation class method)": [[40, "sapphire.simulations.detector.ErrorlessSimulation.simulate_detector_mips", false]], "simulate_detector_mips() (sapphire.simulations.detector.hisparcsimulation class method)": [[40, "sapphire.simulations.detector.HiSPARCSimulation.simulate_detector_mips", false]], "simulate_detector_mips() (sapphire.simulations.groundparticles.particlecountersimulation method)": [[42, "sapphire.simulations.groundparticles.ParticleCounterSimulation.simulate_detector_mips", false]], "simulate_detector_mips_for_gammas() (sapphire.simulations.groundparticles.groundparticlesgammasimulation method)": [[42, "sapphire.simulations.groundparticles.GroundParticlesGammaSimulation.simulate_detector_mips_for_gammas", false]], "simulate_detector_mips_for_particles() (sapphire.simulations.groundparticles.groundparticlessimulation method)": [[42, "sapphire.simulations.groundparticles.GroundParticlesSimulation.simulate_detector_mips_for_particles", false]], "simulate_detector_mips_gammas() (in module sapphire.simulations.gammas)": [[41, "sapphire.simulations.gammas.simulate_detector_mips_gammas", false]], "simulate_detector_offset() (sapphire.simulations.detector.errorlesssimulation class method)": [[40, "sapphire.simulations.detector.ErrorlessSimulation.simulate_detector_offset", false]], "simulate_detector_offset() (sapphire.simulations.detector.hisparcsimulation class method)": [[40, "sapphire.simulations.detector.HiSPARCSimulation.simulate_detector_offset", false]], "simulate_detector_offsets() (sapphire.simulations.detector.errorlesssimulation class method)": [[40, "sapphire.simulations.detector.ErrorlessSimulation.simulate_detector_offsets", false]], "simulate_detector_offsets() (sapphire.simulations.detector.hisparcsimulation class method)": [[40, "sapphire.simulations.detector.HiSPARCSimulation.simulate_detector_offsets", false]], "simulate_detector_response() (sapphire.simulations.base.basesimulation method)": [[39, "sapphire.simulations.base.BaseSimulation.simulate_detector_response", false]], "simulate_detector_response() (sapphire.simulations.groundparticles.groundparticlesgammasimulation method)": [[42, "sapphire.simulations.groundparticles.GroundParticlesGammaSimulation.simulate_detector_response", false]], "simulate_detector_response() (sapphire.simulations.groundparticles.groundparticlessimulation method)": [[42, "sapphire.simulations.groundparticles.GroundParticlesSimulation.simulate_detector_response", false]], "simulate_detector_response() (sapphire.simulations.ldf.baseldfsimulation method)": [[43, "sapphire.simulations.ldf.BaseLdfSimulation.simulate_detector_response", false]], "simulate_detector_response() (sapphire.simulations.showerfront.flatfrontsimulation method)": [[44, "sapphire.simulations.showerfront.FlatFrontSimulation.simulate_detector_response", false]], "simulate_events_for_shower() (sapphire.simulations.base.basesimulation method)": [[39, "sapphire.simulations.base.BaseSimulation.simulate_events_for_shower", false]], "simulate_gps() (sapphire.simulations.base.basesimulation method)": [[39, "sapphire.simulations.base.BaseSimulation.simulate_gps", false]], "simulate_gps() (sapphire.simulations.groundparticles.groundparticlessimulation method)": [[42, "sapphire.simulations.groundparticles.GroundParticlesSimulation.simulate_gps", false]], "simulate_gps() (sapphire.simulations.showerfront.flatfrontsimulation method)": [[44, "sapphire.simulations.showerfront.FlatFrontSimulation.simulate_gps", false]], "simulate_gps_uncertainty() (sapphire.simulations.detector.errorlesssimulation class method)": [[40, "sapphire.simulations.detector.ErrorlessSimulation.simulate_gps_uncertainty", false]], "simulate_gps_uncertainty() (sapphire.simulations.detector.hisparcsimulation class method)": [[40, "sapphire.simulations.detector.HiSPARCSimulation.simulate_gps_uncertainty", false]], "simulate_particles_for_density() (sapphire.simulations.ldf.baseldfsimulation static method)": [[43, "sapphire.simulations.ldf.BaseLdfSimulation.simulate_particles_for_density", false]], "simulate_particles_for_density() (sapphire.simulations.ldf.baseldfsimulationwithouterrors static method)": [[43, "sapphire.simulations.ldf.BaseLdfSimulationWithoutErrors.simulate_particles_for_density", false]], "simulate_signal_transport_time() (sapphire.simulations.detector.errorlesssimulation class method)": [[40, "sapphire.simulations.detector.ErrorlessSimulation.simulate_signal_transport_time", false]], "simulate_signal_transport_time() (sapphire.simulations.detector.hisparcsimulation class method)": [[40, "sapphire.simulations.detector.HiSPARCSimulation.simulate_signal_transport_time", false]], "simulate_station_offset() (sapphire.simulations.detector.errorlesssimulation class method)": [[40, "sapphire.simulations.detector.ErrorlessSimulation.simulate_station_offset", false]], "simulate_station_offset() (sapphire.simulations.detector.hisparcsimulation class method)": [[40, "sapphire.simulations.detector.HiSPARCSimulation.simulate_station_offset", false]], "simulate_station_response() (sapphire.simulations.base.basesimulation method)": [[39, "sapphire.simulations.base.BaseSimulation.simulate_station_response", false]], "simulate_trigger() (sapphire.simulations.base.basesimulation method)": [[39, "sapphire.simulations.base.BaseSimulation.simulate_trigger", false]], "simulate_trigger() (sapphire.simulations.groundparticles.groundparticlessimulation method)": [[42, "sapphire.simulations.groundparticles.GroundParticlesSimulation.simulate_trigger", false]], "simulations() (sapphire.corsika.corsika_queries.corsikaquery method)": [[19, "sapphire.corsika.corsika_queries.CorsikaQuery.simulations", false]], "singledetectorstation (class in sapphire.clusters)": [[15, "sapphire.clusters.SingleDetectorStation", false]], "singlediamondstation (class in sapphire.clusters)": [[15, "sapphire.clusters.SingleDiamondStation", false]], "singlestation (class in sapphire.clusters)": [[15, "sapphire.clusters.SingleStation", false]], "singletwodetectorstation (class in sapphire.clusters)": [[15, "sapphire.clusters.SingleTwoDetectorStation", false]], "size (sapphire.storage.coincidence attribute)": [[45, "sapphire.storage.Coincidence.size", false]], "spherealgorithm (class in sapphire.analysis.direction_reconstruction)": [[5, "sapphire.analysis.direction_reconstruction.SphereAlgorithm", false]], "spherical_to_cartesian() (in module sapphire.transformations.axes)": [[50, "sapphire.transformations.axes.spherical_to_cartesian", false]], "src_urls (sapphire.api.api attribute)": [[14, "sapphire.api.API.src_urls", false]], "station (class in sapphire.api)": [[14, "sapphire.api.Station", false]], "station (class in sapphire.clusters)": [[15, "sapphire.clusters.Station", false]], "station_arrival_time() (in module sapphire.analysis.event_utils)": [[6, "sapphire.analysis.event_utils.station_arrival_time", false]], "station_density() (in module sapphire.analysis.event_utils)": [[6, "sapphire.analysis.event_utils.station_density", false]], "station_id (sapphire.storage.eventobservables attribute)": [[45, "sapphire.storage.EventObservables.station_id", false]], "station_layout() (sapphire.api.station method)": [[14, "sapphire.api.Station.station_layout", false]], "station_layouts (sapphire.api.station property)": [[14, "sapphire.api.Station.station_layouts", false]], "station_numbers() (sapphire.api.network method)": [[14, "sapphire.api.Network.station_numbers", false]], "station_timing_offset() (sapphire.api.station method)": [[14, "sapphire.api.Station.station_timing_offset", false]], "station_timing_offsets() (sapphire.api.station method)": [[14, "sapphire.api.Station.station_timing_offsets", false]], "stations (sapphire.clusters.basecluster property)": [[15, "sapphire.clusters.BaseCluster.stations", false]], "stations() (sapphire.api.network method)": [[14, "sapphire.api.Network.stations", false]], "stations_with_data() (sapphire.api.network method)": [[14, "sapphire.api.Network.stations_with_data", false]], "stations_with_weather() (sapphire.api.network method)": [[14, "sapphire.api.Network.stations_with_weather", false]], "std_dev (sapphire.analysis.process_traces.traceobservables property)": [[10, "sapphire.analysis.process_traces.TraceObservables.std_dev", false]], "store_and_sort_corsika_data() (in module sapphire.corsika.store_corsika_data)": [[25, "sapphire.corsika.store_corsika_data.store_and_sort_corsika_data", false]], "store_coincidence() (sapphire.simulations.base.basesimulation method)": [[39, "sapphire.simulations.base.BaseSimulation.store_coincidence", false]], "store_coincidences() (sapphire.analysis.coincidences.coincidences method)": [[3, "sapphire.analysis.coincidences.Coincidences.store_coincidences", false]], "store_coincidences() (sapphire.analysis.coincidences.coincidencesesd method)": [[3, "sapphire.analysis.coincidences.CoincidencesESD.store_coincidences", false]], "store_coincidences() (sapphire.kascade.kascadecoincidences method)": [[34, "sapphire.kascade.KascadeCoincidences.store_coincidences", false]], "store_command() (in module sapphire.corsika.qsub_store_corsika_data)": [[23, "sapphire.corsika.qsub_store_corsika_data.store_command", false]], "store_corsika_data() (in module sapphire.corsika.store_corsika_data)": [[25, "sapphire.corsika.store_corsika_data.store_corsika_data", false]], "store_line() (sapphire.esd.readlineandstoreeventclass method)": [[30, "sapphire.esd.ReadLineAndStoreEventClass.store_line", false]], "store_line() (sapphire.esd.readlineandstorelightningclass method)": [[30, "sapphire.esd.ReadLineAndStoreLightningClass.store_line", false]], "store_line() (sapphire.esd.readlineandstoresinglesclass method)": [[30, "sapphire.esd.ReadLineAndStoreSinglesClass.store_line", false]], "store_line() (sapphire.esd.readlineandstoreweatherclass method)": [[30, "sapphire.esd.ReadLineAndStoreWeatherClass.store_line", false]], "store_offsets() (sapphire.analysis.reconstructions.reconstructesdevents method)": [[11, "sapphire.analysis.reconstructions.ReconstructESDEvents.store_offsets", false]], "store_reconstructions() (sapphire.analysis.reconstructions.reconstructesdcoincidences method)": [[11, "sapphire.analysis.reconstructions.ReconstructESDCoincidences.store_reconstructions", false]], "store_reconstructions() (sapphire.analysis.reconstructions.reconstructesdevents method)": [[11, "sapphire.analysis.reconstructions.ReconstructESDEvents.store_reconstructions", false]], "store_station_observables() (sapphire.simulations.base.basesimulation method)": [[39, "sapphire.simulations.base.BaseSimulation.store_station_observables", false]], "store_time_deltas() (sapphire.analysis.time_deltas.processtimedeltas method)": [[13, "sapphire.analysis.time_deltas.ProcessTimeDeltas.store_time_deltas", false]], "storekascadedata (class in sapphire.kascade)": [[34, "sapphire.kascade.StoreKascadeData", false]], "subcluster() (sapphire.api.station method)": [[14, "sapphire.api.Station.subcluster", false]], "subcluster_numbers() (sapphire.api.network method)": [[14, "sapphire.api.Network.subcluster_numbers", false]], "subclusters() (sapphire.api.network method)": [[14, "sapphire.api.Network.subclusters", false]], "submit_job() (in module sapphire.qsub)": [[36, "sapphire.qsub.submit_job", false]], "submit_job() (sapphire.corsika.qsub_corsika.corsikabatch method)": [[22, "sapphire.corsika.qsub_corsika.CorsikaBatch.submit_job", false]], "table_name (sapphire.analysis.process_events.processdatatable attribute)": [[9, "sapphire.analysis.process_events.ProcessDataTable.table_name", false]], "table_name (sapphire.analysis.process_events.processsingles attribute)": [[9, "sapphire.analysis.process_events.ProcessSingles.table_name", false]], "table_name (sapphire.analysis.process_events.processsinglesfromsource attribute)": [[9, "sapphire.analysis.process_events.ProcessSinglesFromSource.table_name", false]], "table_name (sapphire.analysis.process_events.processweather attribute)": [[9, "sapphire.analysis.process_events.ProcessWeather.table_name", false]], "table_name (sapphire.analysis.process_events.processweatherfromsource attribute)": [[9, "sapphire.analysis.process_events.ProcessWeatherFromSource.table_name", false]], "taken_seeds() (sapphire.corsika.qsub_corsika.corsikabatch method)": [[22, "sapphire.corsika.qsub_corsika.CorsikaBatch.taken_seeds", false]], "temperature() (sapphire.api.station method)": [[14, "sapphire.api.Station.temperature", false]], "thickness (sapphire.analysis.landau.scintillator attribute)": [[8, "sapphire.analysis.landau.Scintillator.thickness", false]], "thickness_to_height() (sapphire.corsika.blocks.runheader method)": [[18, "sapphire.corsika.blocks.RunHeader.thickness_to_height", false]], "time_delay() (sapphire.analysis.direction_reconstruction.curvedmixin method)": [[5, "sapphire.analysis.direction_reconstruction.CurvedMixin.time_delay", false]], "time_to_decimal() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.time_to_decimal", false]], "timedelta (class in sapphire.storage)": [[45, "sapphire.storage.TimeDelta", false]], "timerange() (sapphire.analysis.coincidence_queries.coincidencequery method)": [[2, "sapphire.analysis.coincidence_queries.CoincidenceQuery.timerange", false]], "traceobservables (class in sapphire.analysis.process_traces)": [[10, "sapphire.analysis.process_traces.TraceObservables", false]], "transform() (sapphire.transformations.geographic.fromwgs84toenutransformation method)": [[54, "sapphire.transformations.geographic.FromWGS84ToENUTransformation.transform", false]], "trigger (in module sapphire.analysis.process_traces)": [[10, "sapphire.analysis.process_traces.TRIGGER", false]], "trigger() (sapphire.api.station method)": [[14, "sapphire.api.Station.trigger", false]], "trigger_2 (in module sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.TRIGGER_2", false]], "trigger_4 (in module sapphire.analysis.process_events)": [[9, "sapphire.analysis.process_events.TRIGGER_4", false]], "triggers (sapphire.api.station property)": [[14, "sapphire.api.Station.triggers", false]], "update_additional_local_tsv() (in module sapphire.data.extend_local_data)": [[28, "sapphire.data.extend_local_data.update_additional_local_tsv", false]], "update_local_json() (in module sapphire.data.update_local_data)": [[29, "sapphire.data.update_local_data.update_local_json", false]], "update_local_tsv() (in module sapphire.data.update_local_data)": [[29, "sapphire.data.update_local_data.update_local_tsv", false]], "update_sublevel_json() (in module sapphire.data.update_local_data)": [[29, "sapphire.data.update_local_data.update_sublevel_json", false]], "update_sublevel_tsv() (in module sapphire.data.update_local_data)": [[29, "sapphire.data.update_local_data.update_sublevel_tsv", false]], "update_subsublevel_tsv() (in module sapphire.data.update_local_data)": [[29, "sapphire.data.update_local_data.update_subsublevel_tsv", false]], "update_toplevel_json() (in module sapphire.data.update_local_data)": [[29, "sapphire.data.update_local_data.update_toplevel_json", false]], "uptime() (sapphire.api.network method)": [[14, "sapphire.api.Network.uptime", false]], "urls (sapphire.api.api attribute)": [[14, "sapphire.api.API.urls", false]], "utc_from_string() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.utc_from_string", false]], "utc_to_gmst() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.utc_to_gmst", false]], "utc_to_gps() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.utc_to_gps", false]], "utc_to_lst() (in module sapphire.transformations.clock)": [[53, "sapphire.transformations.clock.utc_to_lst", false]], "validate_numbers() (sapphire.api.network static method)": [[14, "sapphire.api.Network.validate_numbers", false]], "validate_partial_date() (sapphire.api.api static method)": [[14, "sapphire.api.API.validate_partial_date", false]], "vector_length() (in module sapphire.utils)": [[56, "sapphire.utils.vector_length", false]], "voltage() (sapphire.api.station method)": [[14, "sapphire.api.Station.voltage", false]], "voltages (sapphire.api.station property)": [[14, "sapphire.api.Station.voltages", false]], "warning_only_three() (in module sapphire.analysis.direction_reconstruction)": [[5, "sapphire.analysis.direction_reconstruction.warning_only_three", false]], "wgs84datum (class in sapphire.transformations.geographic)": [[54, "sapphire.transformations.geographic.WGS84Datum", false]], "which() (in module sapphire.utils)": [[56, "sapphire.utils.which", false]], "write_queued_seeds() (in module sapphire.corsika.qsub_store_corsika_data)": [[23, "sapphire.corsika.qsub_store_corsika_data.write_queued_seeds", false]], "write_row() (in module sapphire.corsika.generate_corsika_overview)": [[20, "sapphire.corsika.generate_corsika_overview.write_row", false]], "x (sapphire.storage.coincidence attribute)": [[45, "sapphire.storage.Coincidence.x", false]], "xi (sapphire.analysis.landau.scintillator attribute)": [[8, "sapphire.analysis.landau.Scintillator.xi", false]], "xy_circle_linear() (in module sapphire.analysis.signal_calibration)": [[12, "sapphire.analysis.signal_calibration.xy_circle_linear", false]], "y (sapphire.storage.coincidence attribute)": [[45, "sapphire.storage.Coincidence.y", false]], "zenith (sapphire.storage.coincidence attribute)": [[45, "sapphire.storage.Coincidence.zenith", false]], "zenith() (sapphire.api.station method)": [[14, "sapphire.api.Station.zenith", false]], "zenithazimuth_to_equatorial() (in module sapphire.transformations.celestial)": [[52, "sapphire.transformations.celestial.zenithazimuth_to_equatorial", false]], "zenithazimuth_to_equatorial_astropy() (in module sapphire.transformations.celestial)": [[52, "sapphire.transformations.celestial.zenithazimuth_to_equatorial_astropy", false]], "zenithazimuth_to_horizontal() (in module sapphire.transformations.celestial)": [[52, "sapphire.transformations.celestial.zenithazimuth_to_horizontal", false]]}, "objects": {"": [[37, 0, 0, "-", "sapphire"]], "sapphire": [[0, 0, 0, "-", "analysis"], [14, 0, 0, "-", "api"], [15, 0, 0, "-", "clusters"], [17, 0, 0, "-", "corsika"], [27, 0, 0, "-", "data"], [30, 0, 0, "-", "esd"], [34, 0, 0, "-", "kascade"], [35, 0, 0, "-", "publicdb"], [36, 0, 0, "-", "qsub"], [38, 0, 0, "-", "simulations"], [45, 0, 0, "-", "storage"], [46, 0, 0, "-", "tests"], [47, 0, 0, "-", "time_util"], [48, 0, 0, "-", "transformations"], [56, 0, 0, "-", "utils"]], "sapphire.analysis": [[1, 0, 0, "-", "calibration"], [2, 0, 0, "-", "coincidence_queries"], [3, 0, 0, "-", "coincidences"], [4, 0, 0, "-", "core_reconstruction"], [5, 0, 0, "-", "direction_reconstruction"], [6, 0, 0, "-", "event_utils"], [7, 0, 0, "-", "find_mpv"], [8, 0, 0, "-", "landau"], [9, 0, 0, "-", "process_events"], [10, 0, 0, "-", "process_traces"], [11, 0, 0, "-", "reconstructions"], [12, 0, 0, "-", "signal_calibration"], [13, 0, 0, "-", "time_deltas"]], "sapphire.analysis.calibration": [[1, 1, 1, "", "DetermineStationTimingOffsets"], [1, 4, 1, "", "datetime_range"], [1, 4, 1, "", "determine_best_reference"], [1, 4, 1, "", "determine_detector_timing_offset"], [1, 4, 1, "", "determine_detector_timing_offsets"], [1, 4, 1, "", "determine_station_timing_offset"], [1, 4, 1, "", "fit_timing_offset"], [1, 4, 1, "", "pairwise"]], "sapphire.analysis.calibration.DetermineStationTimingOffsets": [[1, 2, 1, "", "MAX_DISTANCE"], [1, 2, 1, "", "MIN_LEN_DT"], [1, 3, 1, "", "determine_first_and_last_date"], [1, 3, 1, "", "determine_station_timing_offset"], [1, 3, 1, "", "determine_station_timing_offsets"], [1, 3, 1, "", "determine_station_timing_offsets_for_date"], [1, 3, 1, "", "get_station_pairs_within_max_distance"], [1, 3, 1, "", "read_dt"]], "sapphire.analysis.coincidence_queries": [[2, 1, 1, "", "CoincidenceQuery"]], "sapphire.analysis.coincidence_queries.CoincidenceQuery": [[2, 3, 1, "", "all"], [2, 3, 1, "", "all_coincidences"], [2, 3, 1, "", "all_events"], [2, 3, 1, "", "all_reconstructions"], [2, 3, 1, "", "any"], [2, 3, 1, "", "at_least"], [2, 3, 1, "", "events_from_stations"], [2, 3, 1, "", "events_in_cluster"], [2, 3, 1, "", "events_in_subcluster"], [2, 3, 1, "", "finish"], [2, 3, 1, "", "minimum_events_for_coincidence"], [2, 3, 1, "", "perform_query"], [2, 3, 1, "", "reconstructions_from_stations"], [2, 3, 1, "", "timerange"]], "sapphire.analysis.coincidences": [[3, 1, 1, "", "Coincidences"], [3, 1, 1, "", "CoincidencesESD"], [3, 4, 1, "", "get_events"]], "sapphire.analysis.coincidences.Coincidences": [[3, 3, 1, "", "process_events"], [3, 3, 1, "", "search_and_store_coincidences"], [3, 3, 1, "", "search_coincidences"], [3, 3, 1, "", "store_coincidences"]], "sapphire.analysis.coincidences.CoincidencesESD": [[3, 3, 1, "", "search_and_store_coincidences"], [3, 3, 1, "", "search_coincidences"], [3, 3, 1, "", "store_coincidences"]], "sapphire.analysis.core_reconstruction": [[4, 1, 1, "", "AverageIntersectionAlgorithm"], [4, 1, 1, "", "BaseCoreAlgorithm"], [4, 1, 1, "", "CenterMassAlgorithm"], [4, 1, 1, "", "CoincidenceCoreReconstruction"], [4, 1, 1, "", "CoincidenceCoreReconstructionDetectors"], [4, 1, 1, "", "EllipsLdfAlgorithm"], [4, 1, 1, "", "EventCoreReconstruction"]], "sapphire.analysis.core_reconstruction.AverageIntersectionAlgorithm": [[4, 3, 1, "", "reconstruct_common"], [4, 3, 1, "", "select_newlist"]], "sapphire.analysis.core_reconstruction.BaseCoreAlgorithm": [[4, 3, 1, "", "reconstruct"], [4, 3, 1, "", "reconstruct_common"]], "sapphire.analysis.core_reconstruction.CenterMassAlgorithm": [[4, 3, 1, "", "reconstruct"], [4, 3, 1, "", "reconstruct_common"]], "sapphire.analysis.core_reconstruction.CoincidenceCoreReconstruction": [[4, 3, 1, "", "reconstruct_coincidence"], [4, 3, 1, "", "reconstruct_coincidences"]], "sapphire.analysis.core_reconstruction.CoincidenceCoreReconstructionDetectors": [[4, 3, 1, "", "reconstruct_coincidence"]], "sapphire.analysis.core_reconstruction.EllipsLdfAlgorithm": [[4, 3, 1, "", "reconstruct"], [4, 3, 1, "", "reconstruct_common"], [4, 3, 1, "", "selectbest"]], "sapphire.analysis.core_reconstruction.EventCoreReconstruction": [[4, 3, 1, "", "reconstruct_event"], [4, 3, 1, "", "reconstruct_events"]], "sapphire.analysis.direction_reconstruction": [[5, 1, 1, "", "BaseDirectionAlgorithm"], [5, 1, 1, "", "CoincidenceDirectionReconstruction"], [5, 1, 1, "", "CoincidenceDirectionReconstructionDetectors"], [5, 1, 1, "", "CurvedMixin"], [5, 1, 1, "", "CurvedRegressionAlgorithm"], [5, 1, 1, "", "CurvedRegressionAlgorithm3D"], [5, 1, 1, "", "DirectAlgorithm"], [5, 1, 1, "", "DirectAlgorithmCartesian"], [5, 1, 1, "", "DirectAlgorithmCartesian3D"], [5, 1, 1, "", "EventDirectionReconstruction"], [5, 1, 1, "", "FitAlgorithm3D"], [5, 1, 1, "", "RegressionAlgorithm"], [5, 1, 1, "", "RegressionAlgorithm3D"], [5, 1, 1, "", "SphereAlgorithm"], [5, 4, 1, "", "logic_checks"], [5, 4, 1, "", "warning_only_three"]], "sapphire.analysis.direction_reconstruction.BaseDirectionAlgorithm": [[5, 3, 1, "", "reconstruct"], [5, 3, 1, "", "reconstruct_common"]], "sapphire.analysis.direction_reconstruction.CoincidenceDirectionReconstruction": [[5, 3, 1, "", "determine_best_offsets"], [5, 3, 1, "", "determine_best_reference"], [5, 3, 1, "", "get_station_offsets"], [5, 3, 1, "", "reconstruct_coincidence"], [5, 3, 1, "", "reconstruct_coincidences"]], "sapphire.analysis.direction_reconstruction.CoincidenceDirectionReconstructionDetectors": [[5, 3, 1, "", "reconstruct_coincidence"]], "sapphire.analysis.direction_reconstruction.CurvedMixin": [[5, 3, 1, "", "radial_core_distance"], [5, 3, 1, "", "time_delay"]], "sapphire.analysis.direction_reconstruction.CurvedRegressionAlgorithm": [[5, 2, 1, "", "MAX_ITERATIONS"], [5, 3, 1, "", "reconstruct"], [5, 3, 1, "", "reconstruct_common"]], "sapphire.analysis.direction_reconstruction.CurvedRegressionAlgorithm3D": [[5, 2, 1, "", "MAX_ITERATIONS"], [5, 3, 1, "", "reconstruct"], [5, 3, 1, "", "reconstruct_common"]], "sapphire.analysis.direction_reconstruction.DirectAlgorithm": [[5, 3, 1, "", "dphi_dt0"], [5, 3, 1, "", "dphi_dt1"], [5, 3, 1, "", "dphi_dt2"], [5, 3, 1, "", "reconstruct"], [5, 3, 1, "", "reconstruct_common"], [5, 3, 1, "", "rel_phi_errorsq"], [5, 3, 1, "", "rel_theta1_errorsq"], [5, 3, 1, "", "rel_theta2_errorsq"]], "sapphire.analysis.direction_reconstruction.DirectAlgorithmCartesian": [[5, 3, 1, "", "reconstruct"], [5, 3, 1, "", "reconstruct_common"]], "sapphire.analysis.direction_reconstruction.DirectAlgorithmCartesian3D": [[5, 3, 1, "", "reconstruct"], [5, 3, 1, "", "reconstruct_common"]], "sapphire.analysis.direction_reconstruction.EventDirectionReconstruction": [[5, 3, 1, "", "reconstruct_event"], [5, 3, 1, "", "reconstruct_events"]], "sapphire.analysis.direction_reconstruction.FitAlgorithm3D": [[5, 3, 1, "", "best_fit"], [5, 3, 1, "", "constraint_normal_vector"], [5, 3, 1, "", "reconstruct"], [5, 3, 1, "", "reconstruct_common"]], "sapphire.analysis.direction_reconstruction.RegressionAlgorithm": [[5, 3, 1, "", "reconstruct"], [5, 3, 1, "", "reconstruct_common"]], "sapphire.analysis.direction_reconstruction.RegressionAlgorithm3D": [[5, 2, 1, "", "MAX_ITERATIONS"], [5, 3, 1, "", "reconstruct"], [5, 3, 1, "", "reconstruct_common"]], "sapphire.analysis.direction_reconstruction.SphereAlgorithm": [[5, 3, 1, "", "interaction_curve"], [5, 3, 1, "", "reconstruct_equatorial"]], "sapphire.analysis.event_utils": [[6, 4, 1, "", "detector_arrival_time"], [6, 4, 1, "", "detector_arrival_times"], [6, 4, 1, "", "detector_densities"], [6, 4, 1, "", "detector_density"], [6, 4, 1, "", "get_detector_ids"], [6, 4, 1, "", "relative_detector_arrival_times"], [6, 4, 1, "", "station_arrival_time"], [6, 4, 1, "", "station_density"]], "sapphire.analysis.find_mpv": [[7, 1, 1, "", "FindMostProbableValueInSpectrum"]], "sapphire.analysis.find_mpv.FindMostProbableValueInSpectrum": [[7, 3, 1, "", "find_first_guess_mpv"], [7, 3, 1, "", "find_mpv"], [7, 3, 1, "", "fit_mpv"]], "sapphire.analysis.landau": [[8, 1, 1, "", "Scintillator"], [8, 4, 1, "", "discrete_convolution"], [8, 4, 1, "", "pdf_kernel"], [8, 4, 1, "", "pdf_kernel2"]], "sapphire.analysis.landau.Scintillator": [[8, 2, 1, "", "Euler"], [8, 3, 1, "", "constrained_residuals"], [8, 3, 1, "", "conv_landau"], [8, 3, 1, "", "conv_landau_for_x"], [8, 2, 1, "", "delta"], [8, 2, 1, "", "epsilon"], [8, 2, 1, "", "full_domain"], [8, 2, 1, "", "gauss_scale"], [8, 3, 1, "", "landau_pdf"], [8, 3, 1, "", "lf"], [8, 2, 1, "", "mev_scale"], [8, 3, 1, "", "pdf"], [8, 2, 1, "", "pdf_domain"], [8, 2, 1, "", "pdf_values"], [8, 3, 1, "", "residuals"], [8, 2, 1, "", "thickness"], [8, 2, 1, "", "xi"]], "sapphire.analysis.process_events": [[9, 5, 1, "", "ADC_THRESHOLD"], [9, 1, 1, "", "ProcessDataTable"], [9, 1, 1, "", "ProcessDataTableFromSource"], [9, 1, 1, "", "ProcessEvents"], [9, 1, 1, "", "ProcessEventsFromSource"], [9, 1, 1, "", "ProcessEventsFromSourceWithTriggerOffset"], [9, 1, 1, "", "ProcessEventsWithLINT"], [9, 1, 1, "", "ProcessEventsWithTriggerOffset"], [9, 1, 1, "", "ProcessEventsWithoutTraces"], [9, 1, 1, "", "ProcessIndexedEvents"], [9, 1, 1, "", "ProcessIndexedEventsWithLINT"], [9, 1, 1, "", "ProcessIndexedEventsWithoutTraces"], [9, 1, 1, "", "ProcessSingles"], [9, 1, 1, "", "ProcessSinglesFromSource"], [9, 1, 1, "", "ProcessWeather"], [9, 1, 1, "", "ProcessWeatherFromSource"], [9, 5, 1, "", "TRIGGER_2"], [9, 5, 1, "", "TRIGGER_4"]], "sapphire.analysis.process_events.ProcessDataTable": [[9, 3, 1, "", "process_and_store_results"], [9, 2, 1, "", "table_name"]], "sapphire.analysis.process_events.ProcessEvents": [[9, 3, 1, "", "first_above_threshold"], [9, 3, 1, "", "get_traces_for_event"], [9, 3, 1, "", "get_traces_for_event_index"], [9, 3, 1, "", "process_and_store_results"], [9, 3, 1, "", "process_traces"], [9, 2, 1, "", "processed_events_description"]], "sapphire.analysis.process_events.ProcessIndexedEvents": [[9, 3, 1, "", "get_traces_for_indexed_event_index"], [9, 3, 1, "", "process_traces"]], "sapphire.analysis.process_events.ProcessSingles": [[9, 2, 1, "", "table_name"]], "sapphire.analysis.process_events.ProcessSinglesFromSource": [[9, 2, 1, "", "table_name"]], "sapphire.analysis.process_events.ProcessWeather": [[9, 2, 1, "", "table_name"]], "sapphire.analysis.process_events.ProcessWeatherFromSource": [[9, 2, 1, "", "table_name"]], "sapphire.analysis.process_traces": [[10, 5, 1, "", "ADC_BASELINE_THRESHOLD"], [10, 5, 1, "", "ADC_FILTER_THRESHOLD"], [10, 5, 1, "", "ADC_HIGH_THRESHOLD"], [10, 5, 1, "", "ADC_HIGH_THRESHOLD_III"], [10, 5, 1, "", "ADC_LOW_THRESHOLD"], [10, 5, 1, "", "ADC_LOW_THRESHOLD_III"], [10, 5, 1, "", "DATA_REDUCTION_PADDING"], [10, 1, 1, "", "DataReduction"], [10, 1, 1, "", "MeanFilter"], [10, 5, 1, "", "POST_TRIGGER"], [10, 5, 1, "", "PRE_TRIGGER"], [10, 5, 1, "", "TRIGGER"], [10, 1, 1, "", "TraceObservables"]], "sapphire.analysis.process_traces.DataReduction": [[10, 3, 1, "", "add_padding"], [10, 3, 1, "", "determine_cuts"], [10, 3, 1, "", "reduce_traces"]], "sapphire.analysis.process_traces.MeanFilter": [[10, 3, 1, "", "filter_trace"], [10, 3, 1, "", "filter_traces"], [10, 3, 1, "", "mean_filter_with_threshold"], [10, 3, 1, "", "mean_filter_without_threshold"]], "sapphire.analysis.process_traces.TraceObservables": [[10, 6, 1, "", "baselines"], [10, 6, 1, "", "integrals"], [10, 6, 1, "", "n_peaks"], [10, 6, 1, "", "pulseheights"], [10, 6, 1, "", "std_dev"]], "sapphire.analysis.reconstructions": [[11, 1, 1, "", "ReconstructESDCoincidences"], [11, 1, 1, "", "ReconstructESDCoincidencesFromSource"], [11, 1, 1, "", "ReconstructESDEvents"], [11, 1, 1, "", "ReconstructESDEventsFromSource"], [11, 1, 1, "", "ReconstructSimulatedCoincidences"], [11, 1, 1, "", "ReconstructSimulatedEvents"]], "sapphire.analysis.reconstructions.ReconstructESDCoincidences": [[11, 3, 1, "", "get_station_timing_offsets"], [11, 3, 1, "", "prepare_output"], [11, 3, 1, "", "reconstruct_and_store"], [11, 3, 1, "", "reconstruct_cores"], [11, 3, 1, "", "reconstruct_directions"], [11, 3, 1, "", "store_reconstructions"]], "sapphire.analysis.reconstructions.ReconstructESDCoincidencesFromSource": [[11, 3, 1, "", "prepare_output"]], "sapphire.analysis.reconstructions.ReconstructESDEvents": [[11, 3, 1, "", "get_detector_offsets"], [11, 3, 1, "", "prepare_output"], [11, 3, 1, "", "reconstruct_and_store"], [11, 3, 1, "", "reconstruct_cores"], [11, 3, 1, "", "reconstruct_directions"], [11, 3, 1, "", "store_offsets"], [11, 3, 1, "", "store_reconstructions"]], "sapphire.analysis.reconstructions.ReconstructESDEventsFromSource": [[11, 3, 1, "", "prepare_output"]], "sapphire.analysis.signal_calibration": [[12, 4, 1, "", "inverse_linear"], [12, 4, 1, "", "linear"], [12, 4, 1, "", "linear_circle_linear"], [12, 4, 1, "", "linear_intersection"], [12, 4, 1, "", "log_linear"], [12, 4, 1, "", "loglog_linear_circle_linear"], [12, 4, 1, "", "loglog_xy_circle_linear"], [12, 4, 1, "", "xy_circle_linear"]], "sapphire.analysis.time_deltas": [[13, 1, 1, "", "ProcessTimeDeltas"]], "sapphire.analysis.time_deltas.ProcessTimeDeltas": [[13, 3, 1, "", "determine_and_store_time_deltas"], [13, 3, 1, "", "determine_and_store_time_deltas_for_pairs"], [13, 3, 1, "", "determine_time_deltas_for_pair"], [13, 3, 1, "", "find_station_pairs"], [13, 3, 1, "", "get_detector_offsets"], [13, 3, 1, "", "store_time_deltas"]], "sapphire.api": [[14, 1, 1, "", "API"], [14, 1, 1, "", "Network"], [14, 1, 1, "", "Station"], [14, 4, 1, "", "get_api_base"], [14, 4, 1, "", "get_src_base"]], "sapphire.api.API": [[14, 3, 1, "", "check_connection"], [14, 2, 1, "", "src_urls"], [14, 2, 1, "", "urls"], [14, 3, 1, "", "validate_partial_date"]], "sapphire.api.Network": [[14, 3, 1, "", "cluster_numbers"], [14, 3, 1, "", "clusters"], [14, 3, 1, "", "coincidence_number"], [14, 3, 1, "", "coincidence_time"], [14, 3, 1, "", "countries"], [14, 3, 1, "", "country_numbers"], [14, 3, 1, "", "nested_network"], [14, 3, 1, "", "station_numbers"], [14, 3, 1, "", "stations"], [14, 3, 1, "", "stations_with_data"], [14, 3, 1, "", "stations_with_weather"], [14, 3, 1, "", "subcluster_numbers"], [14, 3, 1, "", "subclusters"], [14, 3, 1, "", "uptime"], [14, 3, 1, "", "validate_numbers"]], "sapphire.api.Station": [[14, 3, 1, "", "azimuth"], [14, 3, 1, "", "barometer"], [14, 3, 1, "", "cluster"], [14, 3, 1, "", "config"], [14, 3, 1, "", "country"], [14, 3, 1, "", "current"], [14, 6, 1, "", "currents"], [14, 3, 1, "", "detector_timing_offset"], [14, 6, 1, "", "detector_timing_offsets"], [14, 3, 1, "", "electronic"], [14, 6, 1, "", "electronics"], [14, 3, 1, "", "event_time"], [14, 3, 1, "", "event_trace"], [14, 3, 1, "", "gps_location"], [14, 6, 1, "", "gps_locations"], [14, 3, 1, "", "has_data"], [14, 3, 1, "", "has_weather"], [14, 6, 1, "", "info"], [14, 3, 1, "", "n_detectors"], [14, 3, 1, "", "n_events"], [14, 3, 1, "", "pulse_height"], [14, 3, 1, "", "pulse_integral"], [14, 3, 1, "", "station_layout"], [14, 6, 1, "", "station_layouts"], [14, 3, 1, "", "station_timing_offset"], [14, 3, 1, "", "station_timing_offsets"], [14, 3, 1, "", "subcluster"], [14, 3, 1, "", "temperature"], [14, 3, 1, "", "trigger"], [14, 6, 1, "", "triggers"], [14, 3, 1, "", "voltage"], [14, 6, 1, "", "voltages"], [14, 3, 1, "", "zenith"]], "sapphire.clusters": [[15, 1, 1, "", "BaseCluster"], [15, 1, 1, "", "CompassStations"], [15, 1, 1, "", "Detector"], [15, 1, 1, "", "HiSPARCNetwork"], [15, 1, 1, "", "HiSPARCStations"], [15, 1, 1, "", "ScienceParkCluster"], [15, 1, 1, "", "SimpleCluster"], [15, 1, 1, "", "SingleDetectorStation"], [15, 1, 1, "", "SingleDiamondStation"], [15, 1, 1, "", "SingleStation"], [15, 1, 1, "", "SingleTwoDetectorStation"], [15, 1, 1, "", "Station"], [15, 4, 1, "", "flatten_cluster"]], "sapphire.clusters.BaseCluster": [[15, 3, 1, "", "calc_center_of_mass_coordinates"], [15, 3, 1, "", "calc_distance_between_stations"], [15, 3, 1, "", "calc_horizontal_distance_between_stations"], [15, 3, 1, "", "calc_rphiz_for_stations"], [15, 3, 1, "", "calc_xy_center_of_mass_coordinates"], [15, 3, 1, "", "get_coordinates"], [15, 3, 1, "", "get_cylindrical_alpha_coordinates"], [15, 3, 1, "", "get_lla_coordinates"], [15, 3, 1, "", "get_polar_alpha_coordinates"], [15, 3, 1, "", "get_station"], [15, 3, 1, "", "get_xy_coordinates"], [15, 3, 1, "", "get_xyalpha_coordinates"], [15, 3, 1, "", "set_center_off_mass_at_origin"], [15, 3, 1, "", "set_coordinates"], [15, 3, 1, "", "set_cylindrical_coordinates"], [15, 3, 1, "", "set_timestamp"], [15, 6, 1, "", "stations"]], "sapphire.clusters.Detector": [[15, 6, 1, "", "detector_size"], [15, 3, 1, "", "get_area"], [15, 3, 1, "", "get_coordinates"], [15, 3, 1, "", "get_corners"], [15, 3, 1, "", "get_cylindrical_coordinates"], [15, 3, 1, "", "get_lla_coordinates"], [15, 3, 1, "", "get_polar_coordinates"], [15, 3, 1, "", "get_xy_coordinates"]], "sapphire.clusters.Station": [[15, 3, 1, "", "calc_center_of_mass_coordinates"], [15, 3, 1, "", "calc_r_and_phi_for_detectors"], [15, 3, 1, "", "calc_rphiz_for_detectors"], [15, 3, 1, "", "calc_xy_center_of_mass_coordinates"], [15, 6, 1, "", "detectors"], [15, 3, 1, "", "get_area"], [15, 3, 1, "", "get_coordinates"], [15, 3, 1, "", "get_cylindrical_alpha_coordinates"], [15, 3, 1, "", "get_lla_coordinates"], [15, 3, 1, "", "get_polar_alpha_coordinates"], [15, 3, 1, "", "get_xy_coordinates"], [15, 3, 1, "", "get_xyalpha_coordinates"]], "sapphire.corsika": [[18, 0, 0, "-", "blocks"], [19, 0, 0, "-", "corsika_queries"], [20, 0, 0, "-", "generate_corsika_overview"], [21, 0, 0, "-", "particles"], [22, 0, 0, "-", "qsub_corsika"], [23, 0, 0, "-", "qsub_store_corsika_data"], [24, 0, 0, "-", "reader"], [25, 0, 0, "-", "store_corsika_data"], [26, 0, 0, "-", "units"]], "sapphire.corsika.blocks": [[18, 1, 1, "", "CherenkovData"], [18, 1, 1, "", "CherenkovDataThin"], [18, 1, 1, "", "EventEnd"], [18, 1, 1, "", "EventHeader"], [18, 1, 1, "", "Format"], [18, 1, 1, "", "FormatThin"], [18, 1, 1, "", "ParticleData"], [18, 1, 1, "", "ParticleDataThin"], [18, 1, 1, "", "RunEnd"], [18, 1, 1, "", "RunHeader"], [18, 4, 1, "", "jit"], [18, 4, 1, "", "particle_data"], [18, 4, 1, "", "particle_data_thin"]], "sapphire.corsika.blocks.EventHeader": [[18, 6, 1, "", "computer"], [18, 6, 1, "", "hadron_model_high"], [18, 6, 1, "", "hadron_model_low"]], "sapphire.corsika.blocks.ParticleData": [[18, 6, 1, "", "atom"], [18, 6, 1, "", "atomic_number"], [18, 6, 1, "", "is_cherenkov"], [18, 6, 1, "", "is_detectable"], [18, 6, 1, "", "is_nucleus"], [18, 6, 1, "", "is_particle"], [18, 6, 1, "", "particle"]], "sapphire.corsika.blocks.RunHeader": [[18, 3, 1, "", "height_to_thickness"], [18, 3, 1, "", "thickness_to_height"]], "sapphire.corsika.corsika_queries": [[19, 1, 1, "", "CorsikaQuery"]], "sapphire.corsika.corsika_queries.CorsikaQuery": [[19, 6, 1, "", "all_azimuths"], [19, 6, 1, "", "all_energies"], [19, 6, 1, "", "all_particles"], [19, 3, 1, "", "all_simulations"], [19, 6, 1, "", "all_zeniths"], [19, 3, 1, "", "available_parameters"], [19, 3, 1, "", "filter"], [19, 3, 1, "", "finish"], [19, 3, 1, "", "float_filter"], [19, 3, 1, "", "get_info"], [19, 3, 1, "", "perform_query"], [19, 3, 1, "", "range_filter"], [19, 3, 1, "", "seeds"], [19, 3, 1, "", "simulations"]], "sapphire.corsika.generate_corsika_overview": [[20, 4, 1, "", "all_seeds"], [20, 4, 1, "", "create_tempfile_path"], [20, 4, 1, "", "generate_corsika_overview"], [20, 4, 1, "", "get_simulations"], [20, 4, 1, "", "main"], [20, 4, 1, "", "move_tempfile_to_destination"], [20, 4, 1, "", "prepare_output"], [20, 4, 1, "", "read_seeds"], [20, 4, 1, "", "write_row"]], "sapphire.corsika.particles": [[21, 4, 1, "", "name"], [21, 4, 1, "", "particle_id"]], "sapphire.corsika.qsub_corsika": [[22, 1, 1, "", "CorsikaBatch"], [22, 4, 1, "", "main"], [22, 4, 1, "", "multiple_jobs"]], "sapphire.corsika.qsub_corsika.CorsikaBatch": [[22, 3, 1, "", "copy_config"], [22, 3, 1, "", "corsika_energy"], [22, 3, 1, "", "create_input"], [22, 3, 1, "", "create_script"], [22, 3, 1, "", "generate_random_seeds"], [22, 3, 1, "", "get_rundir"], [22, 3, 1, "", "goto_rundir"], [22, 3, 1, "", "make_rundir"], [22, 3, 1, "", "prepare_env"], [22, 3, 1, "", "run"], [22, 3, 1, "", "submit_job"], [22, 3, 1, "", "taken_seeds"]], "sapphire.corsika.qsub_store_corsika_data": [[23, 4, 1, "", "all_seeds"], [23, 4, 1, "", "append_queued_seeds"], [23, 4, 1, "", "filter_large_seeds"], [23, 4, 1, "", "get_seeds_todo"], [23, 4, 1, "", "main"], [23, 4, 1, "", "run"], [23, 4, 1, "", "seeds_in_queue"], [23, 4, 1, "", "seeds_processed"], [23, 4, 1, "", "store_command"], [23, 4, 1, "", "write_queued_seeds"]], "sapphire.corsika.reader": [[24, 1, 1, "", "CorsikaEvent"], [24, 1, 1, "", "CorsikaFile"], [24, 1, 1, "", "CorsikaFileThin"]], "sapphire.corsika.reader.CorsikaEvent": [[24, 3, 1, "", "get_end"], [24, 3, 1, "", "get_header"], [24, 3, 1, "", "get_particles"]], "sapphire.corsika.reader.CorsikaFile": [[24, 3, 1, "", "check"], [24, 3, 1, "", "finish"], [24, 3, 1, "", "get_end"], [24, 3, 1, "", "get_events"], [24, 3, 1, "", "get_header"], [24, 3, 1, "", "get_sub_blocks"]], "sapphire.corsika.store_corsika_data": [[25, 4, 1, "", "copy_and_sort_node"], [25, 4, 1, "", "create_index"], [25, 4, 1, "", "create_tempfile_path"], [25, 4, 1, "", "main"], [25, 4, 1, "", "save_particle"], [25, 4, 1, "", "save_thinned_particle"], [25, 4, 1, "", "store_and_sort_corsika_data"], [25, 4, 1, "", "store_corsika_data"]], "sapphire.data": [[28, 0, 0, "-", "extend_local_data"], [29, 0, 0, "-", "update_local_data"]], "sapphire.data.extend_local_data": [[28, 4, 1, "", "main"], [28, 4, 1, "", "update_additional_local_tsv"]], "sapphire.data.update_local_data": [[29, 4, 1, "", "get_and_store_json"], [29, 4, 1, "", "get_and_store_tsv"], [29, 4, 1, "", "main"], [29, 4, 1, "", "update_local_json"], [29, 4, 1, "", "update_local_tsv"], [29, 4, 1, "", "update_sublevel_json"], [29, 4, 1, "", "update_sublevel_tsv"], [29, 4, 1, "", "update_subsublevel_tsv"], [29, 4, 1, "", "update_toplevel_json"]], "sapphire.esd": [[30, 1, 1, "", "ReadLineAndStoreEventClass"], [30, 1, 1, "", "ReadLineAndStoreLightningClass"], [30, 1, 1, "", "ReadLineAndStoreSinglesClass"], [30, 1, 1, "", "ReadLineAndStoreWeatherClass"], [30, 4, 1, "", "download_coincidences"], [30, 4, 1, "", "download_data"], [30, 4, 1, "", "download_lightning"], [30, 4, 1, "", "get_base_url"], [30, 4, 1, "", "get_coincidences_url"], [30, 4, 1, "", "get_events_url"], [30, 4, 1, "", "get_lightning_url"], [30, 4, 1, "", "get_singles_url"], [30, 4, 1, "", "get_weather_url"], [30, 4, 1, "", "load_coincidences"], [30, 4, 1, "", "load_data"], [30, 4, 1, "", "quick_download"]], "sapphire.esd.ReadLineAndStoreEventClass": [[30, 3, 1, "", "store_line"]], "sapphire.esd.ReadLineAndStoreLightningClass": [[30, 3, 1, "", "store_line"]], "sapphire.esd.ReadLineAndStoreSinglesClass": [[30, 3, 1, "", "store_line"]], "sapphire.esd.ReadLineAndStoreWeatherClass": [[30, 3, 1, "", "store_line"]], "sapphire.kascade": [[34, 1, 1, "", "KascadeCoincidences"], [34, 1, 1, "", "StoreKascadeData"]], "sapphire.kascade.KascadeCoincidences": [[34, 3, 1, "", "search_coincidences"], [34, 3, 1, "", "store_coincidences"]], "sapphire.kascade.StoreKascadeData": [[34, 3, 1, "", "read_and_store_data"]], "sapphire.publicdb": [[35, 4, 1, "", "datetimerange"], [35, 4, 1, "", "download_data"], [35, 4, 1, "", "get_publicdb_xmlrpc_url"]], "sapphire.qsub": [[36, 4, 1, "", "check_queue"], [36, 4, 1, "", "create_script"], [36, 4, 1, "", "delete_script"], [36, 4, 1, "", "submit_job"]], "sapphire.simulations": [[39, 0, 0, "-", "base"], [40, 0, 0, "-", "detector"], [41, 0, 0, "-", "gammas"], [42, 0, 0, "-", "groundparticles"], [43, 0, 0, "-", "ldf"], [44, 0, 0, "-", "showerfront"]], "sapphire.simulations.base": [[39, 1, 1, "", "BaseSimulation"]], "sapphire.simulations.base.BaseSimulation": [[39, 3, 1, "", "generate_shower_parameters"], [39, 3, 1, "", "process_detector_observables"], [39, 3, 1, "", "run"], [39, 3, 1, "", "simulate_all_detectors"], [39, 3, 1, "", "simulate_detector_response"], [39, 3, 1, "", "simulate_events_for_shower"], [39, 3, 1, "", "simulate_gps"], [39, 3, 1, "", "simulate_station_response"], [39, 3, 1, "", "simulate_trigger"], [39, 3, 1, "", "store_coincidence"], [39, 3, 1, "", "store_station_observables"]], "sapphire.simulations.detector": [[40, 1, 1, "", "ErrorlessSimulation"], [40, 1, 1, "", "HiSPARCSimulation"]], "sapphire.simulations.detector.ErrorlessSimulation": [[40, 3, 1, "", "simulate_adc_sampling"], [40, 3, 1, "", "simulate_detector_mips"], [40, 3, 1, "", "simulate_detector_offset"], [40, 3, 1, "", "simulate_detector_offsets"], [40, 3, 1, "", "simulate_gps_uncertainty"], [40, 3, 1, "", "simulate_signal_transport_time"], [40, 3, 1, "", "simulate_station_offset"]], "sapphire.simulations.detector.HiSPARCSimulation": [[40, 3, 1, "", "generate_attenuated_zenith"], [40, 3, 1, "", "generate_azimuth"], [40, 3, 1, "", "generate_core_position"], [40, 3, 1, "", "generate_energy"], [40, 3, 1, "", "generate_zenith"], [40, 3, 1, "", "inverse_zenith_probability"], [40, 3, 1, "", "simulate_adc_sampling"], [40, 3, 1, "", "simulate_and_store_offsets"], [40, 3, 1, "", "simulate_detector_mips"], [40, 3, 1, "", "simulate_detector_offset"], [40, 3, 1, "", "simulate_detector_offsets"], [40, 3, 1, "", "simulate_gps_uncertainty"], [40, 3, 1, "", "simulate_signal_transport_time"], [40, 3, 1, "", "simulate_station_offset"]], "sapphire.simulations.gammas": [[41, 4, 1, "", "compton_edge"], [41, 4, 1, "", "compton_energy_transfer"], [41, 4, 1, "", "compton_mean_free_path"], [41, 4, 1, "", "energy_transfer_cross_section"], [41, 4, 1, "", "max_energy_deposit_in_mips"], [41, 4, 1, "", "pair_mean_free_path"], [41, 4, 1, "", "simulate_detector_mips_gammas"]], "sapphire.simulations.groundparticles": [[42, 1, 1, "", "DetectorBoundarySimulation"], [42, 1, 1, "", "FixedCoreDistanceSimulation"], [42, 1, 1, "", "GroundParticlesGammaSimulation"], [42, 1, 1, "", "GroundParticlesSimulation"], [42, 1, 1, "", "GroundParticlesSimulationWithoutErrors"], [42, 1, 1, "", "MultipleGroundParticlesSimulation"], [42, 1, 1, "", "ParticleCounterSimulation"]], "sapphire.simulations.groundparticles.DetectorBoundarySimulation": [[42, 3, 1, "", "get_line_boundary_eqs"], [42, 3, 1, "", "get_particles_in_detector"]], "sapphire.simulations.groundparticles.FixedCoreDistanceSimulation": [[42, 3, 1, "", "generate_core_position"]], "sapphire.simulations.groundparticles.GroundParticlesGammaSimulation": [[42, 3, 1, "", "get_particles_in_detector"], [42, 3, 1, "", "simulate_detector_mips_for_gammas"], [42, 3, 1, "", "simulate_detector_response"]], "sapphire.simulations.groundparticles.GroundParticlesSimulation": [[42, 3, 1, "", "finish"], [42, 3, 1, "", "generate_shower_parameters"], [42, 3, 1, "", "get_particles_in_detector"], [42, 3, 1, "", "simulate_detector_mips_for_particles"], [42, 3, 1, "", "simulate_detector_response"], [42, 3, 1, "", "simulate_gps"], [42, 3, 1, "", "simulate_trigger"]], "sapphire.simulations.groundparticles.MultipleGroundParticlesSimulation": [[42, 2, 1, "", "DATA"], [42, 3, 1, "", "finish"], [42, 3, 1, "", "generate_shower_parameters"], [42, 3, 1, "", "select_simulation"]], "sapphire.simulations.groundparticles.ParticleCounterSimulation": [[42, 3, 1, "", "simulate_detector_mips"]], "sapphire.simulations.ldf": [[43, 1, 1, "", "BaseLdf"], [43, 1, 1, "", "BaseLdfSimulation"], [43, 1, 1, "", "BaseLdfSimulationWithoutErrors"], [43, 1, 1, "", "EllipsLdf"], [43, 1, 1, "", "EllipsLdfSimulation"], [43, 1, 1, "", "KascadeLdf"], [43, 1, 1, "", "KascadeLdfSimulation"], [43, 1, 1, "", "KascadeLdfSimulationWithoutErrors"], [43, 1, 1, "", "NkgLdf"], [43, 1, 1, "", "NkgLdfSimulation"], [43, 1, 1, "", "NkgLdfSimulationWithoutErrors"]], "sapphire.simulations.ldf.BaseLdf": [[43, 3, 1, "", "calculate_core_distance"], [43, 3, 1, "", "calculate_ldf_value"]], "sapphire.simulations.ldf.BaseLdfSimulation": [[43, 3, 1, "", "generate_shower_parameters"], [43, 3, 1, "", "get_num_particles_in_detector"], [43, 3, 1, "", "simulate_detector_response"], [43, 3, 1, "", "simulate_particles_for_density"]], "sapphire.simulations.ldf.BaseLdfSimulationWithoutErrors": [[43, 3, 1, "", "simulate_particles_for_density"]], "sapphire.simulations.ldf.EllipsLdf": [[43, 3, 1, "", "calculate_core_distance_and_angle"], [43, 3, 1, "", "calculate_ldf_value"], [43, 3, 1, "", "ldf_value"]], "sapphire.simulations.ldf.EllipsLdfSimulation": [[43, 3, 1, "", "generate_shower_parameters"], [43, 3, 1, "", "get_num_particles_in_detector"]], "sapphire.simulations.ldf.KascadeLdf": [[43, 3, 1, "", "ldf_value"]], "sapphire.simulations.ldf.NkgLdf": [[43, 3, 1, "", "calculate_ldf_value"], [43, 3, 1, "", "ldf_value"]], "sapphire.simulations.showerfront": [[44, 1, 1, "", "ConeFront"], [44, 1, 1, "", "ConeFrontSimulation"], [44, 1, 1, "", "CorsikaStationFront"], [44, 1, 1, "", "FlatFront"], [44, 1, 1, "", "FlatFrontSimulation"], [44, 1, 1, "", "FlatFrontSimulation2D"], [44, 1, 1, "", "FlatFrontSimulation2DWithoutErrors"], [44, 1, 1, "", "FlatFrontSimulationWithoutErrors"]], "sapphire.simulations.showerfront.ConeFront": [[44, 3, 1, "", "delay_at_r"], [44, 3, 1, "", "front_shape"]], "sapphire.simulations.showerfront.ConeFrontSimulation": [[44, 3, 1, "", "generate_shower_parameters"], [44, 3, 1, "", "get_arrival_time"]], "sapphire.simulations.showerfront.CorsikaStationFront": [[44, 3, 1, "", "delay_at_r"], [44, 3, 1, "", "front_shape"]], "sapphire.simulations.showerfront.FlatFront": [[44, 3, 1, "", "delay_at_r"], [44, 3, 1, "", "front_shape"]], "sapphire.simulations.showerfront.FlatFrontSimulation": [[44, 3, 1, "", "generate_shower_parameters"], [44, 3, 1, "", "get_arrival_time"], [44, 3, 1, "", "simulate_detector_response"], [44, 3, 1, "", "simulate_gps"]], "sapphire.simulations.showerfront.FlatFrontSimulation2D": [[44, 3, 1, "", "get_arrival_time"]], "sapphire.storage": [[45, 1, 1, "", "Coincidence"], [45, 1, 1, "", "EventObservables"], [45, 1, 1, "", "KascadeEvent"], [45, 1, 1, "", "ReconstructedCoincidence"], [45, 1, 1, "", "ReconstructedEvent"], [45, 1, 1, "", "ReconstructedKascadeEvent"], [45, 1, 1, "", "TimeDelta"]], "sapphire.storage.Coincidence": [[45, 2, 1, "", "N"], [45, 2, 1, "", "azimuth"], [45, 2, 1, "", "columns"], [45, 2, 1, "", "energy"], [45, 2, 1, "", "id"], [45, 2, 1, "", "size"], [45, 2, 1, "", "x"], [45, 2, 1, "", "y"], [45, 2, 1, "", "zenith"]], "sapphire.storage.EventObservables": [[45, 2, 1, "", "N"], [45, 2, 1, "", "alpha"], [45, 2, 1, "", "columns"], [45, 2, 1, "", "id"], [45, 2, 1, "", "station_id"]], "sapphire.storage.KascadeEvent": [[45, 2, 1, "", "columns"]], "sapphire.storage.ReconstructedCoincidence": [[45, 2, 1, "", "columns"]], "sapphire.storage.ReconstructedEvent": [[45, 2, 1, "", "columns"], [45, 2, 1, "", "id"]], "sapphire.storage.ReconstructedKascadeEvent": [[45, 2, 1, "", "columns"]], "sapphire.storage.TimeDelta": [[45, 2, 1, "", "columns"]], "sapphire.tests": [[46, 4, 1, "", "run_tests"]], "sapphire.time_util": [[47, 1, 1, "", "GPSTime"]], "sapphire.time_util.GPSTime": [[47, 3, 1, "", "datetime"], [47, 3, 1, "", "description"], [47, 3, 1, "", "gpstimestamp"]], "sapphire.transformations": [[49, 0, 0, "-", "angles"], [50, 0, 0, "-", "axes"], [51, 0, 0, "-", "base"], [52, 0, 0, "-", "celestial"], [53, 0, 0, "-", "clock"], [54, 0, 0, "-", "geographic"]], "sapphire.transformations.angles": [[49, 4, 1, "", "degrees_to_hours"], [49, 4, 1, "", "hours_to_degrees"], [49, 4, 1, "", "hours_to_radians"], [49, 4, 1, "", "radians_to_hours"]], "sapphire.transformations.axes": [[50, 4, 1, "", "cartesian_to_compass"], [50, 4, 1, "", "cartesian_to_cylindrical"], [50, 4, 1, "", "cartesian_to_polar"], [50, 4, 1, "", "cartesian_to_spherical"], [50, 4, 1, "", "compass_to_cartesian"], [50, 4, 1, "", "cylindrical_to_cartesian"], [50, 4, 1, "", "polar_to_cartesian"], [50, 4, 1, "", "rotate_cartesian"], [50, 4, 1, "", "rotation_matrix"], [50, 4, 1, "", "spherical_to_cartesian"]], "sapphire.transformations.base": [[51, 4, 1, "", "decimal_to_sexagesimal"], [51, 4, 1, "", "sexagesimal_to_decimal"]], "sapphire.transformations.celestial": [[52, 4, 1, "", "equatorial_to_horizontal_astropy"], [52, 4, 1, "", "equatorial_to_zenithazimuth"], [52, 4, 1, "", "equatorial_to_zenithazimuth_astropy"], [52, 4, 1, "", "ha_to_ra"], [52, 4, 1, "", "horizontal_to_equatorial"], [52, 4, 1, "", "horizontal_to_equatorial_astropy"], [52, 4, 1, "", "horizontal_to_hadec"], [52, 4, 1, "", "horizontal_to_zenithazimuth"], [52, 4, 1, "", "zenithazimuth_to_equatorial"], [52, 4, 1, "", "zenithazimuth_to_equatorial_astropy"], [52, 4, 1, "", "zenithazimuth_to_horizontal"]], "sapphire.transformations.clock": [[53, 5, 1, "", "LEAP_SECONDS"], [53, 4, 1, "", "date_to_juliandate"], [53, 4, 1, "", "datetime_to_gps"], [53, 4, 1, "", "datetime_to_juliandate"], [53, 4, 1, "", "datetime_to_modifiedjd"], [53, 4, 1, "", "decimal_to_time"], [53, 4, 1, "", "gmst_to_lst"], [53, 4, 1, "", "gmst_to_utc"], [53, 4, 1, "", "gps_from_string"], [53, 4, 1, "", "gps_to_datetime"], [53, 4, 1, "", "gps_to_lst"], [53, 4, 1, "", "gps_to_utc"], [53, 4, 1, "", "juliandate_to_gmst"], [53, 4, 1, "", "juliandate_to_modifiedjd"], [53, 4, 1, "", "juliandate_to_utc"], [53, 4, 1, "", "lst_to_gmst"], [53, 4, 1, "", "modifiedjd_to_juliandate"], [53, 4, 1, "", "modifiedjd_to_utc"], [53, 4, 1, "", "process_time"], [53, 4, 1, "", "time_to_decimal"], [53, 4, 1, "", "utc_from_string"], [53, 4, 1, "", "utc_to_gmst"], [53, 4, 1, "", "utc_to_gps"], [53, 4, 1, "", "utc_to_lst"]], "sapphire.transformations.geographic": [[54, 1, 1, "", "FromWGS84ToENUTransformation"], [54, 1, 1, "", "WGS84Datum"]], "sapphire.transformations.geographic.FromWGS84ToENUTransformation": [[54, 3, 1, "", "ecef_to_enu"], [54, 3, 1, "", "ecef_to_lla"], [54, 3, 1, "", "enu_to_ecef"], [54, 3, 1, "", "enu_to_lla"], [54, 2, 1, "", "geode"], [54, 3, 1, "", "lla_to_ecef"], [54, 3, 1, "", "lla_to_enu"], [54, 3, 1, "", "transform"]], "sapphire.transformations.geographic.WGS84Datum": [[54, 2, 1, "", "a"], [54, 2, 1, "", "b"], [54, 2, 1, "", "e"], [54, 2, 1, "", "eprime"], [54, 2, 1, "", "f"]], "sapphire.utils": [[56, 5, 1, "", "ERR"], [56, 4, 1, "", "angle_between"], [56, 5, 1, "", "c"], [56, 4, 1, "", "ceil_in_base"], [56, 4, 1, "", "closest_in_list"], [56, 4, 1, "", "distance_between"], [56, 4, 1, "", "floor_in_base"], [56, 4, 1, "", "gauss"], [56, 4, 1, "", "get_active_index"], [56, 4, 1, "", "get_publicdb_base"], [56, 4, 1, "", "make_relative"], [56, 4, 1, "", "memoize"], [56, 4, 1, "", "norm_angle"], [56, 4, 1, "", "pbar"], [56, 4, 1, "", "round_in_base"], [56, 4, 1, "", "vector_length"], [56, 4, 1, "", "which"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "function", "Python function"], "5": ["py", "data", "Python data"], "6": ["py", "property", "Python property"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:function", "5": "py:data", "6": "py:property"}, "terms": {"": [1, 3, 5, 9, 11, 14, 17, 21, 24, 26, 30, 31, 40, 42, 43, 55], "0": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22, 30, 31, 34, 35, 40, 42, 43, 45, 47, 52, 53, 54, 55, 56], "00": [35, 47, 55], "000000": 42, "00000000e": 55, "0033528106647474805": 54, "01": 35, "02": [8, 55], "03": [30, 55], "03120": 55, "0471975511965976": 40, "05": 55, "07834953": 55, "08181919084262149": 54, "08209443794969568": 54, "09": 35, "0l": 55, "1": [1, 3, 5, 7, 8, 9, 10, 12, 13, 15, 18, 24, 26, 30, 31, 35, 39, 40, 42, 44, 45, 47, 53, 55, 56], "10": [3, 5, 8, 9, 10, 18, 21, 22, 24, 31, 39, 42, 44, 45, 51, 53, 55], "100": [3, 8, 21, 22, 28, 31, 44, 55], "1000": [1, 5, 10, 21, 22, 55], "10000": 3, "1000000000": 3, "100000000000000": 40, "1001001": 8, "1002": 55, "1009": 55, "101": 55, "1011011": 8, "102": [15, 55], "1021021": 8, "1022": 55, "10234594": 15, "1030": 55, "1031031": 8, "1033535": 56, "104": 15, "1041041": 8, "105": 15, "10510511": 8, "10610611": 8, "10710711": 8, "10756e": 8, "10810811": 8, "10910911": 8, "109162": 55, "109996": 55, "11": [8, 9, 18, 35, 43, 45, 53, 55], "11011011": 8, "111": 51, "11111111": 8, "111d36m12": 51, "11211211": 8, "112813": 55, "113": 55, "11311311": 8, "11411411": 8, "114794": 55, "11511512": 8, "11611612": 8, "11711712": 8, "11811812": 8, "11911912": 8, "12": [8, 9, 45, 47, 51, 53, 55], "12012012": 8, "1206": 21, "12112112": 8, "12180000e": 55, "12212212": 8, "123": 55, "12312312": 8, "124": 55, "12412412": 8, "1246": 55, "12512513": 8, "12612613": 8, "12712713": 8, "12812813": 8, "1285": 55, "12912913": 8, "13": [5, 8, 9, 18, 35, 45, 53, 55], "13005": 14, "13013013": 8, "1310": 55, "13113113": 8, "13213213": 8, "133": 55, "13313313": 8, "13413413": 8, "1345": 55, "135": 22, "13513514": 8, "1354320000": [47, 55], "1354323600": 55, "1354449600": 55, "1354449620": 55, "1354453200": 55, "1356998460": 55, "1356998460730384055l": 55, "13613614": 8, "13713714": 8, "137600": 55, "13813814": 8, "13913914": 8, "14": [5, 8, 9, 18, 45, 53, 55], "1400": 10, "14014014": 8, "14114114": 8, "14214214": 8, "14314314": 8, "14414414": 8, "1445385601": 55, "1445385601613271528l": 55, "14514515": 8, "14614615": 8, "14714715": 8, "14814815": 8, "14914915": 8, "15": [8, 9, 22, 45, 53, 55], "150": 10, "1500": [10, 52], "1500000": 26, "15015015": 8, "15115115": 8, "15215215": 8, "15315315": 8, "1536054": 54, "15415415": 8, "15515516": 8, "15615616": 8, "15715716": 8, "15815816": 8, "15915916": 8, "16": [8, 9, 22, 31, 40, 44, 45, 53, 55], "1600": 52, "16016016": 8, "16116116": 8, "162": 55, "16216216": 8, "163": 55, "16316316": 8, "16416416": 8, "16516517": 8, "1657": 55, "16616617": 8, "16716717": 8, "16816817": 8, "16916917": 8, "17": [8, 9, 10, 45, 53, 55], "170": 55, "17017017": 8, "17117117": 8, "17130000e": 55, "172018": 8, "17217217": 8, "173": 55, "17317317": 8, "17417417": 8, "17517518": 8, "17565": 55, "17617618": 8, "17717718": 8, "17817818": 8, "17917918": 8, "18": [8, 9, 45, 53], "180": 22, "18018018": 8, "18118118": 8, "18218218": 8, "18318318": 8, "18418418": 8, "18518519": 8, "18618619": 8, "18718719": 8, "18818819": 8, "18918919": 8, "19": [5, 8, 9, 45, 55], "19019019": 8, "19028": 55, "19119119": 8, "19219219": 8, "19319319": 8, "19419419": 8, "1951952": 8, "1961962": 8, "1970": 55, "1971972": 8, "1980": 55, "1981": 53, "1981982": 8, "1982": 53, "1983": 53, "1985": 53, "1987": 41, "1988": 53, "1990": 53, "1991": 53, "1991992": 8, "1992": 53, "1993": 53, "1994": 53, "1996": 53, "1997": 53, "1999": 53, "1e": [40, 44], "1e15": [43, 44], "1e16": 22, "1e17": 44, "1e21": 43, "2": [2, 3, 4, 5, 8, 9, 10, 11, 13, 15, 18, 21, 22, 24, 30, 31, 33, 35, 40, 42, 43, 44, 45, 53, 55, 56], "20": [5, 8, 9, 45, 55], "200": [1, 10, 21, 43, 44], "2000": 55, "2006": 53, "2009": 53, "2010": 35, "2012": [5, 47, 53, 55], "2013": [3, 9, 30, 55], "20130910": 30, "2013_8_1": 2, "2014": [5, 30, 40], "2014_1_1": 11, "2015": [13, 53, 55], "20151130": 30, "2016": 31, "2017": 53, "21": [5, 8, 9, 40, 45, 55], "211": 55, "21283": 55, "21833": 55, "2184": 55, "22": [5, 8, 22, 30, 31, 40, 45, 55], "225": 22, "227": 55, "23": [5, 8, 45, 55], "24": [5, 8, 22, 43, 45], "25": [8, 10, 45], "250": 15, "251": 55, "253": 10, "255": 55, "256": [31, 55], "26": [5, 8, 10], "266": 55, "268": 55, "27": [5, 8], "270": 22, "271": 55, "277": 55, "28": 8, "2817": 55, "2836": 55, "285": 55, "29": [8, 31, 55], "290": 55, "295": 55, "29569": 55, "299": 55, "29954160": 56, "299792458": 56, "2d": [5, 15], "2l": 55, "2m": 42, "3": [4, 5, 8, 9, 10, 15, 30, 31, 33, 35, 40, 42, 45, 53, 55], "30": [8, 10, 22, 43, 55], "300": 55, "3003003": 8, "301": 55, "3013013": 8, "3023023": 8, "3033033": 8, "3043043": 8, "30530531": 8, "3062": 55, "30630631": 8, "30730731": 8, "30830831": 8, "309": 55, "3090": 55, "30930931": 8, "31": [8, 53, 55], "3102": 14, "31031031": 8, "31131131": 8, "31231231": 8, "313": 55, "31331331": 8, "314245179": 54, "31431431": 8, "315": [22, 31], "31531532": 8, "31631632": 8, "3173": 55, "31731732": 8, "31831832": 8, "31931932": 8, "32": [8, 24, 55], "32032032": 8, "32132132": 8, "32232232": 8, "323": 10, "32332332": 8, "32432432": 8, "325": 55, "32532533": 8, "32632633": 8, "32732733": 8, "328": 55, "32832833": 8, "32932933": 8, "33": 8, "330": 55, "33033033": 8, "33133133": 8, "33233233": 8, "33333333": 8, "3339": 55, "33433433": 8, "33533534": 8, "33633634": 8, "33733734": 8, "33833834": 8, "33933934": 8, "34": [8, 55], "340": 36, "34034034": 8, "34134134": 8, "34160000e": 55, "34234234": 8, "343": 55, "34334334": 8, "34434434": 8, "34534535": 8, "34634635": 8, "34734735": 8, "34834835": 8, "34934935": 8, "34937": 55, "35": 8, "3500": 10, "35035035": 8, "35135135": 8, "35235235": 8, "35335335": 8, "35435435": 8, "35535536": 8, "35592417": 15, "35635636": 8, "35735736": 8, "35835836": 8, "35935936": 8, "36": [5, 8, 51], "3600": 55, "36036036": 8, "36136136": 8, "36236236": 8, "36336336": 8, "36436436": 8, "36536537": 8, "36636637": 8, "36736737": 8, "36836837": 8, "36936937": 8, "37": [8, 22], "37037037": 8, "37137137": 8, "372": 55, "37237237": 8, "37337337": 8, "37437437": 8, "37537538": 8, "37637638": 8, "37737738": 8, "37837838": 8, "37937938": 8, "38": 8, "38038038": 8, "381": 55, "38138138": 8, "38238238": 8, "38334498": 55, "38338338": 8, "38438438": 8, "38538539": 8, "38638639": 8, "38738739": 8, "38838839": 8, "38938939": 8, "38995": [52, 53], "39": [8, 55], "39039039": 8, "39139139": 8, "39239239": 8, "39339339": 8, "39439439": 8, "3953954": 8, "3963964": 8, "3973974": 8, "3983984": 8, "3990": [5, 8, 44], "3993994": 8, "3d": 5, "4": [4, 5, 7, 8, 9, 10, 15, 21, 22, 24, 30, 31, 35, 40, 42, 43, 44, 45, 53, 55], "40": [3, 8, 55], "400": [10, 43, 55], "4028": 55, "407": 55, "40l": 55, "40th": 3, "41": 8, "41376889": 55, "42": 8, "4246": 55, "43": [8, 55], "44": [8, 55], "446": 55, "45": [8, 22, 55], "46": [8, 55], "46382": 55, "47": 8, "4713": 53, "48": [8, 22], "49": [8, 55], "5": [8, 9, 13, 14, 22, 26, 30, 31, 33, 35, 40, 42, 43, 45, 53, 55], "50": [8, 30, 55], "500": [22, 42], "5000": 3, "50000": 3, "5005005": 8, "501": [2, 3, 9, 15, 30, 31, 35, 55], "5015015": 8, "502": [2, 55], "5025025": 8, "503": [2, 3, 9, 31, 55], "5035035": 8, "504": [2, 14], "5045045": 8, "50550551": 8, "506": [3, 9, 11, 31, 55], "50650651": 8, "507": 15, "50750751": 8, "50850851": 8, "50950951": 8, "51": [8, 31, 55], "51051051": 8, "51151151": 8, "5117999911308289": 55, "51190000e": 55, "51251251": 8, "51351351": 8, "51451451": 8, "51513": 55, "51551552": 8, "51651652": 8, "51751752": 8, "51851852": 8, "51951952": 8, "52": [8, 15, 22], "52052052": 8, "521": [52, 53], "52152152": 8, "52252252": 8, "52352352": 8, "52452452": 8, "52552553": 8, "52652653": 8, "52752753": 8, "52852853": 8, "52952953": 8, "53": 8, "53053053": 8, "53153153": 8, "53253253": 8, "53353353": 8, "53453453": 8, "53553554": 8, "53653654": 8, "53753754": 8, "53853854": 8, "53953954": 8, "54": [8, 41], "540": 55, "54054054": 8, "54154154": 8, "54254254": 8, "54354354": 8, "54454454": 8, "54554555": 8, "54654655": 8, "54754755": 8, "54854855": 8, "54954955": 8, "55": [8, 55], "55055055": 8, "55130": 55, "55155155": 8, "55255255": 8, "55355355": 8, "55455455": 8, "55555556": 8, "556": 55, "55655656": 8, "55755756": 8, "55855856": 8, "55955956": 8, "56": [8, 15], "56056056": 8, "56140000e": 55, "56156156": 8, "5621": 55, "56256256": 8, "56356356": 8, "56456456": 8, "56556557": 8, "56656657": 8, "56756757": 8, "56856857": 8, "5695": 55, "56956957": 8, "57": [8, 55], "57057057": 8, "57157157": 8, "57257257": 8, "57357357": 8, "57457457": 8, "57557558": 8, "57657658": 8, "577215665": 8, "57757758": 8, "57857858": 8, "579": 55, "57957958": 8, "58": 8, "58058058": 8, "581": 55, "58158158": 8, "58258258": 8, "58358358": 8, "58458458": 8, "58558559": 8, "58658659": 8, "58758759": 8, "58820": 55, "58858859": 8, "58898": 30, "58958959": 8, "59": 8, "59059059": 8, "59159159": 8, "59259259": 8, "593": 55, "59359359": 8, "59459459": 8, "59542936": 55, "5955956": 8, "5965966": 8, "5975976": 8, "5985986": 8, "5995996": 8, "5xx": 15, "6": [8, 9, 10, 42, 43, 45, 53, 55], "60": [8, 51], "600": 10, "61": 8, "613271528l": 55, "618": 55, "62": [8, 55], "621": 55, "63": 8, "6356752": 54, "6378137": 54, "64": [8, 24], "65": 8, "65935": 55, "66": [8, 55], "66482645": 55, "67": 8, "68": 8, "68365": 55, "69": 8, "7": [8, 9, 18, 22, 31, 33, 43, 45, 53, 55], "70": 8, "7001": 15, "7002": 15, "7003": 15, "7007007": 8, "7017017": 8, "7027027": 8, "7037037": 8, "7047047": 8, "70570571": 8, "70643": 55, "70670671": 8, "70770771": 8, "70870871": 8, "70970971": 8, "71": 8, "7101": 14, "71071071": 8, "71171171": 8, "71271271": 8, "71371371": 8, "71471471": 8, "71571572": 8, "71671672": 8, "71771772": 8, "71871872": 8, "71971972": 8, "72": [8, 55], "72072072": 8, "72172172": 8, "72272272": 8, "72372372": 8, "72472472": 8, "72572573": 8, "72672673": 8, "72772773": 8, "72872873": 8, "72972973": 8, "73": 8, "730384055l": 55, "73073073": 8, "73170000e": 55, "73173173": 8, "73273273": 8, "73373373": 8, "73473473": 8, "73573574": 8, "73673674": 8, "73773774": 8, "73873874": 8, "73973974": 8, "74": 8, "74074074": 8, "74174174": 8, "74274274": 8, "74284476": 55, "74374374": 8, "74474474": 8, "74574575": 8, "74674675": 8, "74774775": 8, "74874875": 8, "74974975": 8, "75": [8, 40], "75075075": 8, "75175175": 8, "75275275": 8, "75375375": 8, "75475475": 8, "75575576": 8, "756": 55, "75675676": 8, "75775776": 8, "75875876": 8, "75975976": 8, "76": 8, "76076076": 8, "76176176": 8, "76276276": 8, "76376376": 8, "76476476": 8, "76576577": 8, "76676677": 8, "76776777": 8, "76876877": 8, "76976977": 8, "77": 8, "77077077": 8, "77177177": 8, "77277277": 8, "77377377": 8, "77477477": 8, "77577578": 8, "776": 55, "77677678": 8, "77777778": 8, "77877878": 8, "77977978": 8, "78": [8, 55], "78078078": 8, "78178178": 8, "78278278": 8, "78378378": 8, "78478478": 8, "78578579": 8, "78678679": 8, "78778779": 8, "78878879": 8, "78978979": 8, "79": 8, "79079079": 8, "79179179": 8, "79279279": 8, "79379379": 8, "79479479": 8, "7957958": 8, "7967968": 8, "7977978": 8, "7987988": 8, "7997998": 8, "8": [8, 9, 18, 45, 53, 55], "80": 8, "8000": 16, "8008": 14, "81": 8, "81200000e": 55, "819": 55, "82": [8, 10], "821280921_182096636": 20, "83": 8, "84": 8, "85": 8, "86": [8, 55], "87": 8, "88": 8, "887": 55, "89": 8, "9": [8, 9, 30, 31, 35, 44, 45, 53, 55], "90": [8, 22, 31], "9009009": 8, "9019019": 8, "90200000e": 55, "9029029": 8, "9039039": 8, "9049049": 8, "90590591": 8, "90690691": 8, "90790791": 8, "90890891": 8, "90990991": 8, "91": [8, 55], "91091091": 8, "91100000e": 55, "91191191": 8, "91291291": 8, "91391391": 8, "91491491": 8, "91591592": 8, "91691692": 8, "91791792": 8, "91891892": 8, "91991992": 8, "92": 8, "92092092": 8, "92192192": 8, "92292292": 8, "92392392": 8, "92492492": 8, "92592593": 8, "92692693": 8, "92792793": 8, "92892893": 8, "92992993": 8, "93": 8, "93093093": 8, "93193193": 8, "93293293": 8, "93393393": 8, "93493493": 8, "93593594": 8, "93693694": 8, "93793794": 8, "93893894": 8, "93993994": 8, "94": 8, "94094094": 8, "9417999982833862": 55, "94194194": 8, "94294294": 8, "94394394": 8, "94494494": 8, "94594595": 8, "94694695": 8, "94794795": 8, "94894895": 8, "94994995": 8, "95": 8, "95095095": 8, "95114402": 15, "95150000e": 55, "95195195": 8, "95295295": 8, "95395395": 8, "95495495": 8, "95595596": 8, "95695696": 8, "95795796": 8, "95895896": 8, "95995996": 8, "96": [8, 22], "96096096": 8, "96196196": 8, "96296296": 8, "96396396": 8, "96496496": 8, "96596597": 8, "96696697": 8, "96796797": 8, "96896897": 8, "96996997": 8, "97": 8, "97097097": 8, "97197197": 8, "97297297": 8, "97397397": 8, "97497497": 8, "97597598": 8, "97663": 8, "97697698": 8, "97797798": 8, "9789036534383": [5, 8, 44], "97897898": 8, "97997998": 8, "98": 8, "98098098": 8, "98198198": 8, "98298298": 8, "98398398": 8, "98498498": 8, "98598599": 8, "98698699": 8, "98798799": 8, "98898899": 8, "98998999": 8, "99": 8, "99099099": 8, "99199199": 8, "99299299": 8, "99399399": 8, "99499499": 8, "995996": 8, "996997": 8, "997998": 8, "998999": 8, "999": [9, 55, 56], "A": [7, 10, 15, 21, 31, 39, 42, 44, 55], "And": [9, 55], "As": [12, 18, 33, 43, 55], "At": [3, 44, 55], "Be": [14, 40], "But": [0, 31, 33, 55], "By": [15, 28, 55], "For": [3, 9, 15, 21, 22, 24, 25, 26, 30, 31, 33, 35, 38, 40, 42, 43, 44, 45, 52, 55], "If": [3, 6, 8, 9, 10, 11, 14, 15, 29, 30, 31, 33, 34, 38, 42, 47, 55], "In": [9, 16, 17, 21, 22, 24, 30, 31, 33, 42, 55], "It": [3, 10, 14, 22, 24, 29, 31, 33, 34, 37, 43, 55], "No": [4, 5, 43, 47], "Not": [13, 29, 55], "Of": 55, "On": [35, 45], "One": 33, "Or": [16, 33, 55], "Such": 53, "That": [14, 31, 55], "The": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 20, 22, 23, 24, 25, 26, 28, 29, 30, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 47, 53, 54, 56], "Then": [3, 10, 15, 31, 33, 38, 40, 55], "There": [24, 33, 40, 55], "These": [5, 6, 11, 15, 20, 33, 39, 40, 46, 54, 55], "To": [3, 4, 5, 11, 15, 17, 22, 28, 29, 31, 33, 55, 56], "With": [8, 44, 55], "_": 20, "__init__": 47, "__main__": [3, 9, 13, 55], "__name__": [3, 9, 13, 55], "_astropi": 52, "_src_c_index": 3, "_src_timestamp": 3, "aa": 53, "aarhu": 30, "abl": 31, "about": [5, 7, 11, 14, 20, 28, 29, 31, 40, 45, 47, 50, 55], "abov": [9, 31, 50, 52, 55, 56], "absent": 55, "absolut": [15, 55], "abstract": 9, "abstract_data": 9, "accept": [13, 40], "access": [14, 18, 30, 31, 32, 36, 37], "accord": 24, "account": [5, 19, 34, 40, 42, 44], "accur": [42, 44], "activ": [10, 14, 15, 22, 32], "actual": [4, 5, 10, 34, 38, 40, 42, 45, 55], "ad": [21, 24, 28, 39, 52, 55], "adapt": 17, "adc": [3, 10, 40, 55], "adc_baseline_threshold": 10, "adc_filter_threshold": 10, "adc_high_threshold": 10, "adc_high_threshold_iii": 10, "adc_low_threshold": 10, "adc_low_threshold_iii": 10, "adc_threshold": 9, "adccount": 14, "add": [9, 10, 15, 23, 27, 28, 29, 34, 40, 55], "add_pad": 10, "addit": [8, 17, 24, 27, 31, 33, 44, 45, 55], "addition": [10, 24], "address": 55, "adelaat": [24, 26], "adjust": 7, "adrian": 53, "adrn": 53, "advantag": 42, "after": [2, 3, 19, 20, 28, 29, 31, 33, 36, 42, 55], "afternoon": 24, "afterward": 36, "ag": [33, 43], "ahead": 55, "air": [5, 14, 17, 39, 40, 42, 45], "algorithm": [4, 5, 7, 10], "all": [2, 3, 4, 5, 6, 7, 10, 11, 13, 14, 15, 18, 19, 20, 23, 24, 26, 28, 29, 31, 33, 39, 40, 44, 45, 46, 52, 53, 55], "all_azimuth": 19, "all_coincid": 2, "all_energi": 19, "all_ev": 2, "all_particl": 19, "all_reconstruct": 2, "all_se": [20, 23], "all_simul": 19, "all_zenith": 19, "allow": [3, 5, 10, 22, 24, 31], "almost": [1, 55], "alon": 31, "along": 8, "alpha": [11, 15, 40, 45, 50], "alreadi": [4, 5, 16, 22, 23, 27, 31, 34, 40, 55], "also": [3, 4, 5, 9, 10, 11, 14, 24, 26, 28, 29, 31, 33, 34, 36, 46, 55], "alt": 52, "alt_azimuth": 52, "altern": [11, 33, 55], "altitud": [1, 5, 13, 15, 44, 52, 54], "alwai": [4, 5, 22, 31, 33, 43, 55], "amount": [26, 34, 50], "amsterdam": 14, "an": [2, 3, 4, 5, 9, 10, 11, 12, 14, 15, 16, 17, 22, 24, 30, 31, 33, 34, 38, 40, 42, 45, 50, 55, 56], "anaconda": [31, 33, 55], "analog": 55, "analys": [0, 2, 9, 10, 31], "analysi": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 31, 32, 33, 37, 39, 55], "analyt": 5, "analyz": [32, 55], "ancestor": 9, "angl": [4, 5, 15, 22, 40, 41, 42, 43, 44, 48, 50, 52, 55, 56], "angle_between": 56, "ani": [2, 4, 5, 15, 31, 33, 38, 55], "announc": 53, "anoth": 55, "anyth": 55, "anywai": 33, "api": [1, 11, 13, 15, 16, 28, 29, 32, 35, 37, 55], "app": 33, "appar": [5, 44, 53], "append": [20, 21, 31, 55], "append_queued_se": 23, "appendix": 18, "appli": [5, 10, 15, 39], "applic": 33, "approach": 33, "approxim": [7, 8, 28, 40, 42, 55], "apt": 33, "apwlib": 53, "ar": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 18, 19, 22, 23, 24, 25, 26, 30, 31, 33, 34, 37, 38, 40, 42, 43, 44, 45, 47, 52, 53, 54, 55], "arbitrari": 5, "arbitrarili": 55, "arcminut": 51, "arcsec": 52, "arcsecond": 51, "area": [15, 42, 43], "arg": [19, 40, 42, 43, 44, 47], "arg_typ": 29, "argument": [5, 8, 13, 19, 24, 36, 47, 55], "aris": 8, "arn": [17, 24, 26, 37], "around": [1, 4, 7, 8, 10, 15, 42, 45, 50], "arrai": [1, 3, 5, 8, 9, 10, 14, 40, 41, 52, 55], "arriv": [1, 3, 5, 6, 9, 13, 38, 39, 42, 44], "ascens": [5, 52], "assign": 45, "associ": 55, "assum": [2, 5, 7, 9, 13, 15, 25, 40, 41, 43, 44, 55], "assumpt": 7, "assur": 33, "astronomi": [52, 53], "astropi": [48, 52], "asymmetri": 43, "at_least": 2, "atmospher": [18, 40], "atom": [18, 21], "atomic_numb": [18, 21], "attach": 3, "attenu": [40, 41], "attribut": [3, 5, 11, 18, 45], "auger": 26, "author": [18, 26, 52], "autom": 11, "automat": [0, 3, 22, 23], "avail": [3, 11, 14, 15, 17, 19, 24, 29, 33, 36, 42, 55, 56], "available_paramet": 19, "averag": [4, 6], "averageintersectionalgorithm": 4, "awar": [4, 5, 6], "ax": [15, 48], "axi": [15, 43, 50], "az": 52, "azimuth": [4, 11, 14, 19, 22, 40, 42, 43, 44, 45, 52, 55, 56], "azimuth1": 56, "azimuth2": 56, "b": [8, 53, 54], "bachelor": 10, "back": 14, "bad": [5, 14, 56], "bandwidth": 31, "bar": [4, 5, 25, 55], "bare": 8, "baromet": [14, 55], "base": [2, 4, 5, 6, 7, 14, 15, 16, 25, 26, 35, 38, 40, 41, 48, 54, 55, 56], "baseclust": [4, 5, 11, 15, 39], "basecorealgorithm": 4, "basedirectionalgorithm": 5, "baseldf": 43, "baseldfsimul": 43, "baseldfsimulationwithouterror": 43, "baselin": [3, 9, 10, 14, 55], "basesimul": 39, "basic": [3, 24, 29, 55], "batch": 17, "becam": 15, "becaus": [3, 6, 9, 10, 15, 24, 28, 29, 31, 40, 42, 53, 55], "becom": [5, 28, 29, 31, 44], "been": [2, 14, 22, 24, 33, 52, 55], "befor": [5, 7, 31, 33, 55], "behav": 9, "behavior": 10, "being": [32, 55], "believ": 54, "belong": [9, 34, 39], "below": [30, 33, 35, 40, 56], "benefit": 55, "best": [4, 5, 6, 7, 55], "best_fit": 5, "beta": 15, "beth": 40, "better": [3, 8, 55], "between": [0, 1, 5, 9, 11, 13, 15, 34, 37, 40, 42, 44, 48, 53, 55, 56], "bin": [1, 7, 14, 31, 40, 55], "binari": [18, 24, 25, 35], "bit": [24, 42, 55], "bloch": 40, "block": [17, 24], "bone": 8, "book": [24, 55], "boolcol": [9, 45], "boolean": [3, 7, 14, 35, 45, 56], "born": 37, "both": [0, 14, 24, 30, 33, 39, 40, 43, 48, 54, 55], "bottom": 55, "bound": [1, 40, 41], "boundari": 42, "box": 42, "bracket": 7, "brew": 33, "bring": 27, "bristol": 14, "broken": 33, "brows": 32, "build": [2, 9, 15, 33], "built": 38, "bump": 55, "byte": 24, "byteord": 55, "c": [5, 40, 44, 53, 56], "c9h10": 41, "c_index": [3, 45, 55], "cach": [42, 56], "calc_center_of_mass_coordin": 15, "calc_distance_between_st": 15, "calc_horizontal_distance_between_st": 15, "calc_r_and_phi_for_detector": 15, "calc_rphiz_for_detector": 15, "calc_rphiz_for_st": 15, "calc_xy_center_of_mass_coordin": 15, "calcul": [0, 4, 5, 8, 15, 18, 31, 41, 43, 44, 55, 56], "calculate_core_dist": 43, "calculate_core_distance_and_angl": 43, "calculate_ldf_valu": 43, "calendar": 55, "calibr": [0, 29], "call": [3, 20, 22, 24, 25, 28, 29, 30, 31, 33, 34, 45, 46, 55], "can": [1, 2, 3, 4, 5, 7, 9, 10, 11, 12, 14, 15, 16, 17, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 33, 34, 38, 39, 40, 42, 43, 45, 46, 47, 55, 56], "candela": 26, "cannot": [8, 31, 55], "capabl": 32, "care": [8, 14, 33, 40], "carlo": 40, "cartesian": [50, 55], "cartesian_to_compass": 50, "cartesian_to_cylindr": 50, "cartesian_to_polar": 50, "cartesian_to_spher": 50, "case": [5, 9, 10, 16, 21, 30, 55, 56], "caus": 31, "caveat": 10, "ceil": 40, "ceil_in_bas": 56, "celesti": 48, "center": [4, 12, 15, 42, 43, 44, 45, 54], "center_i": 12, "center_x": 12, "centermassalgorithm": 4, "certain": [1, 50, 55], "certainli": [33, 55], "chanc": 45, "chang": [45, 55], "channel": 33, "chapter": [24, 31], "charg": [26, 55], "check": [5, 14, 22, 23, 24, 31, 32, 36, 38, 40, 42, 56], "check_connect": 14, "check_queu": 36, "cherenkov": 18, "cherenkovdata": [18, 24], "cherenkovdatathin": [18, 24], "chi": 4, "chi2best": 4, "choic": [22, 26, 33, 55], "choos": [3, 22], "chosen": [6, 22, 40, 55], "chunkshap": 55, "circl": [12, 40, 42], "class": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 17, 18, 19, 22, 24, 30, 33, 34, 38, 40, 42, 43, 44, 45, 47, 54, 55, 56], "classmethod": [4, 5, 40, 42], "clean": [2, 9, 19, 36, 42], "clear": [40, 55], "click": [33, 55], "clock": [3, 48, 53, 55], "clockwis": 50, "clone": 33, "close": [1, 4, 10, 24, 25, 31], "closest_in_list": 56, "cloud": [4, 30], "cluster": [1, 2, 4, 5, 6, 11, 14, 22, 29, 30, 32, 36, 37, 38, 39, 42, 43, 44, 45, 55], "cluster_amsterdam": 11, "cluster_ensched": 55, "cluster_numb": 14, "cluster_simul": 11, "clusters_in_countri": 14, "cm": [18, 41], "co": [41, 56], "code": [10, 17, 21, 26, 30, 31, 32, 37, 46, 55, 56], "coin": 3, "coincid": [0, 1, 4, 5, 6, 9, 11, 13, 14, 30, 32, 34, 38, 39, 45], "coincidence_ev": 5, "coincidence_event_list": 45, "coincidence_group": [2, 3, 13], "coincidence_id": 45, "coincidence_numb": 14, "coincidence_queri": [0, 2], "coincidence_tim": 14, "coincidencecorereconstruct": 4, "coincidencecorereconstructiondetector": 4, "coincidencedirectionreconstruct": 5, "coincidencedirectionreconstructiondetector": 5, "coincidencenumb": 14, "coincidencequeri": [2, 3], "coincidences_ev": 2, "coincidences_group": 11, "coincidencesesd": [0, 2, 3, 55], "coincidencetim": 14, "col": [11, 31, 55], "collabor": [26, 34], "collect": [14, 20, 37, 46], "collinear": 4, "color": 55, "column": [3, 4, 5, 9, 25, 30, 42, 45, 55], "columnt_trigg": 9, "com": [33, 40, 53, 54, 56], "combin": [2, 4, 5, 19, 22, 37, 45, 55], "come": [22, 40, 42, 43], "command": [14, 28, 29, 31, 36, 55, 56], "comment": 30, "common": [1, 6, 9, 17, 22, 32, 38, 40], "commonli": [37, 56], "compass": [15, 50], "compass_to_cartesian": 50, "compassst": 15, "compat": [3, 34, 55], "compens": 34, "compet": 33, "compil": [18, 22, 24, 33], "complet": [20, 25, 33, 55], "complex": [8, 42], "complic": 10, "compon": [38, 42, 56], "compound": 41, "compress": [31, 55], "compris": 55, "compton": 41, "compton_edg": 41, "compton_energy_transf": 41, "compton_mean_free_path": 41, "comput": [8, 18, 22, 42, 52, 53], "conda": 33, "condens": 55, "condit": [9, 38], "cone": 44, "cone_angl": 44, "conefront": 44, "conefrontsimul": 44, "config": [14, 22], "configur": [14, 22, 29, 32, 56], "confus": [47, 55], "connect": [5, 12, 14, 16], "consid": [3, 6, 9, 55], "consist": [3, 4, 5, 15, 20], "consol": 31, "constant": 45, "constrained_residu": 8, "constraint_normal_vector": 5, "construct": [11, 32, 55], "constructor": 24, "contact": 52, "contain": [0, 2, 3, 4, 5, 6, 8, 9, 10, 11, 14, 15, 17, 20, 24, 25, 27, 30, 31, 33, 34, 37, 38, 39, 40, 42, 45, 46, 48, 54, 55, 56], "content": [32, 36, 55], "contextmanag": 30, "continu": [31, 55], "control": [33, 55], "conv_landau": 8, "conv_landau_for_x": 8, "conveni": [35, 40], "convent": 18, "convers": [14, 23, 26, 48, 54, 55], "convert": [5, 14, 17, 20, 22, 25, 26, 39, 40, 47, 48, 49, 50, 51, 52, 53, 54, 55], "convolut": [8, 40], "convolv": 8, "coordin": [4, 5, 12, 14, 15, 18, 32, 45, 55, 56], "copi": [9, 22, 29], "copy_and_sort_nod": 25, "copy_config": 22, "core": [0, 5, 11, 39, 40, 42, 43, 44, 45, 55], "core_dist": 42, "core_i": 5, "core_po": [42, 43, 44, 45], "core_reconstruct": [0, 4], "core_x": 5, "corner": 15, "correct": [1, 2, 3, 6, 10, 12, 13, 22, 51, 54, 55], "correctli": [22, 32, 42, 46], "correspond": [3, 4, 9, 18, 22, 24, 40, 55], "corsika": [1, 2, 3, 6, 12, 16, 32, 33, 37, 38, 40, 42, 44, 55], "corsika74000linux_epos_gheisha": 22, "corsika74000linux_qgsii_gheisha": 22, "corsika74000linux_qgsjet_gheisha": 22, "corsika74000linux_sibyll_gheisha": 22, "corsika_energi": 22, "corsika_overview": 42, "corsika_queri": [17, 19], "corsikabatch": 22, "corsikaev": 24, "corsikafil": [24, 25], "corsikafile_path": 42, "corsikafilethin": 24, "corsikaoverview_path": 42, "corsikaqueri": [19, 20], "corsikastationfront": 44, "cosmic": [5, 17, 40, 55], "could": [40, 55], "coulomb": 26, "count": [7, 8, 9, 10, 14, 31, 38, 42, 43, 55], "count_scal": 8, "counterclockwis": 50, "countri": 14, "country_numb": 14, "cours": 55, "cover": [15, 33], "cq": 2, "creat": [3, 11, 15, 23, 25, 31, 33, 36, 39, 42, 50, 55], "create_index": 25, "create_input": 22, "create_script": [22, 36], "create_tempfile_path": [20, 25], "creation": [30, 39], "cricl": 12, "criteria": 5, "cron": 23, "cross": [10, 41], "cumbersom": 55, "cumul": [40, 41], "current": [5, 6, 8, 14, 18, 24, 25, 32, 33, 36, 44, 51], "curv": [1, 5, 12], "curvatur": 5, "curvedmixin": 5, "curvedregressionalgorithm": 5, "curvedregressionalgorithm3d": 5, "cut": [7, 10, 55], "cylindr": 50, "cylindrical_to_cartesian": 50, "d": [3, 9, 14, 18, 31, 55], "d0": 15, "d1": [15, 45], "d2": 45, "d3": 45, "d4": 45, "dai": [1, 14, 30, 31, 35, 47, 53, 55], "daq": [10, 55], "dat": [24, 25], "dat000000": [23, 25], "data": [2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 26, 32, 33, 36, 37, 39, 41, 43, 44, 45, 53, 56], "data1": 30, "data8": 55, "data_coincid": [30, 55], "data_reduct": 9, "data_reduction_pad": 10, "data_s501": 55, "data_s501_s502_s503": 55, "data_typ": 29, "databas": [3, 11, 14, 15, 16, 27, 29, 30, 35, 41, 55, 56], "datafil": [1, 9, 11, 13, 30, 31, 34, 35, 43, 55], "dataformat": 24, "datapoint": 7, "datareduct": 10, "dataset": [14, 45], "datastor": 35, "datatyp": 30, "date": [1, 14, 23, 27, 30, 32, 37, 53, 55], "date_to_juliand": 53, "datetim": [1, 3, 9, 13, 14, 30, 31, 35, 47, 53, 55], "datetime_rang": 1, "datetime_to_gp": 53, "datetime_to_juliand": 53, "datetime_to_modifiedjd": 53, "datetimerang": 35, "datum": 54, "david": [31, 37, 55], "de": [17, 24, 26, 37], "deal": 0, "dec": [47, 52, 55], "decca": 5, "decemb": 55, "decent": 31, "decim": [48, 49, 51, 52, 53], "decimal_to_sexagesim": 51, "decimal_to_tim": 53, "declar": 31, "declin": [5, 52], "decor": 56, "decreas": [7, 9, 44], "def": 31, "default": [3, 9, 10, 14, 15, 19, 22, 28, 30, 31, 34, 47, 55, 56], "defin": [4, 5, 8, 10, 15, 24, 26, 30, 31, 35, 38, 55], "definit": [26, 37, 54], "deg": 31, "degre": [15, 19, 22, 26, 31, 49, 50, 51, 52, 53, 54], "degrees_to_hour": 49, "delai": [5, 34, 44], "delay_at_r": 44, "delet": 36, "delete_script": 36, "delta": [0, 1, 3, 8, 45], "denisti": 4, "dens_": 45, "dens_mu": 45, "densiti": [4, 6, 8, 38, 43], "densti": 4, "dep": 33, "depend": [3, 10, 18, 24, 33, 45], "depth": 41, "deriv": [5, 6, 40, 43, 44, 55], "describ": [5, 33, 45, 52], "descript": [21, 45, 47, 55], "design": 3, "desir": [22, 42, 56], "desktop": 33, "despit": 40, "dest_data": 11, "dest_fil": 9, "dest_group": [9, 11], "destin": [3, 9, 11, 13, 20, 25, 30, 35, 55], "destruct": 10, "detail": [3, 17, 24, 55], "detect": [1, 5, 12, 18, 32, 39, 40, 41, 42, 44], "detector": [1, 3, 4, 5, 6, 9, 10, 11, 13, 14, 15, 25, 37, 38, 39, 42, 43, 44, 45, 55, 56], "detector_arrival_tim": 6, "detector_dens": 6, "detector_id": [4, 5, 6, 11, 15], "detector_observ": [39, 42], "detector_s": 15, "detector_timestamp": 15, "detector_timing_offset": [13, 14], "detectorboundarysimul": 42, "detectorst": 5, "determin": [0, 1, 3, 5, 6, 9, 10, 11, 12, 13, 14, 38, 40, 41, 42, 43, 44, 55], "determine_and_store_time_delta": 13, "determine_and_store_time_deltas_for_pair": 13, "determine_best_offset": 5, "determine_best_refer": [1, 5], "determine_cut": 10, "determine_detector_timing_offset": 1, "determine_first_and_last_d": 1, "determine_station_timing_offset": 1, "determine_station_timing_offsets_for_d": 1, "determine_time_deltas_for_pair": 13, "determinestationtimingoffset": 1, "develop": [16, 32, 33, 37], "deviat": 10, "dew_point": 55, "df": 40, "dflt": [9, 45, 55], "diamond": 15, "dict": [11, 14], "dictionari": [4, 5, 11, 14, 31, 39, 42, 43, 44], "did": [31, 38, 55], "differ": [1, 3, 5, 9, 10, 13, 16, 24, 34, 37, 39, 40, 45, 47, 48, 52, 53, 55], "differenti": 41, "difficulti": 33, "digit": 55, "dimension": 26, "dip": 7, "direct": [0, 3, 4, 11, 15, 38, 41, 43, 44, 45, 52, 55], "directalgorithm": 5, "directalgorithmcartesian": 5, "directalgorithmcartesian3d": 5, "direction_reconstruct": [0, 5], "directli": [3, 30, 55], "directori": [20, 22, 23, 25, 33, 55], "disc": [40, 55], "discret": [8, 33], "discrete_convolut": 8, "discuss": 31, "displai": [26, 55], "distanc": [4, 5, 15, 26, 40, 42, 43, 44, 56], "distance_between": 56, "distinguish": 55, "distribut": [0, 1, 4, 7, 38, 40, 41, 56], "divid": 41, "do": [1, 2, 4, 5, 6, 8, 19, 22, 26, 28, 29, 30, 31, 33, 42, 44, 45, 55], "do_someth": 31, "doc": [31, 33, 53], "docstr": 3, "document": [17, 55], "doe": [2, 6, 10, 15, 24, 31, 33, 34, 40, 42, 43, 44, 52, 55], "doi": [5, 8, 44], "domain": 7, "don": [26, 31, 33, 55], "done": [3, 16, 33, 34, 35, 55], "dot": 55, "down": [3, 15], "download": [3, 16, 30, 32, 33, 35], "download_coincid": [3, 13, 30, 31, 55], "download_data": [3, 9, 30, 31, 35, 55], "download_lightn": 30, "dphi_dt0": 5, "dphi_dt1": 5, "dphi_dt2": 5, "drop": 55, "dsigma": 41, "dt": [1, 5, 13, 41, 44, 53], "dt1": 5, "dt2": 5, "dtlimit": 34, "dtype": 55, "due": [5, 9, 10, 38, 40, 55], "duffett": [52, 53], "duplic": 9, "dure": [16, 42], "dx": [5, 15], "dx1": 5, "dx2": 5, "dy": [5, 15], "dy1": 5, "dy2": 5, "dynam": 24, "dz": [1, 5], "dz1": 5, "dz2": 5, "e": [4, 5, 6, 8, 10, 11, 20, 21, 22, 33, 36, 42, 43, 44, 48, 51, 54, 56], "e_max": 40, "e_min": 40, "ea": [0, 32], "each": [1, 2, 3, 4, 5, 6, 9, 10, 11, 14, 15, 20, 22, 24, 25, 38, 40, 42, 45, 51, 55], "earth": [52, 54], "easi": [10, 14, 17, 18, 22, 33, 36, 48, 53, 55], "easier": [3, 15, 55], "easiest": 33, "easili": [2, 3, 15, 16, 17, 47, 55], "east": [15, 52, 53, 54], "ecef": [5, 54], "ecef_to_enu": 54, "ecef_to_lla": 54, "edg": [1, 33, 41, 55], "edit": 40, "editor": 54, "educ": 32, "effect": [31, 38, 40], "effici": 40, "eindhoven": 14, "either": [2, 3, 5, 10, 11, 14, 15, 19, 30, 33, 40, 50, 51, 55], "electron": [4, 14, 21, 26, 40, 41, 42, 43], "element": [9, 10, 30, 56], "ellipsldf": 43, "ellipsldfalgorithm": 4, "ellipsldfsimul": 43, "ellipt": 43, "els": 11, "elsewher": 31, "emploi": 34, "empti": [9, 55], "en": 54, "enabl": [30, 35], "end": [1, 2, 3, 9, 13, 14, 18, 20, 22, 24, 30, 31, 35, 53, 55], "end_index": 24, "endian": 24, "energi": [3, 8, 17, 19, 22, 38, 39, 40, 41, 42, 43, 44, 45, 55], "energy_loss": 8, "energy_transfer_cross_sect": 41, "enough": [6, 54], "ensched": [14, 55], "ensur": [22, 23, 44, 51], "enter": [9, 51], "entir": [10, 14], "enu": [15, 48, 54], "enu_to_ecef": 54, "enu_to_lla": 54, "env": 22, "environ": [16, 22, 33, 55, 56], "enw": 52, "eplu": 26, "eprim": 54, "epsilon": 8, "eq": [5, 8, 40, 43, 44], "eqhor": 52, "equal": [1, 3, 5, 9, 15, 24, 30, 31, 40, 55], "equat": [5, 40, 42, 44], "equatori": [5, 52], "equatorial_coordin": 52, "equatorial_to_horizont": 52, "equatorial_to_horizontal_astropi": 52, "equatorial_to_zenithazimuth": 52, "equatorial_to_zenithazimuth_astropi": 52, "equilater": 15, "err": 56, "error": [1, 5, 6, 14, 33, 38, 42, 43, 44, 56], "error_azimuth": 45, "error_energi": 45, "error_i": 45, "error_matrix": 5, "error_s": 45, "error_x": 45, "error_zenith": 45, "errorlesssimul": 40, "esd": [0, 2, 3, 4, 5, 11, 16, 30, 31, 35, 37], "esi": 26, "estim": [4, 5], "etc": [14, 16, 39, 42, 55], "ethan": 52, "euler": 8, "ev": [19, 22, 26, 40, 41, 42, 43, 44], "evalu": [8, 12], "evapotranspir": 55, "even": [10, 35, 38], "event": [0, 1, 2, 3, 4, 5, 10, 11, 13, 14, 18, 20, 24, 32, 34, 35, 37, 39, 45], "event_group": 3, "event_id": [9, 45, 55], "event_idx": 3, "event_index": 39, "event_r": 9, "event_tim": 14, "event_trac": 14, "event_util": [0, 6], "eventcorereconstruct": 4, "eventdirectionreconstruct": 5, "eventend": [18, 24], "eventhead": [18, 24], "eventobserv": 45, "eventr": 14, "events_from_": 2, "events_from_st": 2, "events_in_clust": 2, "events_in_subclust": 2, "eventtim": 14, "ever": 33, "everi": 31, "everyth": [30, 33, 55], "exact": [8, 14, 42, 43, 47, 52, 55], "exactli": 55, "exampl": [2, 3, 9, 11, 13, 14, 15, 16, 22, 25, 26, 30, 32, 33, 35, 36, 39, 42, 43, 44, 45, 47, 55], "exceed": 34, "except": [2, 15, 31, 56], "exclud": [14, 15, 23], "execut": [22, 33, 55], "exercis": 55, "exhaust": 33, "exist": [10, 11, 30, 34, 35, 39, 55], "expect": [3, 5, 20, 30, 31, 40, 54, 56], "experi": [33, 37, 55], "experiment": [34, 45], "explan": 55, "expos": 35, "express": [22, 36, 43], "ext_timestamp": [3, 9, 13, 14, 45, 55], "extend": [6, 8, 13, 14, 32], "extend_local_data": [14, 27, 28], "extens": [17, 45], "extern": 9, "extra": [36, 40], "extract": [4, 5, 11], "ey": 10, "f": [8, 26, 36, 54], "facil": [17, 32], "fact": [31, 33, 42], "factor": 26, "factorbest": 4, "fail": [33, 56], "fall": [14, 40, 42], "fals": [1, 2, 3, 5, 9, 10, 11, 14, 15, 18, 19, 20, 25, 34, 35, 42, 55, 56], "false_": [9, 45], "familiar": 39, "faq": 53, "far": 30, "fast": [7, 40], "faster": [15, 35, 42], "fastest": [40, 55], "featur": 55, "feel": 55, "fetch": [30, 33, 35], "few": [9, 55], "field": [24, 55], "fig": 44, "figur": [18, 33, 40], "file": [1, 2, 3, 4, 5, 9, 11, 17, 18, 19, 20, 22, 23, 24, 25, 26, 29, 30, 31, 33, 34, 35, 36, 39, 42, 45, 55], "filemam": 24, "filenam": [24, 31, 34], "filter": [0, 1, 2, 9, 10, 19, 24, 42], "filter_large_se": 23, "filter_trac": 10, "final": [3, 31, 34, 38, 45, 55], "find": [0, 1, 3, 5, 7, 9, 13, 15, 21, 33, 34, 39, 55, 56], "find_first_guess_mpv": 7, "find_mpv": [0, 7], "find_station_pair": 13, "findmostprobablevalueinspectrum": 7, "finish": [2, 19, 24, 42], "first": [1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 13, 15, 25, 32, 33, 35, 38, 39, 42, 47, 56], "first_above_threshold": 9, "first_guess": 7, "firstli": 55, "fit": [1, 4, 5, 43, 56], "fit_mpv": 7, "fit_timing_offset": 1, "fitalgorithm3d": 5, "fix": [5, 31, 40, 42, 54, 55], "fixedcoredistancesimul": 42, "flag": [28, 29, 55], "flat": [15, 44], "flatfront": 44, "flatfrontsimul": 44, "flatfrontsimulation2d": 44, "flatfrontsimulation2dwithouterror": 44, "flatfrontsimulationwithouterror": 44, "flatten_clust": 15, "flexibl": 3, "float": [6, 7, 19], "float32": [9, 45, 55], "float32col": [9, 45, 55], "float64": 45, "float64col": 45, "float_filt": 19, "floor_in_bas": 56, "fluctuat": 8, "fly": 55, "fokkema": 37, "fokkema2012": [5, 8, 40, 43, 44], "folder": [23, 55], "follow": [3, 7, 15, 24, 33, 34, 37, 40, 43, 55], "footnot": 55, "for_stat": 55, "forc": [15, 28, 29, 34, 55], "force_fresh": [11, 14, 15], "force_stal": [1, 11, 14, 15], "foremost": 8, "forg": 33, "forget": 26, "form": 47, "format": [3, 18, 20, 22, 24, 30, 34, 55], "formatthin": 18, "former": 3, "formula": [5, 52, 53, 54, 56], "fortran": 24, "found": [3, 9, 17, 33], "four": [15, 55], "fourteen": 55, "fragil": 8, "frame": [42, 44], "framework": [37, 38], "free": 41, "frequenc": 40, "fresh": [14, 28, 29], "friendli": 3, "frill": 30, "from": [0, 1, 3, 4, 5, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 21, 22, 25, 27, 28, 30, 31, 33, 35, 36, 38, 39, 40, 41, 42, 43, 44, 45, 47, 52, 53, 54, 55, 56], "from_ecef_to_enu": 54, "from_geodetic_to_ecef_coordin": 54, "fromwgs84toenutransform": 54, "front": [5, 38, 43], "front_shap": 44, "full": [14, 35, 55], "full_domain": 8, "func": 18, "function": [2, 4, 5, 6, 8, 11, 12, 14, 15, 17, 24, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 46, 48, 52, 55], "further": 52, "furthermor": [3, 33, 55], "g": [4, 5, 8, 11, 20, 22, 33, 48, 51, 56], "game": 33, "gamma": [7, 18, 22, 38, 42, 55], "gamma_energi": 41, "gast": 53, "gauss": 56, "gauss_scal": 8, "gaussian": [1, 8, 40, 56], "gcc": 33, "geant4": 26, "gener": [1, 14, 17, 20, 21, 22, 24, 31, 35, 38, 39, 40, 41, 42, 43, 44, 50, 55, 56], "generate_attenuated_zenith": 40, "generate_azimuth": 40, "generate_core_posit": [40, 42], "generate_corsika_overview": [17, 20], "generate_energi": 40, "generate_random_se": 22, "generate_shower_paramet": [39, 42, 43, 44], "generate_zenith": 40, "geod": 54, "geodetic_system": 54, "geograph": 48, "geographic_coordinate_convers": 54, "get": [0, 1, 2, 3, 8, 9, 11, 14, 15, 18, 19, 20, 21, 22, 23, 24, 28, 29, 30, 31, 35, 40, 42, 43, 55, 56], "get_active_index": 56, "get_and_store_json": 29, "get_and_store_tsv": 29, "get_api_bas": 14, "get_area": 15, "get_arrival_tim": 44, "get_base_url": 30, "get_blob": 35, "get_coincidences_url": 30, "get_coordin": 15, "get_corn": 15, "get_cylindrical_alpha_coordin": 15, "get_cylindrical_coordin": 15, "get_detector_id": 6, "get_detector_offset": [11, 13], "get_end": 24, "get_ev": [3, 24], "get_events_url": 30, "get_head": 24, "get_info": 19, "get_lightning_url": 30, "get_line_boundary_eq": 42, "get_lla_coordin": 15, "get_nod": [3, 55], "get_num_particles_in_detector": 43, "get_particl": 24, "get_particles_in_detector": 42, "get_polar_alpha_coordin": 15, "get_polar_coordin": 15, "get_publicdb_bas": 56, "get_publicdb_xmlrpc_url": 35, "get_raw_trac": 3, "get_rundir": 22, "get_seeds_todo": 23, "get_simul": 20, "get_singles_url": 30, "get_src_bas": 14, "get_stat": 15, "get_station_offset": 5, "get_station_pairs_within_max_dist": 1, "get_station_timing_offset": 11, "get_sub_block": 24, "get_traces_for_ev": 9, "get_traces_for_event_index": 9, "get_traces_for_indexed_event_index": 9, "get_weather_url": 30, "get_xy_coordin": 15, "get_xyalpha_coordin": 15, "gev": 22, "gfortran": 24, "giani": 26, "gist": 54, "git": 33, "github": [32, 33, 53, 54], "give": [3, 14, 15, 55], "given": [2, 3, 5, 6, 7, 10, 12, 14, 15, 18, 19, 20, 30, 40, 41, 42, 43, 44, 53, 55, 56], "global": 36, "gmst": 53, "gmst_to_lst": 53, "gmst_to_utc": 53, "go": [24, 33, 42, 55], "gone": 54, "gonzalez": [17, 18, 24], "good": [22, 31], "got": 33, "goto_rundir": 22, "gov": 41, "govern": 8, "gp": [3, 5, 14, 15, 32, 34, 37, 38, 39, 40, 42, 44, 52, 53, 55], "gps_from_str": 53, "gps_locat": 14, "gps_to_datetim": 53, "gps_to_lst": 53, "gps_to_utc": 53, "gpstime": [47, 55], "gpstimestamp": [47, 55], "gramm": 18, "graph": 55, "graphic": 33, "great": [8, 33, 55], "greater": 9, "greatest": 7, "greatli": 9, "greenwich": 53, "gregorian": 53, "greisen": 43, "grep": 36, "grid": 4, "gridsiz": 4, "ground": [24, 25, 30, 38, 40], "groundparticl": [25, 38, 41, 42, 44, 55], "groundparticlesgammasimul": 42, "groundparticlessimul": [42, 55], "groundparticlessimulationwithouterror": 42, "group": [1, 2, 3, 9, 11, 13, 19, 30, 31, 34, 35, 39, 55], "grow": 31, "guess": 7, "guid": 17, "h5": [2, 3, 9, 11, 13, 20, 23, 25, 30, 31, 35, 39, 42, 43, 44, 55], "ha": [1, 3, 4, 5, 7, 9, 14, 22, 24, 31, 33, 51, 52, 55], "ha_to_ra": 52, "hack": 24, "had": [14, 55], "hadron": 21, "hadron_gener": 18, "hadron_model_high": 18, "hadron_model_low": 18, "half": 44, "hand": [45, 55], "handi": 55, "handl": [8, 24, 30, 33, 39, 53], "handler": [20, 24, 30, 35, 55], "happen": 31, "hard": [33, 55], "hardli": 55, "has_data": 14, "has_weath": 14, "hassl": [33, 55], "have": [2, 3, 6, 13, 14, 15, 24, 26, 31, 33, 36, 40, 42, 45, 52, 54, 55], "haven": 33, "haversin": 56, "hd": 51, "hdf5": [1, 2, 3, 11, 17, 19, 20, 23, 33, 42, 45, 55], "hdf_data": 25, "hdf_temp": 25, "header": [18, 20, 24], "header_index": 24, "heat_index": 55, "heavili": 32, "height": [1, 4, 5, 18, 42, 50], "height_to_thick": 18, "hello": 55, "help": [22, 25, 28, 29, 33, 55], "henc": [3, 55], "here": [4, 5, 10, 17, 24, 26, 55], "hi": 37, "hierarchi": 55, "high": [9, 10, 12, 17, 18, 42, 55], "higher": 40, "him": 52, "hisparc": [0, 1, 2, 4, 5, 6, 7, 11, 12, 13, 16, 17, 26, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 42, 52, 56], "hisparc_group": 34, "hisparc_path": 34, "hisparcnetwork": 15, "hisparcsimul": 40, "hisparcst": [15, 55], "hist": [31, 55], "histogram": [1, 7, 14, 55], "histori": 24, "histtyp": [31, 55], "hit": [4, 6, 38, 42], "hm": 40, "home": 33, "homebrew": 33, "hopefulli": 55, "horizon": 52, "horizont": [5, 43, 52], "horizontal_coordin": 52, "horizontal_to_equatori": 52, "horizontal_to_equatorial_astropi": 52, "horizontal_to_hadec": 52, "horizontal_to_zenithazimuth": 52, "host": 16, "hour": [14, 22, 47, 49, 51, 52, 53, 55], "hourli": 14, "hours_to_degre": 49, "hours_to_radian": 49, "how": [4, 5, 22, 31, 33, 55], "howev": [3, 9, 16, 31, 55], "hrang": 52, "html": [33, 40, 56], "http": [16, 24, 33, 40, 41, 53, 54, 56], "humidity_insid": 55, "humidity_outsid": 55, "hurri": 30, "i": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 26, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 47, 52, 53, 54, 55, 56], "id": [3, 4, 5, 6, 11, 15, 18, 20, 21, 39, 42, 45, 55], "ident": 3, "identif": 21, "identifi": [15, 45, 55], "idx": [3, 9], "ier": 53, "ietf": 53, "ignor": [4, 5, 6, 7, 9, 15, 24, 42, 44], "ignore_exist": 34, "ii": 10, "iii": 10, "imaginari": 38, "immedi": [33, 55], "implement": [5, 10, 40, 41, 42], "import": [2, 3, 9, 10, 11, 13, 14, 15, 16, 21, 30, 31, 33, 35, 36, 39, 42, 43, 44, 55], "imposs": [5, 10], "inadvert": 55, "incid": [40, 41], "includ": [1, 2, 5, 7, 8, 10, 15, 18, 27, 28, 29, 30, 31, 33, 37, 38, 39, 42, 45, 55, 56], "incoher": 41, "incompat": 5, "increas": [7, 52], "inde": 55, "independ": [24, 45], "index": [1, 3, 9, 24, 25, 32, 39, 42, 45, 55, 56], "indic": [3, 7, 10, 14, 45, 55, 56], "individu": [3, 25, 55], "inexact": 52, "info": [14, 19, 34, 35], "inform": [1, 3, 4, 5, 9, 10, 15, 18, 20, 24, 25, 28, 29, 39, 45, 52, 55], "inherit": 39, "init": 44, "initi": [1, 2, 3, 4, 5, 7, 9, 10, 11, 13, 14, 15, 17, 34, 42, 43, 47, 54, 55], "input": [3, 5, 22, 25, 38, 52, 53, 54, 56], "insid": [3, 31, 33, 40, 42, 55], "inspect": [31, 33], "instal": [28, 29, 32, 55], "instanc": [1, 7, 15, 24, 25, 30, 34, 35, 39, 47, 55], "instanti": 55, "instead": [3, 4, 5, 55], "institut": 55, "instruct": [33, 55], "int": 15, "int16": [9, 55], "int16col": [9, 55], "int32": [9, 45], "int32col": [9, 45, 55], "int64": [9, 45], "int64col": 45, "integ": [1, 22, 24, 52, 55], "integr": [8, 9, 10, 14, 39, 55, 56], "intend": [35, 47], "intens": [26, 42], "intent": [2, 3, 19], "interact": [0, 5, 31, 33, 41], "interaction_curv": 5, "intercept": 12, "intercept1": 12, "intercept2": 12, "intercept_1": 12, "intercept_2": 12, "intercept_high": 12, "intercept_low": 12, "interest": [10, 33, 55], "interfac": [24, 37], "intermedi": [5, 45], "intern": 40, "internet": [14, 28, 29, 33], "interpol": 9, "interpret": [15, 42, 44, 47, 55], "intersect": [4, 12], "interv": [1, 30, 35, 55], "introduc": 55, "introduct": [33, 53], "invalid": 9, "invari": [31, 55], "invers": [12, 40, 52], "inverse_linear": 12, "inverse_zenith_prob": 40, "investig": 34, "invit": 47, "involv": 33, "io": 42, "ioniz": [7, 55], "ipython": [31, 33, 55], "iron": 22, "is_cherenkov": 18, "is_detect": 18, "is_fit": 7, "is_nucleu": 18, "is_particl": 18, "is_us": 31, "is_useful_and_import": 31, "isbn": [52, 53], "isnan": [11, 31, 55], "issu": [10, 33], "isvhecri": 5, "item": 56, "iter": [1, 2, 5, 9, 19, 52, 56], "its": [15, 22, 33, 45, 55, 56], "itself": 33, "j": 40, "j2000": 52, "jan": 55, "januari": [53, 55], "javier": [17, 18, 24], "jd": 53, "jit": 18, "job": [17, 22, 23, 36, 37], "job_1": 36, "join": 7, "json": [14, 28, 29], "juli": [53, 55], "julian": 53, "juliand": 53, "juliandate_to_gmst": 53, "juliandate_to_modifiedjd": 53, "juliandate_to_utc": 53, "jun": 30, "just": [9, 30, 42, 44, 47, 53, 55], "k_core_po": 45, "k_dens_": 45, "k_dens_mu": 45, "k_energi": 45, "k_num_": 45, "k_num_mu": 45, "k_p200": 45, "k_t200": 45, "kamata": 43, "kascad": [32, 37, 43, 45], "kascade_filenam": 34, "kascade_group": 34, "kascade_path": 34, "kascadecoincid": 34, "kascadeev": 45, "kascadeldf": 43, "kascadeldfsimul": 43, "kascadeldfsimulationwithouterror": 43, "keep": [10, 24, 31, 48], "kei": [4, 5, 19, 39], "kelvin": 26, "kernel": 8, "kind": [19, 22, 39], "kinemat": 41, "klucar": 54, "km": 26, "knmi": [30, 55], "know": [4, 5, 30, 31, 33, 34, 55], "knowledg": 5, "known": [54, 55], "ko": 11, "kwarg": [19, 40, 42, 43, 44, 56], "laat": [17, 24, 26, 37], "label": 55, "labview": 10, "lai": 15, "lambda": 8, "landau": [0, 40], "landau_pdf": 8, "languag": 33, "larg": [5, 6, 23, 28, 29, 33, 44, 55], "larger": [10, 31], "largest": 7, "last": [1, 3, 30, 31, 35, 55], "later": [4, 10, 34, 38, 55], "latest": [14, 27, 33], "latitud": [15, 52, 54], "latlong": 56, "latter": [3, 31], "launcher": 33, "law": 40, "layer": 8, "layout": [11, 14, 15, 31, 55], "ldf": [38, 43], "ldf_valu": 43, "leap": [34, 53, 55], "leap_second": 53, "least": [2, 4, 5, 10, 42, 45, 55], "left": [7, 10, 15], "legaci": [48, 52], "leiden": 14, "len": 55, "length": [1, 3, 10, 40, 50, 56], "leo": 41, "lepton": [42, 43, 45], "less": [3, 5, 10, 14, 33, 40, 44], "let": [45, 55], "letter": 55, "level": [21, 24, 32, 33], "lf": 8, "lib": 31, "librari": 33, "light": [40, 56], "lightn": 30, "lightning_typ": 30, "like": [3, 4, 5, 9, 10, 14, 15, 19, 22, 24, 30, 31, 35, 39, 42, 45, 47, 55], "limit": [3, 9, 19, 30, 34, 42], "line": [3, 4, 5, 12, 28, 29, 30, 31, 42, 55, 56], "linear": [9, 12], "linear_circle_linear": 12, "linear_intersect": 12, "link": [15, 55], "linspac": [31, 55], "linux": [24, 33], "lio": 41, "list": [1, 2, 3, 4, 5, 6, 9, 10, 11, 14, 15, 22, 23, 30, 33, 39, 40, 42, 53, 55, 56], "littl": 55, "live": 33, "ll": [31, 33, 55], "lla": [15, 54], "lla_to_ecef": 54, "lla_to_enu": 54, "load": [14, 15, 30, 42], "load_coincid": 30, "load_data": 30, "local": [14, 15, 16, 32, 37, 47, 52, 53, 55], "localhost": 16, "locat": [5, 7, 14, 15, 28, 53, 55], "log": [12, 32, 55], "log10": [12, 19, 22], "log_linear": 12, "logbook": 43, "logic_check": 5, "loglog_linear_circle_linear": 12, "loglog_xy_circle_linear": 12, "long": [15, 22, 24, 33, 36], "longer": [10, 42, 55], "longitud": [15, 52, 53, 54], "look": [2, 3, 20, 24, 30, 31, 33, 34, 39, 45], "lookup": [3, 55], "loop": [11, 56], "loran": 5, "loss": [8, 40], "lot": [33, 55], "low": [9, 10, 12, 32, 42, 55], "lower": [12, 42], "lr": 15, "lst": [52, 53], "lst_to_gmst": 53, "lucki": 33, "lumin": 26, "m": [4, 5, 15, 18, 26, 40, 43, 56], "made": [8, 14], "mai": [10, 16, 30, 40, 42, 45, 55], "main": [20, 22, 23, 24, 25, 28, 29, 55], "mainli": 15, "mair": 26, "major": 33, "make": [3, 7, 9, 10, 15, 17, 22, 28, 29, 33, 36, 39, 45, 52, 54, 55, 56], "make_rel": 56, "make_rundir": 22, "man": 14, "manag": 33, "mandatori": 47, "mani": [5, 17, 22, 33, 42, 47, 55], "manual": [3, 17, 18, 21, 24, 55], "mark": 52, "mass": [4, 15, 21], "master": 33, "match": [2, 9, 10, 11, 19, 34], "math": 40, "mathworld": 40, "matplotlib": [11, 33, 55], "matric": 48, "matrix": 50, "matter": [8, 33], "max": [22, 40], "max_core_dist": [42, 43, 44], "max_dist": 1, "max_energi": [42, 43], "max_energy_deposit_in_mip": 41, "max_iter": 5, "max_queuabl": 36, "max_user_queu": 36, "max_valu": [19, 40], "maximum": [7, 9, 10, 36, 40, 41, 42, 43], "mb": 28, "mean": [1, 4, 9, 10, 14, 15, 41, 53, 55], "mean_filt": 10, "mean_filter_with_threshold": 10, "mean_filter_without_threshold": 10, "meanfilt": 10, "meant": [10, 15, 24], "measur": [3, 4, 11, 43, 45], "median": 44, "memois": 56, "memoiz": 56, "mention": 18, "messag": 33, "meta": 11, "metadata": [11, 16, 55], "meter": [5, 15, 26, 40, 42, 43, 54], "method": [3, 4, 5, 7, 9, 13, 14, 24, 30, 40, 47, 55, 56], "mev": [8, 41], "mev_scal": 8, "mid": 30, "midnight": [5, 53], "midnight_t": 5, "might": [3, 6, 33, 45, 55], "mil": 53, "milli": 10, "mimic": 10, "min": 40, "min_energi": [42, 43], "min_len_dt": 1, "min_n": 45, "min_n134": 45, "min_valu": [19, 40], "mind": [33, 54, 55], "minim": 5, "minimum": [2, 7, 30, 40, 43, 55], "minimum_events_for_coincid": 2, "minut": [22, 47, 51, 55], "mip": [0, 1, 4, 6, 7, 12, 40, 41, 42, 43, 55], "misalign": 10, "misconfigur": 3, "miss": [10, 15, 33, 55, 56], "mjd": 53, "mm": 26, "mode": 31, "model": 40, "modif": [26, 30, 55], "modifi": [15, 26, 43, 53], "modifiedjd": 53, "modifiedjd_to_juliand": 53, "modifiedjd_to_utc": 53, "modifiedjf": 53, "modul": [1, 3, 4, 5, 6, 8, 9, 10, 11, 12, 16, 18, 24, 25, 27, 30, 31, 32, 34, 35, 36, 37, 38, 41, 45, 47, 52, 54, 56], "mole": 26, "moment": [5, 31, 55], "momenta": [41, 42], "mon": [30, 55], "mont": 40, "montanu": [5, 40, 43], "montanus2014": [5, 40], "month": [14, 47, 53, 55], "more": [3, 5, 7, 10, 15, 28, 31, 35, 42, 47, 55], "moreov": 10, "most": [0, 1, 7, 8, 10, 31, 35, 55], "mostli": 33, "movabl": 56, "move": [15, 22], "move_tempfile_to_destin": 20, "mpv": 0, "mu": 56, "much": [15, 33, 55], "multipl": [3, 4, 10, 11, 15, 22, 31, 40, 42, 45, 55, 56], "multiple_job": 22, "multiplegroundparticlessimul": 42, "multipli": 22, "muon": [24, 40, 42], "muoncorr": 43, "must": [3, 8, 11, 14, 19, 33, 55], "mv": [10, 55], "my": [33, 55], "my_fil": 24, "mydata": 55, "n": [2, 3, 5, 6, 7, 10, 20, 22, 30, 39, 40, 42, 43, 44, 45, 55, 56], "n1": [9, 39, 45, 55], "n2": [9, 39, 45, 55], "n3": [9, 39, 45, 55], "n4": [9, 45, 55], "n_detector": [14, 40], "n_electron": 43, "n_event": 14, "n_peak": [9, 10], "n_xyz": 5, "name": [3, 4, 5, 9, 11, 13, 17, 19, 20, 21, 22, 25, 30, 31, 36, 52, 55, 56], "name_of_script": 31, "namespac": 55, "nan": [4, 5, 11, 31, 55], "nanosecond": [3, 6, 9, 14, 26, 45, 55], "nasa": 55, "navi": 53, "navig": 33, "nearest": 56, "necessari": [4, 5, 9], "need": [0, 2, 8, 18, 24, 26, 30, 31, 33, 35, 38, 39, 55], "neg": [44, 53], "nest": 14, "nested_network": 14, "nesw": 52, "net": 24, "netherland": 55, "network": [1, 14, 15, 29, 40, 55], "neutrino": 42, "neutron": 21, "never": 24, "new": [20, 23, 31, 33, 42, 48, 52, 55, 56], "newcom": 55, "newer": 33, "newi": 4, "newli": 39, "newx": 4, "next": 38, "nikhef": [15, 17, 22, 24, 26, 32, 40, 55], "nishimura": 43, "nist": 41, "nkg": 43, "nkgldf": 43, "nkgldfsimul": 43, "nkgldfsimulationwithouterror": 43, "nl": [16, 24, 26], "node": 11, "non": [3, 42, 55], "none": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 14, 15, 19, 25, 30, 34, 35, 39, 43, 45, 56], "nonetheless": 55, "noon": 53, "nor": 40, "norm_angl": 56, "normal": [3, 7, 8, 9, 16, 24, 56], "north": [15, 52, 54], "notat": [48, 54, 55], "note": [5, 6, 10, 14, 18, 36, 40, 45, 53, 55], "noth": [31, 55], "notifi": 55, "now": [7, 31, 33, 55], "np": [9, 45, 52], "num_": 45, "num_ev": 14, "num_mu": 45, "number": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 20, 22, 24, 30, 31, 34, 35, 36, 39, 40, 42, 43, 45, 47, 51, 53, 55], "number_of_ev": 14, "numer": [7, 26], "numpi": [7, 10, 11, 14, 33, 40, 55], "o": [16, 42], "object": [1, 3, 4, 5, 6, 11, 14, 15, 24, 30, 46, 53, 54, 55], "observ": [3, 9, 10, 21, 24, 38, 39, 42, 43, 45, 52, 55], "observation_level": 18, "obtain": [3, 7, 9, 13, 32], "occas": 16, "occur": [2, 40, 55], "oct": 55, "octob": 55, "odd": 10, "off": [7, 10, 33], "offici": [16, 55], "offset": [0, 1, 5, 6, 11, 13, 14, 40, 55], "often": [0, 6, 40, 42, 55], "old": [3, 4, 15, 31, 37], "omit": 55, "onc": [3, 55], "one": [2, 3, 5, 8, 10, 14, 15, 18, 20, 24, 30, 31, 33, 35, 40, 42, 45, 55], "ongo": 37, "onli": [0, 2, 3, 4, 5, 8, 9, 10, 14, 15, 24, 30, 33, 35, 36, 42, 43, 44, 45, 55], "onto": 41, "oostenbrugge2014": 10, "open": [2, 14, 19, 24, 30, 31, 33, 44, 55], "open_fil": [3, 9, 11, 13, 30, 31, 35, 39, 42, 43, 44, 55], "oper": [33, 52], "opinion": 33, "opt": 55, "optim": 40, "option": [3, 4, 5, 10, 14, 15, 18, 25, 30, 31, 36, 55], "order": [10, 22, 24, 52, 55], "org": [33, 53, 54], "organ": 2, "organis": 29, "orient": [15, 42], "origin": [3, 9, 15, 17, 42, 54, 55, 56], "orthogon": 5, "oscil": 10, "other": [1, 2, 3, 5, 10, 16, 24, 30, 31, 33, 35, 45, 55], "otherwis": [3, 5, 11, 15, 42], "our": [23, 55, 56], "ourselv": 33, "out": [4, 15, 24, 33, 37, 55], "outdat": 33, "outer": 15, "output": [11, 17, 20, 22, 24, 55], "output_path": 39, "over": [1, 6, 10, 11, 15, 24, 54, 56], "overrid": 15, "overview": [17, 22, 42, 55], "overwrit": [3, 5, 9, 11, 16, 25, 31, 34, 55], "overwritten": [31, 55], "own": [33, 55], "p": [4, 8, 11, 25, 40, 41, 43], "p0": 42, "p1": 42, "p2": 42, "p200": 45, "p38": 52, "p_": 42, "p_x": 18, "p_y": 18, "p_z": 18, "packag": [17, 27, 28, 29, 31, 32, 33, 37, 38, 46, 55], "pad": 10, "page": [14, 32, 33, 55], "pair": [0, 1, 3, 13, 41], "pair_mean_free_path": 41, "pairwis": 1, "paper": 43, "parallel": 42, "param": [19, 24, 30], "paramet": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 19, 20, 21, 22, 24, 25, 30, 34, 35, 36, 38, 39, 40, 41, 42, 43, 44, 45, 49, 50, 51, 52, 53, 54, 55, 56], "park": 15, "part": [3, 7, 8, 10, 15, 40, 51, 55, 56], "particip": [2, 3, 39, 45, 55], "particl": [3, 4, 6, 7, 8, 9, 17, 18, 19, 22, 24, 25, 38, 39, 40, 41, 43, 44, 45, 55], "particle_data": 18, "particle_data_thin": 18, "particle_id": 21, "particlecountersimul": 42, "particledata": [18, 24], "particledatathin": [18, 24], "particular": [3, 24], "pass": [4, 5, 10, 21, 24, 30, 40, 42, 44, 55], "patch": 55, "path": [1, 2, 3, 13, 19, 20, 22, 25, 30, 34, 36, 39, 40, 41, 42, 55], "pathnam": 9, "pattern": 10, "paul": 26, "paulbourk": 24, "pbar": 56, "pdf": 8, "pdf_domain": 8, "pdf_kernel": 8, "pdf_kernel2": 8, "pdf_valu": 8, "peak": [0, 7, 10, 55], "per": [2, 5, 7, 8, 14, 30, 43], "perfect": [19, 42, 43, 44], "perfectli": 10, "perform": [0, 2, 7, 8, 18, 19, 23, 32, 38, 39, 42, 44, 46, 49, 50, 51, 52, 54], "perform_queri": [2, 19], "permut": 40, "person": [33, 52, 53], "perspect": 42, "ph": 55, "phd": 37, "phi": [4, 5, 11, 15, 18, 43, 45, 50], "phi1": 5, "phi2": 5, "photon": [18, 41], "php": 53, "pi": [40, 56], "pick": 40, "pictur": 55, "pip": 33, "place": [15, 24], "plai": 55, "plane": [5, 15, 43, 50, 52], "platform": [24, 33], "pleas": [3, 31, 32, 33, 55], "plot": 33, "plot_zenith_distribut": 31, "plt": [11, 31], "pml": 41, "pmt": [1, 12, 14, 40, 55], "po": [9, 45, 55], "point": [2, 3, 4, 5, 12, 15, 19, 30, 42, 54, 55], "pointer": 3, "poisson": 43, "polar": [11, 43, 50], "polar_to_cartesian": 50, "posit": [4, 5, 7, 11, 15, 39, 40, 42, 43, 44, 45, 52, 53, 55, 56], "positron": [21, 26], "possibl": [4, 5, 14, 22, 29, 30, 33, 55, 56], "possibli": [9, 33], "post": 10, "post_trigg": 10, "power": [22, 40], "practic": 31, "pre": 10, "pre_trigg": 10, "precis": [6, 24, 40], "prefer": [14, 33, 52], "prefix": 55, "preliminari": [3, 55], "prepar": [4, 5, 11], "prepare_env": 22, "prepare_output": [11, 20], "prerequisit": 32, "present": [6, 31, 55, 56], "prevent": [10, 28, 29], "previou": [3, 4, 5, 31, 55], "previous": [3, 9, 30, 33], "price": 53, "primari": [5, 19, 22, 40, 45], "print": [14, 21, 22, 26, 30, 31, 55], "prior": 10, "probabl": [7, 8, 31, 33, 40, 44], "probid": 24, "problem": 31, "proc": 9, "process": [0, 1, 3, 6, 13, 17, 20, 23, 33, 34, 39, 55], "process_and_store_result": 9, "process_detector_observ": 39, "process_ev": [0, 3, 9], "process_tim": 53, "process_trac": [0, 9, 10], "processdatat": 9, "processdatatablefromsourc": 9, "processed_events_descript": 9, "processev": 9, "processeventsfromsourc": 9, "processeventsfromsourcewithtriggeroffset": 9, "processeventswithlint": 9, "processeventswithouttrac": 9, "processeventswithtriggeroffset": 9, "processindexedev": 9, "processindexedeventswithlint": 9, "processindexedeventswithouttrac": 9, "processsingl": 9, "processsinglesfromsourc": 9, "processtimedelta": 13, "processweath": 9, "processweatherfromsourc": 9, "produc": [41, 55], "product": 41, "program": [17, 32, 33, 37, 56], "progress": [1, 3, 4, 5, 9, 11, 13, 20, 22, 25, 28, 29, 30, 34, 39, 55], "progressbar": [1, 3, 9, 11, 13, 20, 22, 25, 30, 37, 39, 55, 56], "project": [41, 42], "prompt": [33, 55], "proper": 46, "properti": [10, 14, 15, 18, 19, 24, 38], "proton": [19, 21, 22, 44], "provid": [3, 5, 10, 11, 14, 15, 17, 24, 33, 34, 38, 39, 45, 55], "pseudo": 39, "public": [3, 7, 11, 14, 15, 16, 27, 29, 30, 32, 37, 55, 56], "publicdb": [9, 14, 15, 16, 35, 37, 55], "publicdb_bas": [16, 56], "pull": 33, "puls": [9, 10], "pulse_height": 14, "pulse_integr": 14, "pulseheight": [6, 9, 10, 14, 39, 55], "pulseintegr": [0, 14], "purpos": 22, "py": [31, 33, 41], "pydata": 33, "pylab": [31, 55], "pypi": 33, "pyplot": 11, "pysparc": 10, "pytabl": [1, 2, 3, 9, 11, 13, 19, 20, 25, 30, 34, 35, 39, 45, 55], "python": [14, 16, 17, 24, 31, 55], "python2": 31, "q": [22, 36], "qstat": 36, "qsub": [36, 37], "qsub_corsika": [17, 22], "qsub_store_corsika_data": [17, 23], "quantiti": [24, 26, 56], "queri": [25, 42, 55], "queu": 23, "queue": [22, 23, 36], "quick": [33, 55], "quick_download": [30, 55], "quickli": [22, 30, 55], "quit": [4, 33], "r": [5, 15, 18, 40, 41, 43, 44, 45, 50, 55], "r0": 43, "r1": 5, "r2": 5, "r_max": [40, 42], "ra": 52, "racal": 5, "rad": [4, 43], "radial": 5, "radial_core_dist": 5, "radian": [5, 15, 26, 40, 41, 43, 49, 50, 52, 56], "radians_to_hour": 49, "radiu": [12, 40, 42], "rai": [5, 17, 40, 55], "rain_rat": 55, "rais": [15, 56], "random": [22, 39, 40, 41, 42, 43], "randomnumb": 40, "rang": [1, 7, 19, 35, 55, 56], "range_filt": 19, "raw": [3, 10, 14, 35, 55], "raw_fil": 24, "raw_trac": 10, "re": [30, 33, 55], "read": [1, 10, 11, 17, 20, 24, 25, 30, 33, 34, 55], "read_and_store_data": 34, "read_dt": 1, "read_se": 20, "read_wher": 55, "reader": 17, "readlineandstoreeventclass": 30, "readlineandstorelightningclass": 30, "readlineandstoresinglesclass": 30, "readlineandstoreweatherclass": 30, "real": [3, 15, 24, 30, 38], "realiz": 55, "realli": 33, "reason": [14, 33, 55], "rec": [11, 31, 55], "receiv": 40, "recent": [5, 31], "recogn": 55, "recoil": 41, "recoil_energi": 41, "recombin": 10, "recommend": [3, 33, 52], "reconstruct": [0, 2, 3, 6, 9, 10, 15, 32, 39, 45, 56], "reconstruct_and_stor": [11, 31, 55], "reconstruct_coincid": [4, 5], "reconstruct_common": [4, 5], "reconstruct_cor": 11, "reconstruct_direct": 11, "reconstruct_equatori": 5, "reconstruct_ev": [4, 5], "reconstructed_phi": 45, "reconstructed_theta": 45, "reconstructedcoincid": 45, "reconstructedev": 45, "reconstructedkascadeev": 45, "reconstructesdcoincid": [11, 31, 55], "reconstructesdcoincidencesfromsourc": 11, "reconstructesdev": [11, 55], "reconstructesdeventsfromsourc": 11, "reconstructions_from_st": 2, "reconstructsimulatedcoincid": 11, "reconstructsimulatedev": 11, "reconstuct": 0, "record": [9, 14, 18], "recreat": 55, "reduc": [5, 10, 40, 42], "reduce_trac": 10, "reduct": 10, "ref_llacoordin": 54, "ref_stat": [1, 13], "refer": [1, 5, 6, 8, 14, 15, 17, 32, 39, 45, 53, 54, 55], "reference_azimuth": 45, "reference_energi": 45, "reference_ext_timestamp": 6, "reference_i": 45, "reference_phi": 45, "reference_s": 45, "reference_st": 14, "reference_theta": 45, "reference_x": 45, "reference_zenith": 45, "regardless": 45, "region": 14, "regist": 55, "regress": 5, "regressionalgorithm": 5, "regressionalgorithm3d": 5, "regular": [3, 30, 39], "rel": [1, 5, 6, 8, 9, 14, 15, 44, 52, 55, 56], "rel_phi_errorsq": 5, "rel_theta1_errorsq": 5, "rel_theta2_errorsq": 5, "relat": [21, 37, 49, 50], "relative_detector_arrival_tim": 6, "releas": 33, "relev": [4, 5, 43], "remain": [1, 23, 41, 42, 55], "rememb": 55, "remov": [9, 10, 31, 36], "renam": [9, 52], "reopen": 31, "replac": 3, "replic": 10, "repositori": [32, 33], "repres": [6, 53, 56], "represent": 8, "reproduc": 10, "request": 36, "requir": [4, 5, 10, 14, 19, 28, 29, 33, 42, 45, 53, 55], "rerun": 31, "research": [32, 37, 55], "residu": 8, "resp": 43, "respect": 15, "respons": [1, 12, 38, 39, 40, 42, 43, 44], "rest": 56, "restrict": 7, "result": [3, 4, 5, 8, 9, 11, 13, 14, 15, 20, 24, 30, 31, 39, 40, 42, 43, 44, 45, 46, 55], "retriev": [11, 13, 14, 15, 33, 55], "return": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 18, 19, 20, 21, 22, 24, 25, 30, 31, 33, 35, 36, 39, 40, 41, 42, 43, 44, 46, 47, 49, 50, 51, 52, 53, 54, 55, 56], "return_offset": 10, "reus": 42, "rework": 54, "ridicul": 55, "right": [5, 7, 10, 15, 52, 55], "right_ascens": 52, "risk": 33, "root": [3, 31, 55], "rootgroup": [30, 55], "rossi": 40, "rotat": [15, 42, 44, 45, 48, 50], "rotate_cartesian": 50, "rotation_matrix": 50, "round_in_bas": 56, "row": [1, 2, 3, 6, 9, 19, 20, 25, 39, 42, 45, 55], "rpc": 35, "rudimentari": 3, "run": [16, 18, 22, 23, 24, 25, 28, 29, 31, 33, 36, 39, 40, 42, 43, 44, 46], "run_id": 45, "run_test": [33, 46], "runend": [18, 24], "runhead": [18, 24], "s0": [1, 3, 15], "s1": [1, 3, 15, 43], "s102": 55, "s2": [1, 15, 43], "s3": 1, "s501": [3, 30, 31, 35, 55], "s503": [3, 55], "s506": 55, "s_index": [3, 13, 55], "sai": 55, "said": 55, "same": [3, 5, 10, 14, 15, 24, 39, 42, 43, 45, 47, 52, 55, 56], "sampl": [10, 22, 40], "saniti": 24, "sapphir": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 34, 35, 36, 39, 40, 41, 42, 43, 44, 45, 46, 47, 49, 50, 51, 52, 53, 54, 56], "sappir": 11, "sat": [47, 55], "satisfi": 42, "save": [9, 25, 47, 55], "save_particl": 25, "save_thinned_particl": 25, "sawtooth": 10, "scale": 55, "scatter": 41, "scenario": 33, "schultheiss": [5, 40], "scienc": [15, 55], "scienceparkclust": [15, 39, 42, 43, 44], "scientif": 33, "scinitil": 41, "scintil": [8, 40, 41, 55], "scintillator_depth": 41, "scipi": 33, "scope": 31, "screen": 55, "screw": 55, "script": [20, 22, 23, 25, 28, 29, 32, 33, 36, 37, 42, 55, 56], "script_path": 36, "search": [0, 30, 32, 34, 35], "search_and_store_coincid": [3, 55], "search_coincid": [3, 34], "sec": [5, 40, 44], "second": [3, 8, 12, 15, 31, 34, 42, 47, 51, 52, 53, 55], "secondli": 55, "section": [18, 24, 41], "see": [3, 15, 22, 30, 35, 38, 42, 43, 55], "seed": [19, 20, 22, 23, 39, 42], "seed1": [19, 20], "seed1_seed2": 22, "seed2": [19, 20], "seeds_in_queu": 23, "seeds_process": 23, "seeds_todo": 23, "seen": [22, 25, 55], "segment": 12, "sel_ev": 55, "select": [1, 4, 17, 25, 35, 36, 38, 42, 55], "select_newlist": 4, "select_simul": 42, "selectbest": 4, "self": [9, 34, 39], "semi": 3, "sensor": 56, "separ": [3, 10, 22], "sequenc": 22, "seriou": 8, "server": [14, 15, 16, 28, 29, 35, 55], "session": 33, "set": [4, 5, 9, 14, 15, 16, 19, 20, 23, 33, 38, 42, 44, 45, 55, 56], "set_center_off_mass_at_origin": 15, "set_coordin": 15, "set_cylindrical_coordin": 15, "set_timestamp": 15, "setup": [2, 19, 22, 33, 34, 43], "sever": [3, 9, 33, 38, 40, 55], "sexagesim": [48, 51], "sexagesimal_to_decim": 51, "sexagism": 51, "sf": 8, "shape": [7, 9, 15, 43, 44, 45, 55], "shift": [3, 8, 34], "short": [22, 24, 31, 55], "shorten": 55, "shorthand": 11, "should": [5, 6, 8, 10, 14, 15, 20, 24, 26, 31, 33, 35, 40, 43, 44, 51, 55, 56], "show": [1, 3, 4, 5, 9, 11, 13, 20, 22, 25, 28, 29, 30, 31, 39, 55, 56], "shower": [0, 3, 4, 5, 6, 14, 17, 19, 22, 23, 24, 38, 39, 40, 42, 43, 45, 55], "shower_id": 39, "shower_paramet": [39, 42, 43, 44], "showerfront": [38, 44], "shown": 34, "si": 26, "side": [15, 31, 42, 55], "sider": 53, "sideri": 52, "sigma": 56, "sign": 51, "signal": [0, 10, 38, 40, 41, 42, 55], "signal_calibr": [0, 12], "signific": [8, 10, 55], "sim": [39, 42, 43, 44], "similar": [18, 39, 55], "simpl": [4, 7, 15, 31, 38, 40, 43, 44, 55], "simpleclust": 15, "simpli": [3, 4, 5, 9, 28, 29, 33, 45, 46, 55, 56], "simplifi": [37, 55], "simul": [0, 3, 6, 11, 15, 22, 24, 25, 32, 37, 45], "simulate_adc_sampl": 40, "simulate_all_detector": 39, "simulate_and_store_offset": 40, "simulate_detector_mip": [40, 42], "simulate_detector_mips_for_gamma": 42, "simulate_detector_mips_for_particl": 42, "simulate_detector_mips_gamma": 41, "simulate_detector_offset": 40, "simulate_detector_respons": [39, 42, 43, 44], "simulate_events_for_show": 39, "simulate_gp": [39, 42, 44], "simulate_gps_uncertainti": 40, "simulate_particles_for_dens": 43, "simulate_signal_transport_tim": 40, "simulate_station_offset": 40, "simulate_station_respons": 39, "simulate_trigg": [39, 42], "simulations_group": 19, "simulations_t": 20, "simultan": [14, 22, 42], "sinc": [6, 53, 55], "singl": [4, 5, 9, 10, 11, 13, 14, 15, 24, 26, 30, 31, 39, 40, 47, 55], "singledetectorst": 15, "singlediamondst": 15, "singlest": 15, "singletwodetectorst": 15, "site": [31, 55], "six": 55, "size": [0, 6, 9, 15, 24, 31, 43, 45, 55], "skip": [3, 15, 28, 29], "skip_miss": 15, "slash": 55, "slightli": [3, 10, 26, 42, 54], "slope": 12, "slope1": 12, "slope2": 12, "slope_1": 12, "slope_2": 12, "slope_high": 12, "slope_low": 12, "slot": 36, "slow": 40, "slower": 42, "small": [10, 31, 33, 55], "smaller": [3, 33], "smith1990": [52, 53], "snippet": 33, "so": [2, 10, 21, 22, 24, 26, 31, 33, 34, 42, 45, 53, 55], "softwar": [31, 33], "solar_rad": 55, "some": [7, 9, 10, 24, 30, 32, 33, 36, 40, 45, 54, 55, 56], "someth": [31, 55], "sometim": 17, "somewhat": 55, "sort": [9, 13, 25, 56], "sourc": [3, 5, 9, 11, 14, 20, 22, 25, 33, 34, 40, 56], "source_data": 11, "source_fil": 9, "source_group": [9, 11], "space": [12, 33, 55], "span": 55, "speak": 55, "special": [24, 31, 35, 55], "specif": [2, 3, 5, 14, 15, 35], "specifi": [2, 14, 18, 21, 30, 34, 47, 50, 55], "specific_ev": 2, "spectrum": [7, 40, 55], "speed": [25, 42, 52, 56], "sphere": 40, "spherealgorithm": 5, "spherepointpick": 40, "spheric": 50, "spherical_to_cartesian": 50, "split": [1, 22], "spread": 1, "spyder": [33, 55], "squar": [4, 5, 31, 40, 42], "src_url": 14, "stabl": [4, 33], "stackoverflow": 56, "stand": 31, "standard": [10, 22, 26, 54], "start": [1, 2, 3, 4, 6, 9, 13, 14, 16, 24, 30, 31, 32, 33, 35, 55], "statement": [31, 40, 55], "static": [4, 5, 9, 14, 43], "station": [0, 1, 2, 4, 5, 6, 9, 10, 11, 13, 14, 15, 28, 29, 30, 32, 34, 35, 37, 38, 39, 40, 42, 44, 45, 55], "station_1": 14, "station_2": 14, "station_506": 11, "station_7001": 55, "station_7002": 55, "station_7003": 55, "station_arrival_tim": 6, "station_dens": 6, "station_ev": 39, "station_group": [3, 9, 11, 55], "station_id": [3, 15, 35, 39, 45], "station_idx": 3, "station_info": 14, "station_layout": 14, "station_numb": [3, 4, 5, 11, 14, 29, 30, 55], "station_observ": [39, 42, 44], "station_path": [3, 11, 55], "station_timestamp": 15, "station_timing_offset": 14, "stations_in_subclust": 14, "stations_with_data": 14, "stations_with_weath": 14, "statist": 40, "statu": 14, "std_dev": [9, 10], "stddev": 40, "steep": 40, "steer": 22, "step": [1, 7, 31, 32], "steradian": 26, "still": [2, 3, 5, 19, 31, 32, 55], "stoomboot": [17, 32, 37], "stop": [2, 30, 32, 35], "storag": [32, 34, 37], "store": [3, 9, 11, 13, 17, 20, 23, 30, 34, 35, 38, 39, 40, 45, 55], "store_and_sort_corsika_data": 25, "store_coincid": [3, 34, 39], "store_command": 23, "store_corsika_data": [17, 23, 25, 42], "store_lin": 30, "store_offset": 11, "store_reconstruct": 11, "store_station_observ": 39, "store_time_delta": 13, "storekascadedata": 34, "strength": [38, 40], "stress": 42, "string": [2, 19, 22, 30, 39, 47, 53, 55], "struct": 24, "structur": 55, "stuff": [31, 53], "sub": [18, 24, 55], "subblock": [17, 18], "subclass": [3, 9, 39], "subclust": [2, 14, 15], "subcluster_numb": 14, "subclusters_in_clust": 14, "subdirectori": 20, "subgroup": 13, "submiss": 22, "submit": [17, 22, 23, 36, 37], "submit_job": [22, 36], "subsecond": 3, "subsequ": [35, 55], "subset": [9, 19, 55], "substanc": 26, "subtract": 14, "success": [7, 55], "successfulli": 33, "sudo": 33, "suffic": 55, "suggest": 40, "suitabl": 5, "sum": 5, "summar": 20, "summari": [32, 35, 37, 55], "summer": 55, "sun": 55, "support": [14, 15, 24, 33, 44, 51, 53], "suppos": 3, "sure": [40, 54], "surfac": [40, 42], "surprisingli": 40, "surround": 34, "symmetr": 8, "synchron": 10, "syntax": [22, 25], "system": [5, 15, 24, 26, 33, 37, 48, 53], "systemat": 38, "t": [1, 3, 5, 8, 9, 11, 13, 18, 26, 31, 33, 39, 40, 55], "t0": 55, "t1": [9, 39, 45, 55], "t2": [9, 39, 45, 55], "t200": 45, "t3": [9, 45, 55], "t4": [9, 45, 55], "t_int": 5, "t_ref": [1, 13], "t_trigger": [9, 55], "tabl": [1, 2, 3, 4, 5, 9, 11, 13, 17, 18, 19, 20, 21, 25, 30, 31, 35, 39, 41, 42, 43, 44, 45, 55], "table_nam": [9, 25], "tail": 8, "take": [4, 5, 8, 14, 19, 24, 31, 33, 34, 40, 42, 47, 55], "taken": [14, 15, 22, 40, 42, 54, 55], "taken_se": 22, "task": [0, 6, 11, 32, 33, 38], "td": 13, "tell": [33, 55], "temp": 36, "temp_dir": 25, "temp_insid": 55, "temp_outsid": 55, "temperatur": 14, "temporari": [20, 25], "ten": 55, "tenth": 55, "term": 26, "termin": [33, 55], "test": [14, 16, 24, 32, 33, 36, 37, 42], "test_base_simul": 39, "test_groundparticle_simul": 42, "test_ldf_simul": 43, "test_showerfront_simul": 44, "text": 55, "texttestresult": 46, "than": [3, 5, 7, 9, 10, 15, 24, 42], "thei": [3, 9, 24, 31, 33, 40, 52, 54, 55], "them": [10, 23, 30, 31, 33, 34, 42, 44, 54, 55], "themselv": 55, "theori": 33, "therefor": 42, "thesi": [10, 37, 55], "theta": [4, 5, 11, 40, 41, 42, 43, 50, 55], "thi": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 52, 53, 54, 55, 56], "thick": [8, 18], "thickness_to_height": 18, "thin": [8, 18, 24, 25], "thing": [8, 33, 55], "think": 55, "third": [42, 55], "thirdli": 55, "this_run": 39, "thorough": 42, "those": [2, 3, 4, 5, 10, 11, 29, 30, 34, 52, 55], "thousand": 55, "three": [5, 15, 33, 42, 43, 55], "threshold": [9, 10, 14], "through": [4, 8, 10, 42, 55], "throughout": 45, "throw": [44, 55], "thrown": 42, "thu": [9, 47, 55], "time": [0, 3, 5, 9, 11, 14, 30, 31, 32, 33, 34, 37, 38, 39, 40, 42, 45, 52, 55], "time32col": [9, 45, 55], "time_delai": 5, "time_delta": [0, 1, 13], "time_deltas_group": 1, "time_to_decim": 53, "time_util": [37, 47], "timedelta": [1, 45], "timegm": 55, "timei": 53, "timerang": 2, "timeshift": 34, "timestamp": [1, 2, 3, 5, 6, 9, 13, 14, 15, 30, 38, 39, 42, 44, 45, 47, 52, 53, 55, 56], "timezon": 53, "tini": 10, "tip": 32, "titl": 55, "tmp": [39, 42, 43, 44], "tmp_path": 20, "togeth": [13, 34], "tomkooij": 41, "took": 30, "tool": 33, "top": [33, 40], "total": [8, 14, 15, 41, 55], "touch": 36, "trace": [0, 3, 6, 9, 14, 35, 55], "traceback": 31, "traceobserv": 10, "track": 3, "trainwreck": 47, "transfer": 41, "transform": [18, 32, 37, 49, 50, 51, 53], "transit": 40, "translat": 15, "transport": 40, "travel": 8, "tree": [30, 55], "tri": [33, 40], "triangl": 15, "trick": 32, "trigger": [6, 9, 10, 14, 38, 39, 42, 45, 55], "trigger_2": 9, "trigger_4": 9, "trigger_pattern": 9, "troubl": 31, "true": [1, 2, 3, 4, 5, 9, 10, 11, 13, 14, 15, 18, 20, 22, 25, 28, 29, 30, 34, 39, 42, 55, 56], "trust": 8, "try": [11, 33, 55], "ts0": 5, "tsv": [14, 28, 29, 30], "tsv_file": 30, "tupl": [1, 2, 3, 4, 5, 15, 18, 30, 39, 42, 43, 44, 50, 51, 52, 54], "turn": [20, 55], "tutori": 32, "tweak": 55, "two": [4, 5, 8, 12, 13, 15, 20, 22, 42, 55, 56], "type": [19, 30, 33, 47, 55, 56], "typo": 47, "u": [3, 8, 9, 30, 45, 55], "ud": 15, "uint32": [9, 45, 55], "uint32col": [9, 45, 55], "uint64": [9, 45], "uint64col": [9, 45, 55], "uint8": 45, "uint8col": 45, "uk": 56, "unavail": [28, 29], "uncertainti": [40, 42, 43, 44], "unchang": [30, 31, 42], "uncompress": 3, "unconvert": 23, "undefin": 42, "understand": 55, "unfamiliar": 55, "unformat": 24, "uniform": 40, "unintend": 31, "uniqu": [13, 15, 20, 22, 45, 55], "unit": [5, 8, 15, 17, 55], "unitari": 50, "unittest": 46, "unix": [47, 52, 55], "unlik": [4, 5], "unsuccess": 11, "unthin": 24, "untouch": 9, "unus": 22, "up": [2, 3, 9, 15, 19, 23, 25, 27, 30, 33, 36, 38, 39, 40, 42, 45, 54, 55], "updat": [32, 33, 37, 42], "update_additional_local_tsv": 28, "update_local_data": [27, 29], "update_local_json": 29, "update_local_tsv": 29, "update_sublevel_json": 29, "update_sublevel_tsv": 29, "update_subsublevel_tsv": 29, "update_toplevel_json": 29, "upload": 33, "upper": [12, 42], "uptim": 14, "upto": [55, 56], "url": [14, 16, 29, 35, 56], "us": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 44, 45, 46, 52, 54, 55, 56], "usag": [2, 3, 9, 11, 13, 14, 30, 36, 39, 42, 43, 44], "use_threshold": 10, "useabl": 10, "user": [0, 3, 17, 18, 21, 24, 31, 36], "usno": 53, "usual": [10, 11, 15], "utc": [5, 34, 47, 52, 53, 55], "utc_from_str": 53, "utc_timestamp": 52, "utc_to_gmst": 53, "utc_to_gp": 53, "utc_to_lst": 53, "utctimetupl": 55, "util": [32, 37], "uv": 55, "v4": 10, "vacuum": 56, "valid": [2, 14, 19, 40, 43], "validate_numb": 14, "validate_partial_d": 14, "valu": [0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 22, 26, 31, 35, 40, 42, 43, 55, 56], "value1": 42, "value2": 42, "valueerror": 31, "van": 52, "variabl": [2, 16, 19, 31, 33, 34, 39, 55, 56], "variou": [0, 4, 5, 11, 16, 39, 44, 49, 50, 52, 54], "ve": [30, 33, 55], "vector": [5, 15, 40, 44, 50, 56], "vector_length": 56, "vener": 55, "verbos": [11, 55], "veri": [3, 31, 32, 33, 35, 40, 52, 55], "verifi": [10, 46], "versa": 47, "versatil": 33, "version": [5, 10, 14, 16, 18, 24, 25, 26, 33], "vi": 10, "via": 5, "vice": 47, "view": 32, "visibl": 10, "visual": [11, 55], "vlarrai": 55, "volt": 26, "voltag": 14, "w": [3, 9, 13, 30, 31, 35, 39, 41, 42, 43, 44, 55], "wa": [7, 10, 17, 22, 24, 30, 37, 38, 45, 46, 52, 55], "wai": [3, 22, 33, 55], "wait": [33, 55], "want": [3, 10, 16, 22, 31, 32, 33, 55], "warn": [33, 51, 52], "warning_only_thre": 5, "wast": 31, "we": [7, 22, 31, 33, 34, 40, 55, 56], "weather": [9, 14, 30, 55], "weight": [18, 21, 24], "weird": 31, "well": [11, 31, 33, 54, 55], "were": [3, 42, 44, 55], "wget": 56, "wgs84": [15, 48, 54], "wgs84datum": 54, "what": [10, 28, 29, 30, 31, 33, 55], "whatev": 55, "wheel": 33, "whelan": 53, "when": [1, 2, 8, 10, 11, 16, 25, 31, 33, 40, 55], "whenev": [26, 33, 55], "where": [1, 2, 3, 5, 7, 8, 9, 10, 15, 20, 24, 33, 34, 56], "wherea": 42, "whether": [3, 14, 33, 35, 55], "which": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19, 20, 23, 25, 30, 33, 35, 36, 39, 40, 41, 42, 43, 45, 46, 55, 56], "while": [3, 4, 5, 9, 11, 13, 16, 20, 30, 32, 33, 37, 39, 47, 55], "wibbli": 53, "widget": 56, "width": [7, 8], "width_factor": 7, "wiki": 54, "wikipedia": 54, "wimei": 53, "wind_chil": 55, "wind_dir": 55, "wind_spe": 55, "window": [3, 10, 33, 55], "within": [2, 40, 41, 45, 55], "without": [3, 9, 10, 14, 15, 18, 31, 33, 43, 55], "wobbli": 53, "woerkom": 52, "wolfram": 40, "word": 31, "work": [6, 8, 17, 31, 37, 46, 55], "world": 55, "worri": 33, "worth": 30, "would": [24, 28, 29, 33], "write": [20, 23, 25, 31, 33, 55], "write_queued_se": 23, "write_row": 20, "writeabl": 39, "written": [9, 17, 22, 24, 26], "wrong": 33, "www": [41, 53, 56], "x": [4, 5, 8, 12, 15, 18, 21, 25, 31, 35, 40, 42, 43, 44, 45, 50, 52, 53, 54, 55, 56], "x0": 43, "x1": 56, "x2": 56, "x_int": 5, "xcmass": 4, "xcom": 41, "xdata": 8, "xi": 8, "xlabel": [31, 55], "xml": 35, "xpointlist": 4, "xstart": 4, "xy_circle_linear": 12, "y": [4, 5, 8, 12, 15, 18, 33, 40, 42, 43, 44, 45, 50, 54, 55, 56], "y0": 43, "y1": 56, "y2": 56, "y_int": 5, "ycmass": 4, "ydata": 8, "year": [14, 47, 53, 55], "yesterdai": [30, 55], "yet": [30, 40, 55], "yield": [1, 9, 24], "ylabel": [31, 55], "ymmv": 33, "you": [2, 3, 4, 5, 16, 19, 22, 24, 26, 30, 31, 32, 33, 35, 45, 47, 55], "your": [3, 15, 16, 26, 31, 32, 33, 52, 53, 55], "yourself": [2, 19, 33], "ypointlist": 4, "ystart": 4, "z": [1, 4, 5, 15, 21, 42, 50, 54, 56], "z_int": 5, "z_ref": 1, "zen": 52, "zenaz_coordin": 52, "zenith": [4, 11, 14, 19, 22, 40, 42, 43, 44, 45, 52, 55, 56], "zenith1": 56, "zenith2": 56, "zenithazimuth": 52, "zenithazimuth_to_equatori": 52, "zenithazimuth_to_equatorial_astropi": 52, "zenithazimuth_to_horizont": 52, "zero": [5, 8, 47, 55], "zip": [3, 9, 14, 55], "zipbal": 33}, "titles": ["Data analysis", "Data timing and signal calibration", "Query coincidences from a datafile", "Search for coincidences between HiSPARC stations", "Reconstruction of EAS core and size", "Reconstruction of EAS direction", "Get signal and timing values from events", "MPV fit", "Landau distribution", "Processing of HiSPARC events", "Processing of HiSPARC traces", "Reconstructions", "Detector signal calibration", "Time deltas", "HiSPARC API", "HiSPARC clusters", "Configuration", "CORSIKA simulations", "CORSIKA Blocks", "Query CORSIKA overview for simulations", "Create an overview of CORSIKA simulations", "CORSIKA Particles", "CORSIKA on Stoomboot", "Convert CORSIKA simulations on Stoomboot", "CORSIKA Reader", "Store CORSIKA data as HDF5", "CORSIKA Units", "Updating and extending local data", "Download additional local data", "Update default local data with latest data from Publicdb", "Event Summary Data", "Example scripts", "Welcome to SAPPHiRE\u2019s documentation!", "Installation", "KASCADE data", "Public data access", "Nikhef Stoomboot facilities", "SAPPHiRE Reference", "Simulation of the detection of EAS events", "Simulation base classes", "Detector simulations", "Simulation of detector response due to gammas", "Simulations based on Monte Carlo EAS ground particle data", "Simulations based on theoretical models of EAS lateral distributions", "Simulations based on time structure of EAS shower fronts", "Low-level storage constructs", "Test installation", "GPS date/time utility functions", "Coordinate and time transformations", "Conversion between different angle notations", "Conversion between axes coordinate systems", "Conversion between different bases", "Transformations between Celestial coordinate systems", "Time conversion functions", "Transformations between geographic coordinate systems", "Tutorial", "Common utility functions"], "titleterms": {"": 32, "The": [31, 55], "__main__": 31, "__name__": 31, "access": [35, 55], "addit": 28, "an": 20, "analysi": 0, "angl": [31, 49], "api": 14, "around": 55, "author": 24, "ax": 50, "base": [39, 42, 43, 44, 51], "between": [3, 49, 50, 51, 52, 54], "block": 18, "calibr": [1, 12], "carlo": 42, "celesti": 52, "check": 33, "class": 39, "cluster": 15, "code": 33, "coincid": [2, 3, 31, 55], "coinicd": 55, "common": [31, 56], "configur": 16, "construct": 45, "content": 17, "convers": [49, 50, 51, 53], "convert": 23, "coordin": [48, 50, 52, 54], "core": 4, "correctli": 33, "corsika": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26], "creat": 20, "data": [0, 1, 25, 27, 28, 29, 30, 31, 34, 35, 42, 55], "datafil": 2, "date": 47, "debian": 33, "default": 29, "delta": 13, "deriv": 33, "detect": 38, "detector": [12, 40, 41], "differ": [49, 51], "direct": [5, 31], "distribut": [8, 31, 33, 43], "document": 32, "download": [28, 31, 55], "due": 41, "ea": [4, 5, 38, 42, 43, 44], "esd": 55, "event": [6, 9, 30, 31, 38, 55], "exampl": 31, "extend": 27, "facil": 36, "few": 31, "first": [31, 55], "fit": 7, "from": [2, 6, 29], "front": 44, "function": [47, 53, 56], "gamma": 41, "geograph": 54, "get": [6, 33], "global": 31, "gp": 47, "ground": 42, "hdf5": 25, "hisparc": [3, 9, 10, 14, 15, 55], "i": 33, "indic": 32, "info": 24, "instal": [33, 46], "issu": 24, "just": 33, "kascad": 34, "landau": 8, "later": 43, "latest": 29, "let": 33, "level": 45, "like": 33, "local": [27, 28, 29], "look": 55, "low": 45, "mac": 33, "me": 33, "miniconda": 33, "minim": 33, "model": 43, "modul": [0, 17, 55], "mont": 42, "more": 24, "mpv": 7, "nikhef": 36, "notat": 49, "o": 33, "obtain": 55, "overview": [19, 20], "packag": 0, "particl": [21, 42], "perform": 55, "plot": [31, 55], "prerequisit": 33, "process": [9, 10], "public": 35, "publicdb": 29, "python": 33, "queri": [2, 19], "reader": 24, "reconstruct": [4, 5, 11, 31, 55], "refer": 37, "respons": 41, "sapphir": [32, 33, 37, 55], "script": 31, "search": [3, 55], "see": 33, "shower": 44, "signal": [1, 6, 12], "simul": [17, 19, 20, 23, 38, 39, 40, 41, 42, 43, 44, 55], "size": 4, "some": 31, "specif": 33, "station": [3, 31], "step": 55, "stoomboot": [22, 23, 36], "storag": 45, "store": 25, "structur": 44, "summari": [30, 31], "system": [50, 52, 54], "tabl": 32, "task": 31, "test": 46, "theoret": 43, "thi": 0, "time": [1, 6, 13, 44, 47, 48, 53], "time_util": 55, "tip": 31, "trace": 10, "transform": [48, 52, 54], "trick": 31, "tutori": 55, "ubuntu": 33, "unit": 26, "updat": [27, 29], "util": [47, 56], "valu": 6, "welcom": 32, "work": 33, "x": 33, "zenith": 31}}) \ No newline at end of file diff --git a/simulations.html b/simulations.html new file mode 100644 index 00000000..84195ef7 --- /dev/null +++ b/simulations.html @@ -0,0 +1,140 @@ + + + + + + + + Simulation of the detection of EAS events — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Simulation of the detection of EAS events

+

Simulations are built up from several components. First the cluster needs to +be defined. This can be a set of real stations or imaginary detectors. Then +systematic detector and station errors are generated. Next a generator for +shower properties is used to determine the properties of each shower (energy +and direction). Then for each detector the shower particles that hit it are +selected. For each of these the actual detected signal strength and arrival +times (detector effects) are determined. Then the trigger conditions are +checked to see if the station triggered. If it did an event will be stored for +that station. This includes a GPS timestamp and the detector observables +(particle count and arrival time of first particle). Finally for each shower a +‘coincidence’ will be stored, even if it was not detected by any station. The +coincidence stores the parameters of the shower.

+

Perform common simulation tasks.

+

This package contains modules for performing simulations:

+
+
base

base simulations class that provides the framework for simulations

+
+
detector

simulate the response of the HiSPARC detectors

+
+
groundparticles

perform simulations using CORSIKA ground particles as input

+
+
ldf

perform simulations using lateral distribution functions for particle +densities

+
+
showerfront

simple simulations of a shower front

+
+
gammas

simulation of detector response due to gammas

+
+
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/simulations/base.html b/simulations/base.html new file mode 100644 index 00000000..a065d8a8 --- /dev/null +++ b/simulations/base.html @@ -0,0 +1,298 @@ + + + + + + + + Simulation base classes — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Simulation base classes

+

Perform simulations of air showers on a cluster of stations

+

This base class can be subclassed to provide various kinds of +simulations. These simulations will inherit the base functionality from +this class, including the creation of event and coincidence tables to +store the results, which will look similar to regular HiSPARC data, such +that the same reconstruction analysis can be applied to both.

+

Example usage:

+
>>> import tables
+
+>>> from sapphire.simulations.base import BaseSimulation
+>>> from sapphire import ScienceParkCluster
+
+>>> data = tables.open_file('/tmp/test_base_simulation.h5', 'w')
+>>> cluster = ScienceParkCluster()
+
+>>> sim = BaseSimulation(cluster, data, '/simulations/this_run', 10)
+>>> sim.run()
+
+
+
+
+class sapphire.simulations.base.BaseSimulation(cluster, data, output_path='/', n=1, seed=None, progress=True)
+

Base class for simulations.

+
+
Parameters:
+
    +
  • clusterBaseCluster instance.

  • +
  • data – writeable PyTables file handle.

  • +
  • output_path – path (as string) to the PyTables group (need not +exist) in which the result tables will be created.

  • +
  • n – number of simulations to perform.

  • +
  • seed – seed for the pseudo-random number generators.

  • +
  • progress – if True show a progressbar while simulating.

  • +
+
+
+
+
+run()
+

Run the simulations.

+
+ +
+
+generate_shower_parameters()
+

Generate shower parameters like core position, energy, etc.

+
+ +
+
+simulate_events_for_shower(shower_parameters)
+

Simulate station events for a single shower

+
+ +
+
+simulate_station_response(station, shower_parameters)
+

Simulate station response to a shower.

+
+ +
+
+simulate_all_detectors(detectors, shower_parameters)
+

Simulate response of all detectors in a station.

+
+
Parameters:
+
    +
  • detectors – list of detectors

  • +
  • shower_parameters – parameters of the shower

  • +
+
+
+
+ +
+
+simulate_detector_response(detector, shower_parameters)
+

Simulate detector response to a shower.

+
+
Parameters:
+
    +
  • detectorDetector instance

  • +
  • shower_parameters – shower parameters

  • +
+
+
Returns:
+

dictionary with keys ‘n’ (number of particles in +detector) and ‘t’ (time of arrival of first detected particle).

+
+
+
+ +
+
+simulate_trigger(detector_observables)
+

Simulate a trigger response.

+
+ +
+
+simulate_gps(station_observables, shower_parameters, station)
+

Simulate gps timestamp.

+
+ +
+
+process_detector_observables(detector_observables)
+

Process detector observables for a station.

+

The list of detector observables is converted into a dictionary +containing the familiar observables like pulseheights, n1, n2, +…, t1, t2, …, integrals, etc.

+
+
Parameters:
+

detector_observables – list of observables of the detectors +making up a station.

+
+
Returns:
+

dictionary containing the familiar station observables +like n1, n2, n3, etc.

+
+
+
+ +
+
+store_station_observables(station_id, station_observables)
+

Store station observables.

+
+
Parameters:
+
    +
  • station_id – the id of the station in self.cluster

  • +
  • station_observables – A dictionary containing the +variables to be stored for this event.

  • +
+
+
Returns:
+

The index (row number) of the newly added event.

+
+
+
+ +
+
+store_coincidence(shower_id, shower_parameters, station_events)
+

Store coincidence.

+

Store the information to find events of different stations +belonging to the same simulated shower in the coincidences +tables.

+
+
Parameters:
+
    +
  • shower_id – The shower number for the coincidence id.

  • +
  • shower_parameters – A dictionary with the parameters of +the simulated shower.

  • +
  • station_events – A list of tuples containing the +station_id and event_index referring to the events that +participated in the coincidence.

  • +
+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/simulations/detector.html b/simulations/detector.html new file mode 100644 index 00000000..e895df5e --- /dev/null +++ b/simulations/detector.html @@ -0,0 +1,501 @@ + + + + + + + + Detector simulations — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Detector simulations

+

Common HiSPARC station response simulations

+

These are some common simulations for HiSPARC detectors.

+
+
+class sapphire.simulations.detector.HiSPARCSimulation(*args, **kwargs)
+
+
+simulate_and_store_offsets()
+

Simulate and store station and detector offsets

+
+ +
+
+classmethod simulate_detector_offsets(n_detectors)
+

Get multiple detector offsets

+
+
Parameters:
+

n_detectors – number of offsets to return.

+
+
Returns:
+

list of detector timing offsets in ns.

+
+
+
+ +
+
+classmethod simulate_detector_offset()
+

Simulate time offsets between detectors in one station

+

This offset should be fixed for each detector for a simulation run.

+
+
Returns:
+

detector timing offset in ns.

+
+
+
+ +
+
+classmethod simulate_station_offset()
+

Simulate time offsets between different stations

+

This offset should be fixed for each station for a simulation run. +The actual distribution is not yet very clear. We assume it is +gaussian for convenience. Then the stddev is about 16 ns.

+
+
Returns:
+

station timing offset in ns.

+
+
+
+ +
+
+classmethod simulate_gps_uncertainty()
+

Simulate uncertainty from GPS receiver

+
+ +
+
+classmethod simulate_adc_sampling(t)
+

Simulate ADC time binning due to the sampling frequency

+
+
Parameters:
+

t – time to be binned.

+
+
Returns:
+

time ceiled in 2.5 ns base.

+
+
+
+ +
+
+classmethod simulate_signal_transport_time(n=1)
+

Simulate transport times of scintillation light to the PMT

+

Generates random transit times within a given distribution and +adds it to the times the particles passed the detector.

+

Distribution based on Fokkema2012 sec 4.2, figure 4.3

+

Be careful when editing this function, be sure to check both +the single and vectorized part.

+
+
Parameters:
+

n – number of times to simulate

+
+
Returns:
+

list of signal transport times

+
+
+
+ +
+
+classmethod simulate_detector_mips(n, theta)
+

Simulate the detector signal for particles

+

Simulation of convoluted distribution of electron and +muon energy losses with the scintillator response

+

The detector response (energy loss and detector efficiency) is derived +in Montanus2014.

+

The energy loss is taken from the Bethe-Bloch equation. The detector +response is statistically modelled. The effect of particle angle of +incidence is accounted for. The resulting probability +distribution is used below.

+

The statistics can be simulated by taking a random number y between +0 and 1, and convert it to a signal s in MIP using the probability +distribution.

+
+
Montanus2014: J.C.M. Montanus, The Landau distribution,

Internal note (Nikhef), 22 may 2014

+
+
+

Be careful when editing this function, be sure to check both +the single and vectorized part.

+
+
Parameters:
+
    +
  • n – number of particles.

  • +
  • theta – angle of incidence of the particles. Either a single +value valid for all particles, or an array with an angle +for each particle.

  • +
+
+
Returns:
+

signal strength in number of mips.

+
+
+
+ +
+
+classmethod generate_core_position(r_max)
+

Generate a random core position within a circle

+

DF: This is the fastest implementation I could come up with. I +timed several permutations of numpy / math, and tried a Monte +Carlo method in which I pick x and y in a square (fast) and then +determine if they fall inside a circle or not (surprisingly +slow, because of an if-statement, and despite some optimizations +suggested by HM).

+
+
Parameters:
+

r – Maximum core distance, in meters.

+
+
Returns:
+

Random x, y position in the disc with radius r_max.

+
+
+
+ +
+
+classmethod generate_zenith(min_value=0, max_value=1.0471975511965976)
+

Generate a random zenith

+

Generate a random zenith for a uniform distribution on a sphere. +For a random position on a sphere the zenith should not be chosen +from a uniform [0, pi/2] distribution.

+

Source: http://mathworld.wolfram.com/SpherePointPicking.html

+

This function does not account for attenuation due to the extra path +length, nor for the reduced effective surface of the detectors due to +the angle. CORSIKA simulated showers already contain the atmospheric +attenuation and precise positions for each particle.

+
+
Parameters:
+

min,max – minimum and maximum zenith angles, in radians.

+
+
Returns:
+

random zenith position on a sphere, in radians.

+
+
+
+ +
+
+classmethod generate_attenuated_zenith()
+

Generate a random zenith

+

Pick from the expected zenith distribution.

+

There is a difference between expected shower zeniths detected on the +ground and at the top of the atmosphere. This distribution takes the +attenuation of air showers due to the extra path length in the +atmosphere into account.

+
+
Returns:
+

random zenith angle, in radians.

+
+
+
+ +
+
+classmethod inverse_zenith_probability(p)
+

Inverse cumulative probability distribution for zenith

+

Derived from Schultheiss “The acceptancy of the HiSPARC Network”, +(internal note), eq 2.4 from Rossi.

+
+
Parameters:
+

p – probability value between 0 and 1.

+
+
Returns:
+

zenith with corresponding cumulative probability, in radians.

+
+
+
+ +
+
+classmethod generate_azimuth()
+

Generate a random azimuth

+

Showers from each azimuth have equal probability

+
+
Returns:
+

shower azimuth angle, in radians.

+
+
+
+ +
+
+classmethod generate_energy(e_min=100000000000000.0, e_max=1e+21, alpha=-2.75)
+

Generate a random shower energy

+

Source: http://mathworld.wolfram.com/RandomNumber.html

+

Simple approximation of the cosmic-ray energy spectrum. Showers +with higher energy occur less often, following a power law.

+
+
Parameters:
+
    +
  • e_min,e_max – Energy bounds for the distribution (in eV).

  • +
  • alpha – Steepness of the power law distribution.

  • +
+
+
Returns:
+

primary particle energy, in eV.

+
+
+
+ +
+ +
+
+class sapphire.simulations.detector.ErrorlessSimulation(*args, **kwargs)
+
+
+classmethod simulate_detector_offsets(n_detectors)
+

Get multiple detector offsets

+
+
Parameters:
+

n_detectors – number of offsets to return.

+
+
Returns:
+

list of detector timing offsets in ns.

+
+
+
+ +
+
+classmethod simulate_detector_offset()
+

Simulate time offsets between detectors in one station

+

This offset should be fixed for each detector for a simulation run.

+
+
Returns:
+

detector timing offset in ns.

+
+
+
+ +
+
+classmethod simulate_station_offset()
+

Simulate time offsets between different stations

+

This offset should be fixed for each station for a simulation run. +The actual distribution is not yet very clear. We assume it is +gaussian for convenience. Then the stddev is about 16 ns.

+
+
Returns:
+

station timing offset in ns.

+
+
+
+ +
+
+classmethod simulate_gps_uncertainty()
+

Simulate uncertainty from GPS receiver

+
+ +
+
+classmethod simulate_adc_sampling(t)
+

Simulate ADC time binning due to the sampling frequency

+
+
Parameters:
+

t – time to be binned.

+
+
Returns:
+

time ceiled in 2.5 ns base.

+
+
+
+ +
+
+classmethod simulate_signal_transport_time(n=1)
+

Simulate transport times of scintillation light to the PMT

+

Generates random transit times within a given distribution and +adds it to the times the particles passed the detector.

+

Distribution based on Fokkema2012 sec 4.2, figure 4.3

+

Be careful when editing this function, be sure to check both +the single and vectorized part.

+
+
Parameters:
+

n – number of times to simulate

+
+
Returns:
+

list of signal transport times

+
+
+
+ +
+
+classmethod simulate_detector_mips(n, theta)
+

Simulate the detector signal for particles

+

Simulation of convoluted distribution of electron and +muon energy losses with the scintillator response

+

The detector response (energy loss and detector efficiency) is derived +in Montanus2014.

+

The energy loss is taken from the Bethe-Bloch equation. The detector +response is statistically modelled. The effect of particle angle of +incidence is accounted for. The resulting probability +distribution is used below.

+

The statistics can be simulated by taking a random number y between +0 and 1, and convert it to a signal s in MIP using the probability +distribution.

+
+
Montanus2014: J.C.M. Montanus, The Landau distribution,

Internal note (Nikhef), 22 may 2014

+
+
+

Be careful when editing this function, be sure to check both +the single and vectorized part.

+
+
Parameters:
+
    +
  • n – number of particles.

  • +
  • theta – angle of incidence of the particles. Either a single +value valid for all particles, or an array with an angle +for each particle.

  • +
+
+
Returns:
+

signal strength in number of mips.

+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/simulations/gammas.html b/simulations/gammas.html new file mode 100644 index 00000000..0f1db8ad --- /dev/null +++ b/simulations/gammas.html @@ -0,0 +1,250 @@ + + + + + + + + Simulation of detector response due to gammas — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Simulation of detector response due to gammas

+

Gammas

+

This module implements simulation of interactions of gamma photons with +a scintillator. Used in groundparticle simulations.

+
+
+sapphire.simulations.gammas.compton_edge(gamma_energy)
+

Calculate Compton edge for a given photon energy

+

W.R. Leo (1987) p.54

+
+
Parameters:
+

gamma_energy – photon energy [MeV].

+
+
Returns:
+

compton edge [MeV].

+
+
+
+ +
+
+sapphire.simulations.gammas.compton_energy_transfer(gamma_energy)
+

Calculate the energy transfer from photon to electron

+

From the differential cross section the cumulative distribution +is calculated. From this distribution a random energy transfer +(within kinematic bounds) is returned.

+
+
Parameters:
+

gamma_energy – photon energy [MeV].

+
+
Returns:
+

transferred energy [MeV].

+
+
+
+ +
+
+sapphire.simulations.gammas.energy_transfer_cross_section(gamma_energy, recoil_energy)
+

Differential cross section dsigma/dT

+

Differential cross section for energy transfer from gamma +to scattered electron in compton scattering.

+

W.R. Leo (1987) p 54

+
+
Parameters:
+
    +
  • gamma_energy – photon energy [MeV].

  • +
  • recoil_energy – electron recoil energy [MeV].

  • +
+
+
+
+ +
+
+sapphire.simulations.gammas.max_energy_deposit_in_mips(depth, scintillator_depth)
+

Maximum energy transfer from electron to scintillator

+

Determine maximum energy transfer based on remaining scinitillator +depth.

+

Assumes scintillator depth is projected onto the direction +of the incident particle (divided by cos(theta)).

+
+
Parameters:
+
    +
  • depth – depth at which the electron is produced [cm].

  • +
  • scintillator_depth – total depth of the scintillator [cm].

  • +
+
+
+
+ +
+
+sapphire.simulations.gammas.simulate_detector_mips_gammas(p, theta)
+

Simulate detection of gammas

+
+
Parameters:
+
    +
  • p – the momenta of the gammas as array, in eV.

  • +
  • theta – angles of incidence of the gammas as array, in radians.

  • +
+
+
Returns:
+

the simulated detector signal (in mips).

+
+
+
+ +
+
+sapphire.simulations.gammas.pair_mean_free_path(gamma_energy)
+

Mean free path pair production

+

NIST XCOM database: https://www.nist.gov/pml/data/xcom/ +compound: C9H10 +pair production (total attenuation)

+

table generated by @tomkooij/lio-project/photons/nist.py

+
+
Parameters:
+

gamma_energy – photon energy [MeV].

+
+
Returns:
+

mean free path [cm].

+
+
+
+ +
+
+sapphire.simulations.gammas.compton_mean_free_path(gamma_energy)
+

Mean free path compton scattering

+

NIST XCOM database: https://www.nist.gov/pml/data/xcom/ +compound: C9H10 +compton scattering (incoherent scattering)

+

table generated by @tomkooij/lio-project/photons/nist.py

+
+
Parameters:
+

gamma_energy – photon energy [MeV].

+
+
Returns:
+

mean free path [cm].

+
+
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/simulations/groundparticles.html b/simulations/groundparticles.html new file mode 100644 index 00000000..a2deaff3 --- /dev/null +++ b/simulations/groundparticles.html @@ -0,0 +1,587 @@ + + + + + + + + Simulations based on Monte Carlo EAS ground particle data — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Simulations based on Monte Carlo EAS ground particle data

+

Perform simulations of CORSIKA air showers on a cluster of stations

+

This simulation uses a HDF5 file created from a CORSIKA simulation with +the store_corsika_data script. The shower is ‘thrown’ on the cluster +with random core positions and azimuth angles.

+

Example usage:

+
>>> import tables
+>>> from sapphire import GroundParticlesSimulation, ScienceParkCluster
+>>> data = tables.open_file('/tmp/test_groundparticle_simulation.h5', 'w')
+>>> cluster = ScienceParkCluster()
+>>> sim = GroundParticlesSimulation('corsika.h5', 500, cluster, data,
+...                                 '/', 10)
+>>> sim.run()
+
+
+
+
+class sapphire.simulations.groundparticles.GroundParticlesSimulation(corsikafile_path, max_core_distance, *args, **kwargs)
+

Simulation initialization

+
+
Parameters:
+
    +
  • corsikafile_path – path to the corsika.h5 file containing +the groundparticles.

  • +
  • max_core_distance – maximum distance of shower core to +center of cluster.

  • +
+
+
+
+
+finish()
+

Clean-up after simulation

+
+ +
+
+generate_shower_parameters()
+

Generate shower parameters like core position, energy, etc.

+

For this groundparticles simulation, only the shower core position +and rotation angle of the shower are generated. Do not +interpret these parameters as the position of the cluster, or the +rotation of the cluster! Interpret them as shower parameters.

+
+
Returns:
+

dictionary with shower parameters: core_pos +(x, y-tuple) and azimuth.

+
+
+
+ +
+
+simulate_detector_response(detector, shower_parameters)
+

Simulate detector response to a shower.

+

Checks if leptons have passed a detector. If so, it returns the number +of leptons in the detector and the arrival time of the first lepton +passing the detector.

+
+
Parameters:
+
    +
  • detectorDetector for which +the observables will be determined.

  • +
  • shower_parameters – dictionary with the shower parameters.

  • +
+
+
+
+ +
+
+simulate_detector_mips_for_particles(particles)
+

Simulate the detector signal for particles

+
+
Parameters:
+

particles – particle rows with the p_[x, y, z] +components of the particle momenta.

+
+
+
+ +
+
+simulate_trigger(detector_observables)
+

Simulate a trigger response.

+

This implements the trigger as used on HiSPARC stations: +- 4-detector station: at least two high or three low signals. +- 2-detector station: at least 2 low signals.

+
+
Parameters:
+

detector_observables – list of dictionaries, each containing +the observables of one detector.

+
+
Returns:
+

True if the station triggers, False otherwise.

+
+
+
+ +
+
+simulate_gps(station_observables, shower_parameters, station)
+

Simulate gps timestamp.

+
+
Parameters:
+
    +
  • station_observables – dictionary containing the observables +of the station.

  • +
  • shower_parameters – dictionary with the shower parameters.

  • +
  • stationsapphire.clusters.Station for which +to simulate the gps timestamp.

  • +
+
+
Returns:
+

station_observables updated with gps timestamp and +trigger time.

+
+
+
+ +
+
+get_particles_in_detector(detector, shower_parameters)
+

Get particles that hit a detector.

+

Particle ids 2, 3, 5, 6 are electrons and muons, +id 4 is no longer used (were neutrino’s).

+

The detector is approximated by a square with a surface of 0.5 +square meter which is not correctly rotated. In fact, during +the simulation, the rotation of the detector is undefined. This +is faster than a more thorough implementation.

+

The CORSIKA simulation azimuth is used for the projection because the +cluster is rotated such that from the perspective of the rotated +detectors the CORSIKA showers come from the desired azimuth. In the +simulation frame the CORSIKA shower azimuth remains unchanged.

+
+
Parameters:
+
    +
  • detectorDetector for which +to get particles.

  • +
  • shower_parameters – dictionary with the shower parameters.

  • +
+
+
+
+ +
+ +
+
+class sapphire.simulations.groundparticles.GroundParticlesGammaSimulation(corsikafile_path, max_core_distance, *args, **kwargs)
+

Simulation which includes signals from gamma particles in the shower

+

Simulation initialization

+
+
Parameters:
+
    +
  • corsikafile_path – path to the corsika.h5 file containing +the groundparticles.

  • +
  • max_core_distance – maximum distance of shower core to +center of cluster.

  • +
+
+
+
+
+simulate_detector_response(detector, shower_parameters)
+

Simulate detector response to a shower.

+

Checks if particles have passed a detector. If so, it returns the +number of particles in the detector and the arrival time of the first +particle passing the detector.

+
+
Parameters:
+
    +
  • detectorDetector for which +the observables will be determined.

  • +
  • shower_parameters – dictionary with the shower parameters.

  • +
+
+
+
+ +
+
+get_particles_in_detector(detector, shower_parameters)
+

Get particles that hit a detector.

+

Particle ids 2, 3, 5, 6 are electrons and muons, +id 4 is no longer used (were neutrino’s).

+

The detector is approximated by a square with a surface of 0.5 +square meter which is not correctly rotated. In fact, during +the simulation, the rotation of the detector is undefined. This +is faster than a more thorough implementation.

+

Detector height is ignored!

+
+
Parameters:
+
    +
  • detectorDetector for which +to get particles.

  • +
  • shower_parameters – dictionary with the shower parameters.

  • +
+
+
+
+ +
+
+simulate_detector_mips_for_gammas(particles)
+

Simulate the detector signal for gammas

+
+
Parameters:
+

particles – particle rows with the p_[x, y, z] +components of the particle momenta.

+
+
+
+ +
+ +
+
+class sapphire.simulations.groundparticles.DetectorBoundarySimulation(corsikafile_path, max_core_distance, *args, **kwargs)
+

More accurately simulate the detection area of the detectors.

+

Take the orientation of the detectors into account and use the +exact detector boundaries. This requires a slightly more complex +query which is a bit slower.

+

Simulation initialization

+
+
Parameters:
+
    +
  • corsikafile_path – path to the corsika.h5 file containing +the groundparticles.

  • +
  • max_core_distance – maximum distance of shower core to +center of cluster.

  • +
+
+
+
+
+get_particles_in_detector(detector, shower_parameters)
+

Simulate the detector detection area accurately.

+

First particles are filtered to see which fall inside a +non-rotated square box around the detector (i.e. sides of 1.2m). +For the remaining particles a more accurate query is used to see +which actually hit the detector. The advantage of using the +square is that column indexes can be used, which may speed up +queries.

+
+
Parameters:
+
    +
  • detectorDetector for which +to get particles.

  • +
  • shower_parameters – dictionary with the shower parameters.

  • +
+
+
+
+ +
+
+get_line_boundary_eqs(p0, p1, p2)
+

Get line equations using three points

+

Given three points, this function computes the equations for two +parallel lines going through these points. The first and second +point are on the same line, whereas the third point is taken to +be on a line which runs parallel to the first. The return value +is an equation and two boundaries which can be used to test if a +point is between the two lines.

+
+
Parameters:
+
    +
  • p0,p1 – (x, y) tuples on the same line.

  • +
  • p2 – (x, y) tuple on the parallel line.

  • +
+
+
Returns:
+

value1, equation, value2, such that points satisfying +value1 < equation < value2 are between the parallel lines.

+
+
+

Example:

+
>>> get_line_boundary_eqs((0, 0), (1, 1), (0, 2))
+(0.0, 'y - 1.000000 * x', 2.0)
+
+
+
+ +
+ +
+
+class sapphire.simulations.groundparticles.ParticleCounterSimulation(corsikafile_path, max_core_distance, *args, **kwargs)
+

Do not simulate mips, just count the number of particles.

+

Simulation initialization

+
+
Parameters:
+
    +
  • corsikafile_path – path to the corsika.h5 file containing +the groundparticles.

  • +
  • max_core_distance – maximum distance of shower core to +center of cluster.

  • +
+
+
+
+
+simulate_detector_mips(n, theta)
+

A mip for a mip, count number of particles in a detector.

+
+ +
+ +
+
+class sapphire.simulations.groundparticles.FixedCoreDistanceSimulation(corsikafile_path, max_core_distance, *args, **kwargs)
+

Shower core at a fixed core distance (from cluster origin).

+
+
Parameters:
+

core_distance – distance of shower core to center of cluster.

+
+
+

Simulation initialization

+
+
Parameters:
+
    +
  • corsikafile_path – path to the corsika.h5 file containing +the groundparticles.

  • +
  • max_core_distance – maximum distance of shower core to +center of cluster.

  • +
+
+
+
+
+classmethod generate_core_position(r_max)
+

Generate a random core position on a circle

+
+
Parameters:
+

r_max – Fixed core distance, in meters.

+
+
Returns:
+

Random x, y position on the circle with radius r_max.

+
+
+
+ +
+ +
+
+class sapphire.simulations.groundparticles.GroundParticlesSimulationWithoutErrors(corsikafile_path, max_core_distance, *args, **kwargs)
+

This simulation does not simulate errors/uncertainties

+

This results in perfect timing (first particle through detector) +and particle counting for the detectors.

+

Simulation initialization

+
+
Parameters:
+
    +
  • corsikafile_path – path to the corsika.h5 file containing +the groundparticles.

  • +
  • max_core_distance – maximum distance of shower core to +center of cluster.

  • +
+
+
+
+ +
+
+class sapphire.simulations.groundparticles.MultipleGroundParticlesSimulation(corsikaoverview_path, max_core_distance, min_energy, max_energy, *args, **kwargs)
+

Use multiple CORSIKA simulated air showers in one run.

+

Simulations will be selected from the set of available showers. +Each time an energy and zenith angle is generated a shower is selected +from the CORSIKA overview. Each shower is reused multiple times to +take advantage of caching, and to reduce IO stress.

+
+

Warning

+

This simulation loads a new shower often it is therefore more I/O +intensive than GroundParticlesSimulation. Do not run many +of these simulations simultaneously!

+
+

Simulation initialization

+
+
Parameters:
+
    +
  • corsikaoverview_path – path to the corsika_overview.h5 file +containing the available simulations.

  • +
  • max_core_distance – maximum distance of shower core to +center of cluster.

  • +
  • min_energy,max_energy – upper and lower shower energy limits, +in eV.

  • +
+
+
+
+
+DATA = '/data/hisparc/corsika/data/{seeds}/corsika.h5'
+
+ +
+
+finish()
+

Clean-up after simulation

+
+ +
+
+generate_shower_parameters()
+

Generate shower parameters like core position, energy, etc.

+

For this groundparticles simulation, only the shower core position +and rotation angle of the shower are generated. Do not +interpret these parameters as the position of the cluster, or the +rotation of the cluster! Interpret them as shower parameters.

+
+
Returns:
+

dictionary with shower parameters: core_pos +(x, y-tuple) and azimuth.

+
+
+
+ +
+
+select_simulation()
+

Generate parameters for selecting a CORSIKA simulation

+
+
Returns:
+

simulation row from a CORSIKA Simulations table.

+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/simulations/ldf.html b/simulations/ldf.html new file mode 100644 index 00000000..f22cd8f6 --- /dev/null +++ b/simulations/ldf.html @@ -0,0 +1,593 @@ + + + + + + + + Simulations based on theoretical models of EAS lateral distributions — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Simulations based on theoretical models of EAS lateral distributions

+

Lateral distribution functions that can be used for simulating particle +densities and for fitting to data.

+

Example usage:

+
>>> import tables
+
+>>> from sapphire import NkgLdfSimulation, ScienceParkCluster
+
+>>> data = tables.open_file('/tmp/test_ldf_simulation.h5', 'w')
+>>> cluster = ScienceParkCluster()
+
+>>> sim = NkgLdfSimulation(max_core_distance=400, min_energy=1e15,
+...                        max_energy=1e21, cluster=cluster,
+...                        datafile=data, n=200)
+>>> sim.run()
+
+
+
+
+class sapphire.simulations.ldf.BaseLdfSimulation(max_core_distance, min_energy, max_energy, *args, **kwargs)
+

Simulation initialization

+
+
Parameters:
+
    +
  • max_core_distance – maximum distance of shower core to +center of cluster (in meters).

  • +
  • min_energy,max_energy – Minimum and maximum energy of the +shower (in eV).

  • +
+
+
+
+
+generate_shower_parameters()
+

Generate shower parameters, i.e. core position

+

For the simple LDF only the core position is relevant. It +assumes the shower to come from the Zenith.

+
+
Returns:
+

dictionary with shower parameters: core_pos +(x, y-tuple).

+
+
+
+ +
+
+simulate_detector_response(detector, shower_parameters)
+

Simulate detector response to a shower

+

Get the mips in a detector from the LDF.

+
+
Parameters:
+
    +
  • detectorDetector for which +the observables will be determined.

  • +
  • shower_parameters – dictionary with the shower parameters.

  • +
+
+
+
+ +
+
+get_num_particles_in_detector(detector, shower_parameters)
+

Get the number of particles in a detector

+
+
Parameters:
+
    +
  • detectorDetector for which +the number of particles will be determined.

  • +
  • shower_parameters – dictionary with the shower parameters.

  • +
+
+
+
+ +
+
+static simulate_particles_for_density(p)
+

Get number of particles in detector given a particle density

+
+
Parameters:
+

p – particle density in number per detector area.

+
+
Returns:
+

random number from Poisson distribution.

+
+
+
+ +
+ +
+
+class sapphire.simulations.ldf.BaseLdfSimulationWithoutErrors(max_core_distance, min_energy, max_energy, *args, **kwargs)
+

This simulation does not simulate errors/uncertainties

+

This should result in perfect particle counting for the detectors.

+

Simulation initialization

+
+
Parameters:
+
    +
  • max_core_distance – maximum distance of shower core to +center of cluster (in meters).

  • +
  • min_energy,max_energy – Minimum and maximum energy of the +shower (in eV).

  • +
+
+
+
+
+static simulate_particles_for_density(p)
+

Exact number

+
+ +
+ +
+
+class sapphire.simulations.ldf.NkgLdfSimulation(*args, **kwargs)
+

Same as the BaseLdfSimulation but uses the NkgLdf as LDF

+

Simulation initialization

+
+
Parameters:
+
    +
  • max_core_distance – maximum distance of shower core to +center of cluster (in meters).

  • +
  • min_energy,max_energy – Minimum and maximum energy of the +shower (in eV).

  • +
+
+
+
+ +
+
+class sapphire.simulations.ldf.NkgLdfSimulationWithoutErrors(*args, **kwargs)
+

Same as the NkgLdfSimulation but without error simulation

+

Simulation initialization

+
+
Parameters:
+
    +
  • max_core_distance – maximum distance of shower core to +center of cluster (in meters).

  • +
  • min_energy,max_energy – Minimum and maximum energy of the +shower (in eV).

  • +
+
+
+
+ +
+
+class sapphire.simulations.ldf.KascadeLdfSimulation(*args, **kwargs)
+

Same as the BaseLdfSimulation but uses the KascadeLdf as LDF

+

Simulation initialization

+
+
Parameters:
+
    +
  • max_core_distance – maximum distance of shower core to +center of cluster (in meters).

  • +
  • min_energy,max_energy – Minimum and maximum energy of the +shower (in eV).

  • +
+
+
+
+ +
+
+class sapphire.simulations.ldf.KascadeLdfSimulationWithoutErrors(*args, **kwargs)
+

Same as the KascadeLdfSimulation but without error simulation

+

Simulation initialization

+
+
Parameters:
+
    +
  • max_core_distance – maximum distance of shower core to +center of cluster (in meters).

  • +
  • min_energy,max_energy – Minimum and maximum energy of the +shower (in eV).

  • +
+
+
+
+ +
+
+class sapphire.simulations.ldf.EllipsLdfSimulation(*args, **kwargs)
+

Same as BaseLdfSimulation but uses the EllipsLdF as LDF

+

Simulation initialization

+
+
Parameters:
+
    +
  • max_core_distance – maximum distance of shower core to +center of cluster (in meters).

  • +
  • min_energy,max_energy – Minimum and maximum energy of the +shower (in eV).

  • +
+
+
+
+
+generate_shower_parameters()
+

Generate shower parameters, i.e. core position

+

For the elliptic LDF both the core position and the zenith angle +are relevant.

+
+
Returns:
+

dictionary with shower parameters: core_pos +(x, y-tuple).

+
+
+
+ +
+
+get_num_particles_in_detector(detector, shower_parameters)
+

Get the number of particles in a detector

+
+
Parameters:
+
    +
  • detectorDetector for which +the number of particles will be determined.

  • +
  • shower_parameters – dictionary with the shower parameters.

  • +
+
+
+
+ +
+ +
+
+class sapphire.simulations.ldf.BaseLdf
+

Base LDF class

+

No particles! Always returns a particle density of 0.

+
+
+calculate_ldf_value(r, n_electrons=None, s=None)
+
+ +
+
+calculate_core_distance(x, y, x0, y0, theta, phi)
+

Calculate core distance

+

The core distance is the distance of the detector to the shower core, +measured on the shower front. For derivations, see logbook.

+
+
Parameters:
+
    +
  • x,y – detector position in m.

  • +
  • x0,y0 – shower core position in m.

  • +
  • theta,phi – shower axis direction in radians.

  • +
+
+
Returns:
+

distance from detector to the shower core in shower +front plane in m.

+
+
+
+ +
+ +
+
+class sapphire.simulations.ldf.NkgLdf(n_electrons=None, s=None)
+

The Nishimura-Kamata-Greisen function

+

NKG LDF setup

+
+
Parameters:
+
    +
  • n_electrons – Shower size (number of electrons).

  • +
  • s – Shower age parameter.

  • +
+
+
+
+
+calculate_ldf_value(r, n_electrons=None, s=None)
+

Calculate the LDF value

+
+
Parameters:
+
    +
  • r – core distance in m.

  • +
  • n_electrons – number of electrons in the shower.

  • +
  • s – shower age parameter.

  • +
+
+
Returns:
+

particle density in m ** -2.

+
+
+
+ +
+
+ldf_value(r, n_electrons, s)
+

Calculate the LDF value

+

Given a core distance, shower size, and shower age. +As given in Fokkema2012 eq 7.2.

+
+
Parameters:
+
    +
  • r – core distance in m.

  • +
  • n_electrons – number of electrons in the shower.

  • +
  • s – shower age parameter.

  • +
+
+
Returns:
+

particle density in m ** -2.

+
+
+
+ +
+ +
+
+class sapphire.simulations.ldf.KascadeLdf(n_electrons=None, s=None)
+

The KASCADE modified NKG function

+

NKG LDF setup

+
+
Parameters:
+
    +
  • n_electrons – Shower size (number of electrons).

  • +
  • s – Shower age parameter.

  • +
+
+
+
+
+ldf_value(r, n_electrons, s)
+

Calculate the LDF value

+

Given a core distance, shower size, and shower age. +As given in Fokkema2012 eq 7.4.

+
+
Parameters:
+
    +
  • r – core distance in m.

  • +
  • n_electrons – number of electrons in the shower.

  • +
  • s – shower shape parameter.

  • +
+
+
Returns:
+

particle density in m ** -2.

+
+
+
+ +
+ +
+
+class sapphire.simulations.ldf.EllipsLdf(n_electrons=None, zenith=None, azimuth=None, s1=None, s2=None)
+

The NKG function modified for leptons and azimuthal asymmetry

+

NKG LDF setup

+
+
Parameters:
+
    +
  • n_electrons – Shower size (number of electrons).

  • +
  • s – Shower age parameter.

  • +
+
+
+
+
+calculate_ldf_value(r, phi, n_electrons=None, zenith=None, azimuth=None)
+

Calculate the LDF value for a given core distance and polar angle

+
+
Parameters:
+
    +
  • r – core distance in m.

  • +
  • phi – polar angle in rad.

  • +
  • n_electrons – number of electrons in the shower.

  • +
+
+
Returns:
+

particle density in m ** -2.

+
+
+
+ +
+
+ldf_value(r, phi, n_electrons, zenith, azimuth, s1, s2)
+

Calculate the LDF value

+

Given a core distance, core polar angle, zenith angle, azimuth angle, +shower size and three shape parameters (r0, s1, s2) . +As given by Montanus, paper to follow.

+
+

Warning

+

The value 11.24 in the expression: muoncorr is only valid +for: s1 = -.5, s2 = - 2.6 and r0 = 30.

+
+
+
Parameters:
+
    +
  • r – core distance in m.

  • +
  • phi – polar angle in rad.

  • +
  • n_electrons – number of electrons in the shower.

  • +
  • zenith – zenith angle in rad.

  • +
  • azimuth – azimuth angle in rad.

  • +
  • s1 – shower shape parameter.

  • +
  • s2 – shower shape parameter.

  • +
+
+
Returns:
+

particle density in m ** -2.

+
+
+
+ +
+
+calculate_core_distance_and_angle(x, y, x0, y0)
+

Calculate core distance

+

The core distance is the distance of the detector to the shower core, +measured in the horizontal observation plane.

+
+
Parameters:
+
    +
  • x,y – detector position in m.

  • +
  • x0,y0 – shower core position in m.

  • +
+
+
Returns:
+

distance and polar angle from detector to the shower core in +horizontal observation plane in m resp. rad.

+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/simulations/showerfront.html b/simulations/showerfront.html new file mode 100644 index 00000000..6bda289d --- /dev/null +++ b/simulations/showerfront.html @@ -0,0 +1,358 @@ + + + + + + + + Simulations based on time structure of EAS shower fronts — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Simulations based on time structure of EAS shower fronts

+

Perform simple simulations for timing

+

Throw a simulated shower front on a cluster from various angles. +Simulate just the arrival times.

+

Example usage:

+
>>> import tables
+
+>>> from sapphire import FlatFrontSimulation, ScienceParkCluster
+
+>>> data = tables.open_file('/tmp/test_showerfront_simulation.h5', 'w')
+>>> cluster = ScienceParkCluster()
+
+>>> sim = FlatFrontSimulation(cluster, data, '/', 200)
+>>> sim.run()
+
+
+
+
+class sapphire.simulations.showerfront.FlatFrontSimulation(*args, **kwargs)
+
+
+generate_shower_parameters()
+

Generate shower parameters, i.e. azimuth and zenith angles.

+

For this groundparticles simulation, only the shower core position +and rotation angle of the shower are generated. Do not +interpret these parameters as the position of the cluster, or the +rotation of the cluster! Interpret them as shower parameters.

+
+
Returns:
+

dictionary with shower parameters: core_pos +(x, y-tuple) and azimuth.

+
+
+
+ +
+
+simulate_detector_response(detector, shower_parameters)
+

Simulate detector response to a shower.

+

Return the arrival time of shower front passing the center of +the detector.

+
+ +
+
+get_arrival_time(detector, shower_parameters)
+

Calculate arrival time

+

Assumes a flat shower front and core position to be +the center of the cluster.

+

Equation based on Fokkema2012 sec 4.2, eq 4.9. +With additions to account for altitude. +(DOI: 10.3990/1.9789036534383) +The directional vector c * dt should be negative, +not apparent in Fokkema2012 fig 4.4.

+
+
Returns:
+

Shower front arrival time in ns.

+
+
+
+ +
+
+simulate_gps(station_observables, shower_parameters, station)
+

Simulate gps timestamp

+

Ensure that all detector arrival times are positive.

+
+ +
+ +
+
+class sapphire.simulations.showerfront.FlatFrontSimulationWithoutErrors(*args, **kwargs)
+

This simulation does not simulate errors/uncertainties

+

This should result in perfect timing for the detectors.

+
+ +
+
+class sapphire.simulations.showerfront.FlatFrontSimulation2D(*args, **kwargs)
+

This simulation ignores detector altitudes.

+
+
+get_arrival_time(detector, shower_parameters)
+

Calculate arrival time

+

Ignore detector altitudes

+

Equation based on Fokkema2012 sec 4.2, eq 4.9. +(DOI: 10.3990/1.9789036534383)

+
+ +
+ +
+
+class sapphire.simulations.showerfront.FlatFrontSimulation2DWithoutErrors(*args, **kwargs)
+

Ignore altitude of detectors and do not simulate errors.

+
+ +
+
+class sapphire.simulations.showerfront.ConeFrontSimulation(max_core_distance, *args, **kwargs)
+

This simulation uses a cone shaped shower front.

+

The opening angle of the cone is given in the init

+

Example usage:

+
>>> import tables
+
+>>> from sapphire import ConeFrontSimulation, ScienceParkCluster
+
+>>> data = tables.open_file('/tmp/test_showerfront_simulation.h5', 'w')
+>>> cluster = ScienceParkCluster()
+
+>>> sim = ConeFrontSimulation(100, cluster, data, '/', 200)
+>>> sim.run()
+
+
+

Calculate arrival time

+
+
Parameters:
+

cone_angle – half of the opening angle of the cone.

+
+
+
+
+generate_shower_parameters()
+

Generate shower parameters

+

For this cone-shaped showerfront, the core position, the azimuth +and zenith angle of the shower are generated.

+
+
Returns:
+

dictionary with shower parameters: core_pos +(x, y-tuple), azimuth and zenith.

+
+
+
+ +
+
+get_arrival_time(detector, shower_parameters)
+

Calculate arrival time

+
+ +
+ +
+
+class sapphire.simulations.showerfront.FlatFront
+

Simple flat shower front

+
+
+delay_at_r(r)
+
+ +
+
+front_shape(r)
+
+ +
+ +
+
+class sapphire.simulations.showerfront.ConeFront
+

Simple cone shaped shower front

+
+
+delay_at_r(r)
+
+ +
+
+front_shape(r)
+

Delay of the showerfront relative to flat as function of distance

+
+
Parameters:
+

r – distance to the shower core in shower frame.

+
+
Returns:
+

delay time of shower front.

+
+
+
+ +
+ +
+
+class sapphire.simulations.showerfront.CorsikaStationFront
+

Shower front shape derived from CORSIKA simulations on a station.

+

A set of CORSIKA generated showers were used to determine the median +detected arrival time in a 4-detector station as a function of core +distance.

+

At large core distances the detection probability decreases and the +arrival time becomes less accurate.

+

Currently only support for energies between 1e15 and 1e17 eV.

+
+
+delay_at_r(r, energy=1e+16, particle='proton')
+
+ +
+
+front_shape(r, energy, particle='proton')
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/storage.html b/storage.html new file mode 100644 index 00000000..d8fbf018 --- /dev/null +++ b/storage.html @@ -0,0 +1,359 @@ + + + + + + + + Low-level storage constructs — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Low-level storage constructs

+

PyTables table descriptions for data storage

+

This module contains the table descriptions used by the detector +simulation to store intermediate and final data in a HDF5 file.

+
+
+class sapphire.storage.EventObservables
+

Store information about the observables of an event.

+

The observables are described for each station independently. So, for each +event (with a unique id), there is a table row for each station +(with a unique station_id), such that only the (id, station_id) +combinations are unique in the table.

+
+
+id
+

a unique identifier for the simulated event (only unique in this table)

+
+ +
+
+station_id
+

station identifier, such that you can do:

+
>>> station = cluster.stations[station_id]
+
+
+
+ +
+
+r, phi, x, y
+

coordinates of the station. Depending on the simulation, this might be +constant throughout the simulation, or it might change event by event.

+
+ +
+
+alpha
+

rotation of the station around its center

+
+ +
+
+N
+

number of detectors with at least one particle

+
+ +
+
+columns = {'N': UInt8Col(shape=(), dflt=np.uint8(0), pos=None), 'alpha': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'ext_timestamp': UInt64Col(shape=(), dflt=np.uint64(0), pos=None), 'id': UInt32Col(shape=(), dflt=np.uint32(0), pos=None), 'n1': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'n2': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'n3': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'n4': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'nanoseconds': UInt32Col(shape=(), dflt=np.uint32(0), pos=None), 'phi': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'r': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'station_id': UInt8Col(shape=(), dflt=np.uint8(0), pos=None), 't1': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 't2': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 't3': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 't4': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'timestamp': Time32Col(shape=(), dflt=np.int32(0), pos=None), 'x': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'y': Float32Col(shape=(), dflt=np.float32(0.0), pos=None)}
+
+ +
+ +
+
+class sapphire.storage.Coincidence
+

Store information about a coincidence of stations within a cluster.

+

An extensive air shower can trigger multiple stations, resulting in a set +of events which are from the same shower. This is called a coincidence.

+

This table assigns an id to a coincidence and provides some +additional information. The events making up the coincidence can be looked +up using the c_index table. Let coincidence be a row from +this table, then you can do:

+
>>> coincidence_id = coincidence['id']
+>>> event_ids = c_index[coincidence_id]
+>>> coincidence_event_list = [events[u] for u in event_ids]
+
+
+

Note that all events included in the coincidence are not required to +actually have measured particles. For example, simulations include all +events from the same shower in the coincidence, regardless of observed +particles. On the other hand, experimental datasets only include stations +which have triggered, but may include events which have not actually +measured the same shower, but simply measured other particles at the same +time, by chance.

+

Simulations may set the x, y, zenith, +azimuth, size, and energy attributes to simulation +parameters, like core position and shower parameters.

+
+
+id
+

a unique identifier for the coincidence (only unique in this table)

+
+ +
+
+N
+

the number of triggered stations

+
+ +
+
+x
+

The x coordinate of the shower core in a simulation.

+
+ +
+
+y
+

The y coordinate of the shower core in a simulation.

+
+ +
+
+zenith
+

The zenith direction of the (simulated) shower.

+
+ +
+
+azimuth
+

The azimuth direction of the (simulated) shower.

+
+ +
+
+size
+

The size (number of leptons) of the (simulated) shower.

+
+ +
+
+energy
+

The primary particle energy of the (simulated) shower.

+
+ +
+
+columns = {'N': UInt8Col(shape=(), dflt=np.uint8(0), pos=4), 'azimuth': Float32Col(shape=(), dflt=np.float32(0.0), pos=8), 'energy': Float32Col(shape=(), dflt=np.float32(0.0), pos=10), 'ext_timestamp': UInt64Col(shape=(), dflt=np.uint64(0), pos=3), 'id': UInt32Col(shape=(), dflt=np.uint32(0), pos=0), 'nanoseconds': UInt32Col(shape=(), dflt=np.uint32(0), pos=2), 'size': Float32Col(shape=(), dflt=np.float32(0.0), pos=9), 'timestamp': Time32Col(shape=(), dflt=np.int32(0), pos=1), 'x': Float32Col(shape=(), dflt=np.float32(0.0), pos=5), 'y': Float32Col(shape=(), dflt=np.float32(0.0), pos=6), 'zenith': Float32Col(shape=(), dflt=np.float32(0.0), pos=7)}
+
+ +
+ +
+
+class sapphire.storage.TimeDelta
+

Store time differences

+
+
+columns = {'delta': Float64Col(shape=(), dflt=np.float64(0.0), pos=3), 'ext_timestamp': UInt64Col(shape=(), dflt=np.uint64(0), pos=0), 'nanoseconds': UInt32Col(shape=(), dflt=np.uint32(0), pos=2), 'timestamp': UInt32Col(shape=(), dflt=np.uint32(0), pos=1)}
+
+ +
+ +
+
+class sapphire.storage.ReconstructedCoincidence
+

Store information about reconstructed coincidences

+
+
+columns = {'azimuth': Float32Col(shape=(), dflt=np.float32(0.0), pos=7), 'energy': Float32Col(shape=(), dflt=np.float32(0.0), pos=9), 'error_azimuth': Float32Col(shape=(), dflt=np.float32(0.0), pos=13), 'error_energy': Float32Col(shape=(), dflt=np.float32(0.0), pos=15), 'error_size': Float32Col(shape=(), dflt=np.float32(0.0), pos=14), 'error_x': Float32Col(shape=(), dflt=np.float32(0.0), pos=10), 'error_y': Float32Col(shape=(), dflt=np.float32(0.0), pos=11), 'error_zenith': Float32Col(shape=(), dflt=np.float32(0.0), pos=12), 'ext_timestamp': UInt64Col(shape=(), dflt=np.uint64(0), pos=2), 'id': UInt32Col(shape=(), dflt=np.uint32(0), pos=1), 'min_n': Float32Col(shape=(), dflt=np.float32(0.0), pos=3), 'reference_azimuth': Float32Col(shape=(), dflt=np.float32(0.0), pos=19), 'reference_energy': Float32Col(shape=(), dflt=np.float32(0.0), pos=21), 'reference_size': Float32Col(shape=(), dflt=np.float32(0.0), pos=20), 'reference_x': Float32Col(shape=(), dflt=np.float32(0.0), pos=16), 'reference_y': Float32Col(shape=(), dflt=np.float32(0.0), pos=17), 'reference_zenith': Float32Col(shape=(), dflt=np.float32(0.0), pos=18), 'size': Float32Col(shape=(), dflt=np.float32(0.0), pos=8), 'x': Float32Col(shape=(), dflt=np.float32(0.0), pos=4), 'y': Float32Col(shape=(), dflt=np.float32(0.0), pos=5), 'zenith': Float32Col(shape=(), dflt=np.float32(0.0), pos=6)}
+
+ +
+ +
+
+class sapphire.storage.ReconstructedEvent
+

Store information about reconstructed events

+
+
+id
+

Index referring to the id of the event that was reconstructed.

+
+ +
+
+d1,d2,d3,d4
+

Booleans indicating which detectors participated in the +reconstruction.

+
+ +
+
+columns = {'azimuth': Float32Col(shape=(), dflt=np.float32(0.0), pos=7), 'd1': BoolCol(shape=(), dflt=np.False_, pos=22), 'd2': BoolCol(shape=(), dflt=np.False_, pos=23), 'd3': BoolCol(shape=(), dflt=np.False_, pos=24), 'd4': BoolCol(shape=(), dflt=np.False_, pos=25), 'energy': Float32Col(shape=(), dflt=np.float32(0.0), pos=9), 'error_azimuth': Float32Col(shape=(), dflt=np.float32(0.0), pos=13), 'error_energy': Float32Col(shape=(), dflt=np.float32(0.0), pos=15), 'error_size': Float32Col(shape=(), dflt=np.float32(0.0), pos=14), 'error_x': Float32Col(shape=(), dflt=np.float32(0.0), pos=10), 'error_y': Float32Col(shape=(), dflt=np.float32(0.0), pos=11), 'error_zenith': Float32Col(shape=(), dflt=np.float32(0.0), pos=12), 'ext_timestamp': UInt64Col(shape=(), dflt=np.uint64(0), pos=2), 'id': UInt32Col(shape=(), dflt=np.uint32(0), pos=1), 'min_n': Float32Col(shape=(), dflt=np.float32(0.0), pos=3), 'reference_azimuth': Float32Col(shape=(), dflt=np.float32(0.0), pos=19), 'reference_energy': Float32Col(shape=(), dflt=np.float32(0.0), pos=21), 'reference_size': Float32Col(shape=(), dflt=np.float32(0.0), pos=20), 'reference_x': Float32Col(shape=(), dflt=np.float32(0.0), pos=16), 'reference_y': Float32Col(shape=(), dflt=np.float32(0.0), pos=17), 'reference_zenith': Float32Col(shape=(), dflt=np.float32(0.0), pos=18), 'size': Float32Col(shape=(), dflt=np.float32(0.0), pos=8), 'x': Float32Col(shape=(), dflt=np.float32(0.0), pos=4), 'y': Float32Col(shape=(), dflt=np.float32(0.0), pos=5), 'zenith': Float32Col(shape=(), dflt=np.float32(0.0), pos=6)}
+
+ +
+ +
+
+class sapphire.storage.KascadeEvent
+

Store events from KASCADE

+
+
+columns = {'Num_e': Float64Col(shape=(), dflt=np.float64(0.0), pos=9), 'Num_mu': Float64Col(shape=(), dflt=np.float64(0.0), pos=10), 'P200': Float64Col(shape=(), dflt=np.float64(0.0), pos=13), 'T200': Float64Col(shape=(), dflt=np.float64(0.0), pos=14), 'azimuth': Float64Col(shape=(), dflt=np.float64(0.0), pos=8), 'core_pos': Float64Col(shape=(np.int64(2),), dflt=np.float64(0.0), pos=6), 'dens_e': Float64Col(shape=(np.int64(4),), dflt=np.float64(0.0), pos=11), 'dens_mu': Float64Col(shape=(np.int64(4),), dflt=np.float64(0.0), pos=12), 'energy': Float64Col(shape=(), dflt=np.float64(0.0), pos=5), 'event_id': Int64Col(shape=(), dflt=np.int64(0), pos=1), 'ext_timestamp': UInt64Col(shape=(), dflt=np.uint64(0), pos=4), 'nanoseconds': UInt32Col(shape=(), dflt=np.uint32(0), pos=3), 'run_id': Int32Col(shape=(), dflt=np.int32(0), pos=0), 'timestamp': Time32Col(shape=(), dflt=np.int32(0), pos=2), 'zenith': Float64Col(shape=(), dflt=np.float64(0.0), pos=7)}
+
+ +
+ +
+
+class sapphire.storage.ReconstructedKascadeEvent
+

Store information about reconstructed events

+
+
+columns = {'alpha': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'id': UInt32Col(shape=(), dflt=np.uint32(0), pos=None), 'k_Num_e': Float64Col(shape=(), dflt=np.float64(0.0), pos=None), 'k_Num_mu': Float64Col(shape=(), dflt=np.float64(0.0), pos=None), 'k_P200': Float64Col(shape=(), dflt=np.float64(0.0), pos=None), 'k_T200': Float64Col(shape=(), dflt=np.float64(0.0), pos=None), 'k_core_pos': Float64Col(shape=(np.int64(2),), dflt=np.float64(0.0), pos=None), 'k_dens_e': Float64Col(shape=(np.int64(4),), dflt=np.float64(0.0), pos=None), 'k_dens_mu': Float64Col(shape=(np.int64(4),), dflt=np.float64(0.0), pos=None), 'k_energy': Float64Col(shape=(), dflt=np.float64(0.0), pos=None), 'min_n134': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'n1': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'n2': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'n3': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'n4': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'phi': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'r': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'reconstructed_phi': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'reconstructed_theta': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'reference_phi': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'reference_theta': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 'station_id': UInt8Col(shape=(), dflt=np.uint8(0), pos=None), 't1': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 't2': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 't3': Float32Col(shape=(), dflt=np.float32(0.0), pos=None), 't4': Float32Col(shape=(), dflt=np.float32(0.0), pos=None)}
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/tests.html b/tests.html new file mode 100644 index 00000000..8618dfef --- /dev/null +++ b/tests.html @@ -0,0 +1,134 @@ + + + + + + + + Test installation — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Test installation

+

Perform code tests.

+

This package contains all tests which verify the proper working of all +SAPPHiRE code. These tests can also be used to verify if SAPPHiRE was +installed correctly. Simply call the run_tests() function.

+
+
+sapphire.tests.run_tests()
+

Collect and run all SAPPHiRE tests

+
+
Returns:
+

unittest.TextTestResult object containing the test results.

+
+
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/time_util.html b/time_util.html new file mode 100644 index 00000000..fcc1f8fd --- /dev/null +++ b/time_util.html @@ -0,0 +1,183 @@ + + + + + + + + GPS date/time utility functions — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

GPS date/time utility functions

+

Convert UTC/GPS/local time.

+

The class in this module is intended to save you from typing trainwrecks +just to convert GPS timestamps to GPS date/time and vice versa. +Trainwrecks invite typos and thus many are easily confused about +UTC/GPS/local time. No more!

+
+
+class sapphire.time_util.GPSTime(*args)
+

Date/time utility class.

+

Initialize the class

+

The arguments to the __init__ method can take different forms. +First, it can take year, month, day, hour, minutes, seconds +arguments. The year, month and day are mandatory, while hour, +minutes, seconds default to zero.

+

If the argument is a single number, this is interpreted as a +Unix-like timestamp, in GPS time.

+

Examples specifying the exact same time:

+
>>> GPSTime(2012, 12, 1)
+>>> GPSTime(1354320000)
+
+
+
+
+gpstimestamp()
+

Return the GPS date/time as a timestamp.

+

Example:

+
>>> gpstime = GPSTime(2012, 12, 1)
+>>> gpstime.gpstimestamp()
+1354320000
+
+
+
+ +
+
+description()
+

Return the GPS date/time as a string.

+

Example:

+
>>> gpstime = GPSTime(1354320000)
+>>> gpstime.description()
+'Sat Dec  1 00:00:00 2012'
+
+
+
+ +
+
+datetime()
+

Return the GPS date/time as a datetime.datetime instance.

+

Example:

+
>>> gpstime = GPSTime(1354320000)
+>>> gpstime.datetime()
+datetime.datetime(2012, 12, 1, 0, 0)
+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/transformations.html b/transformations.html new file mode 100644 index 00000000..1880783d --- /dev/null +++ b/transformations.html @@ -0,0 +1,128 @@ + + + + + + + + Coordinate and time transformations — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Coordinate and time transformations

+

Convert coordinate and time systems.

+

Easy transformations between different systems.

+
+
angles

conversion between different angle notations

+
+
axes

rotation matrices and conversion between coordinate systems

+
+
base

conversion between decimal and sexagesimal

+
+
celestial

conversion between celestial coordinate systems, contains both +legacy and new astropy functions

+
+
clock

conversion between different time keeping systems

+
+
geographic

geographic coordinate transformations (e.g. WGS84 to ENU)

+
+
+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/transformations/angles.html b/transformations/angles.html new file mode 100644 index 00000000..2900e97d --- /dev/null +++ b/transformations/angles.html @@ -0,0 +1,183 @@ + + + + + + + + Conversion between different angle notations — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Conversion between different angle notations

+

Perform various angle related transformations

+

Transform between different notations for angles: +Degrees, radians and hours.

+
+
+sapphire.transformations.angles.hours_to_degrees(angle)
+

Converts decimal hours to degrees

+
+
Parameters:
+

hours – angle in decimal hours

+
+
Returns:
+

angle in degrees

+
+
+
+ +
+
+sapphire.transformations.angles.hours_to_radians(angle)
+

Converts decimal hours to radians

+
+
Parameters:
+

hours – angle in decimal hours

+
+
Returns:
+

angle in radians

+
+
+
+ +
+
+sapphire.transformations.angles.degrees_to_hours(angle)
+

Converts degrees to decimal hours

+
+
Parameters:
+

angle – angle in degrees

+
+
Returns:
+

angle in decimal hours

+
+
+
+ +
+
+sapphire.transformations.angles.radians_to_hours(angle)
+

Converts degrees to decimal hours

+
+
Parameters:
+

angle – angle in degrees

+
+
Returns:
+

angle in decimal hours

+
+
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/transformations/axes.html b/transformations/axes.html new file mode 100644 index 00000000..ef0abc83 --- /dev/null +++ b/transformations/axes.html @@ -0,0 +1,301 @@ + + + + + + + + Conversion between axes coordinate systems — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Conversion between axes coordinate systems

+

Perform various axes related transformations

+
    +
  • Transformation between Cartesian, polar, cylindrical, spherical and compass +coordinate systems.

  • +
  • Create a rotation matrix for rotations around a certain axis.

  • +
+

Cartesian coordinates: x, y, z axes.

+

Spherical coordinates: +- r: length of vector. +- theta: angle of the vector to the z-axis. +- phi: angle of vector to the x-axis in x,y-plane, rotating counterclockwise.

+

Cylindrical and polar coordinates: +- r: length of vector in x,y-plane. +- phi: angle of vector to the x-axis in x,y-plane, rotating counterclockwise. +- z: height above x,y-plane.

+

Compass coordinates: +- r: length of vector in x,y-plane. +- alpha: angle of vector to the y-axis in x,y-plane, rotating clockwise. +- z: height above x,y-plane.

+
+
+sapphire.transformations.axes.cartesian_to_spherical(x, y, z)
+

Converts Cartesian coordinates into spherical coordinates

+
+
Parameters:
+

x,y,z – Cartesian coordinates.

+
+
Returns:
+

tuple of spherical coordinates (r, theta, phi), +with theta and phi in radians.

+
+
+
+ +
+
+sapphire.transformations.axes.cartesian_to_cylindrical(x, y, z)
+

Converts Cartesian coordinates into cylindrical coordinates

+
+
Parameters:
+

x,y,z – Cartesian coordinates.

+
+
Returns:
+

tuple of cylindrical coordinates (r, phi, z), with +phi in radians.

+
+
+
+ +
+
+sapphire.transformations.axes.cartesian_to_polar(x, y)
+

Converts Cartesian coordinates into polar coordinates

+
+
Parameters:
+

x,y – Cartesian coordinates.

+
+
Returns:
+

tuple of polar coordinates (r, phi), with phi in radians.

+
+
+
+ +
+
+sapphire.transformations.axes.cartesian_to_compass(x, y, z)
+

Converts Cartesian coordinates into compass coordinates

+
+
Parameters:
+

x,y,z – Cartesian coordinates.

+
+
Returns:
+

tuple of compass coordinates (r, alpha, z), +with alpha in degrees.

+
+
+
+ +
+
+sapphire.transformations.axes.spherical_to_cartesian(r, theta, phi)
+

Convert spherical coordinates into Cartesian coordinates

+
+
Parameters:
+

r,theta,phi – spherical coordinates, with theta and phi in radians.

+
+
Returns:
+

tuple of Cartesian coordinates (x, y, z).

+
+
+
+ +
+
+sapphire.transformations.axes.cylindrical_to_cartesian(r, phi, z)
+

Convert cylindrical coordinates into Cartesian coordinates

+
+
Parameters:
+

r,phi,z – cylindrical coordinates, with phi in radians.

+
+
Returns:
+

tuple of Cartesian coordinates (x, y, z).

+
+
+
+ +
+
+sapphire.transformations.axes.polar_to_cartesian(r, phi)
+

Convert polar coordinates into Cartesian coordinates

+
+
Parameters:
+

r,phi – polar coordinates, with phi in radians.

+
+
Returns:
+

tuple of Cartesian coordinates (x, y).

+
+
+
+ +
+
+sapphire.transformations.axes.compass_to_cartesian(r, alpha, z)
+

Converts compass coordinates into Cartesian coordinates

+
+
Parameters:
+

r,alpha,z – compass coordinates, with alpha in degrees.

+
+
Returns:
+

tuple of Cartesian coordinates (x, y, z).

+
+
+
+ +
+
+sapphire.transformations.axes.rotate_cartesian(x, y, z, angle, axis='z')
+

Rotate Cartesian coordinates

+
+
Parameters:
+
    +
  • x,y,z – Cartesian coordinates.

  • +
  • angle – amount of rotation in radians.

  • +
  • axis – the axis to rotate around, either 'x', 'y', 'z', +or a (x,y,z) tuple specifying the axis to rotate about.

  • +
+
+
Returns:
+

tuple of Cartesian coordinates (x, y, z).

+
+
+
+ +
+
+sapphire.transformations.axes.rotation_matrix(angle, axis='z')
+

Generate a rotation matrix around an axis

+
+
Parameters:
+
    +
  • angle – amount of rotation in radians.

  • +
  • axis – the axis to rotate around, either 'x', 'y', 'z', +or a (x,y,z) tuple specifying the axis to rotate about.

  • +
+
+
Returns:
+

unitary rotation matrix.

+
+
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/transformations/base.html b/transformations/base.html new file mode 100644 index 00000000..eaccb551 --- /dev/null +++ b/transformations/base.html @@ -0,0 +1,160 @@ + + + + + + + + Conversion between different bases — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Conversion between different bases

+

Perform base conversions

+

Currently supports conversion between base 10 (decimal) and +base 60 (sexagesimal).

+
+
+sapphire.transformations.base.decimal_to_sexagesimal(decimal)
+

Convert decimal hours or degrees to sexagesimal.

+
+
Parameters:
+

decimal – decimal number to be converted to sexagismal.

+
+
Returns:
+

tuple of either (hours, minutes, seconds) or +(degrees, arcminutes, arcseconds).

+
+
+
+ +
+
+sapphire.transformations.base.sexagesimal_to_decimal(hd, minutes, seconds)
+

Convert sexagesimal hours or degrees to decimal.

+

Warning! Ensure each part has the correct sign. +e.g. -111d36m12s should be entered as (-111, -36, -12).

+
+
Parameters:
+
    +
  • hd – hours or degrees.

  • +
  • minutes – minutes or arcminutes.

  • +
  • seconds – seconds or arcseconds.

  • +
+
+
Returns:
+

decimal hours or degrees.

+
+
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/transformations/celestial.html b/transformations/celestial.html new file mode 100644 index 00000000..a21662f6 --- /dev/null +++ b/transformations/celestial.html @@ -0,0 +1,368 @@ + + + + + + + + Transformations between Celestial coordinate systems — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Transformations between Celestial coordinate systems

+

Perform various Celestial coordinate transformations

+

This module performs transformations between different +Celestial coordinate systems.

+

Legacy transformations (all those not marked astropy): +Formulae from: Duffett-Smith1990 +‘Astronomy with your personal computer’ +ISBN 0-521-38995-X

+

New transformations have been added with _astropy added to function name +They are very exact, in the order of arcsec. +Ethan van Woerkom is the author of the new transformations; contact him +for further information.

+
+
+sapphire.transformations.celestial.zenithazimuth_to_equatorial(latitude, longitude, timestamp, zenith, azimuth)
+

Convert Zenith Azimuth to Equatorial coordinates (J2000.0)

+
+
Parameters:
+
    +
  • latitude,longitude – Position of the observer on Earth in degrees. +North and east positive.

  • +
  • timestamp – GPS timestamp of the observation in seconds.

  • +
  • zenith – zenith is the angle relative to the Zenith in radians.

  • +
  • azimuth – azimuth angle of the observation in radians.

  • +
+
+
Returns:
+

Right ascension (ra) and Declination (dec) in radians.

+
+
+

From Duffett-Smith1990, 1500 EQHOR and 1600 HRANG

+
+ +
+
+sapphire.transformations.celestial.zenithazimuth_to_horizontal(zenith, azimuth)
+

Convert from Zenith Azimuth to Horizontal coordinates

+
+
Parameters:
+
    +
  • zenith – Zenith in radians

  • +
  • azimuth – Azimuth in radians

  • +
+
+
Return altitude, alt_azimuth:
+

Alt, Az in radians

+
+
+

Zenith Azimuth is the coordinate system used by HiSPARC. Zenith is +the angle between the zenith and the direction. Azimuth is the angle +in the horizontal plane, from East to North (ENWS).

+

Horizontal is the coordinate system as described in +Duffett-Smith1990 p38. Altitude is the angle above the horizon and +Azimuth the angle in the horizontal plane, from North to East (NESW).

+
+ +
+
+sapphire.transformations.celestial.horizontal_to_zenithazimuth(altitude, alt_azimuth)
+

Inverse of zenithazimuth_to_horizontal is the same transformation

+
+ +
+
+sapphire.transformations.celestial.horizontal_to_equatorial(latitude, lst, altitude, alt_azimuth)
+

Convert Horizontal to Equatorial coordinates (J2000.0)

+
+
Parameters:
+
    +
  • latitude – Position of the observer on Earth in degrees. +North positive.

  • +
  • lst – Local Siderial Time observer at the time of observation +in decimal hours.

  • +
  • altitude – altitude is the angle above the horizon in radians.

  • +
  • alt_azimuth – Azimuth angle in horizontal plane in radians.

  • +
+
+
Returns:
+

Right ascension (ra) and Declination (dec) in radians.

+
+
+

Warning: Inexact transformation; astropy functions preferred.

+

From Duffett-Smith1990, 1500 EQHOR and 1600 HRANG

+
+ +
+
+sapphire.transformations.celestial.horizontal_to_hadec(latitude, altitude, alt_azimuth)
+

Convert Horizontal to Hour Angle and Declination

+
+
Parameters:
+
    +
  • latitude – Position of the observer on Earth in degrees. +North positive.

  • +
  • altitude – altitude is the angle above the horizon in radians.

  • +
  • alt_azimuth – Azimuth angle in horizontal plane in radians.

  • +
+
+
Returns:
+

Hour angle (ha) and Declination (dec) in radians.

+
+
+

Warning: Inexact transformation; astropy functions preferred.

+

From Duffett-Smith1990, 1500 EQHOR and 1600 HRANG

+
+ +
+
+sapphire.transformations.celestial.ha_to_ra(ha, lst)
+

Convert Hour angle to right ascension

+
+
Parameters:
+
    +
  • ha – Hour angle in radians.

  • +
  • lst – Local Siderial Time observer at the time of observation +in decimal hours.

  • +
+
+
Returns:
+

Right ascension (ra) in radians.

+
+
+
+ +
+
+sapphire.transformations.celestial.equatorial_to_zenithazimuth(latitude, longitude, timestamp, right_ascension, declination)
+

Convert Equatorial (J2000.0) to Zenith Azimuth coordinates

+
+
Parameters:
+
    +
  • latitude,longitude – Position of the observer on Earth in degrees. +North and east positive.

  • +
  • timestamp – GPS timestamp of the observation in seconds.

  • +
  • right_ascension – right_ascension of the observation in radians.

  • +
  • declination – declination of the observation in radians.

  • +
+
+
Returns:
+

zenith and azimuth in radians.

+
+
+

This function was renamed from equatorial_to_horizontal to +equatorial_to_zenithazimuth in order to make it operate as the name does.

+

From Duffett-Smith1990, 1500 EQHOR and 1600 HRANG

+
+ +
+
+sapphire.transformations.celestial.zenithazimuth_to_equatorial_astropy(latitude, longitude, utc_timestamp, zenaz_coordinates)
+
+
Converts iterables of tuples of zenithazimuth

to equatorial coordinates

+
+
+
+
Parameters:
+
    +
  • latitude – Latitude in decimal degrees

  • +
  • longitude – Longitude in decimal degrees

  • +
  • utc_timestamp – Unix UTC timestamp integer

  • +
  • zenaz_coordinates – np.array of tuples (zen, az) in radians

  • +
+
+
Returns:
+

np.array of tuples (ra, dec) in radians

+
+
+

For increased speed using array input is recommended.

+
+ +
+
+sapphire.transformations.celestial.equatorial_to_zenithazimuth_astropy(latitude, longitude, utc_timestamp, equatorial_coordinates)
+
+
Converts iterables of tuples of equatorial

to zenithazimuth coordinates

+
+
+
+
Parameters:
+
    +
  • latitude – Latitude in decimal degrees

  • +
  • longitude – Longitude in decimal degrees

  • +
  • utc_timestamp – Unix UTC timestamp integer

  • +
  • equatorial_coordinates – np.array of tuples (ra, dec) in radians

  • +
+
+
Returns:
+

np.array of tuples (zen, az) in radians

+
+
+

For increased speed using array input is recommended.

+
+ +
+
+sapphire.transformations.celestial.equatorial_to_horizontal_astropy(latitude, longitude, utc_timestamp, equatorial_coordinates)
+
+
Converts iterables of tuples of equatorial coordinates

to horizontal coordinates

+
+
+
+
Parameters:
+
    +
  • latitude – Latitude in decimal degrees

  • +
  • longitude – Longitude in decimal degrees

  • +
  • utc_timestamp – Unix UTC timestamp integer

  • +
  • equatorial_coordinates – np.array of tuples (ra, dec) in radians

  • +
+
+
Returns:
+

np.array of tuples (az, alt) in radians

+
+
+

For increased speed using array input is recommended.

+
+ +
+
+sapphire.transformations.celestial.horizontal_to_equatorial_astropy(latitude, longitude, utc_timestamp, horizontal_coordinates)
+
+
Converts iterables of tuples of

horizontal coordinates to equatorial coordinates

+
+
+
+
Parameters:
+
    +
  • latitude – Latitude in decimal degrees

  • +
  • longitude – Longitude in decimal degrees

  • +
  • utc_timestamp – Unix UTC timestamp integer

  • +
  • horizontal_coordinates – np.array of tuples (az, alt) in radians

  • +
+
+
Returns:
+

np.array of tuples (ra, dec) in radians

+
+
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/transformations/clock.html b/transformations/clock.html new file mode 100644 index 00000000..d0a0c798 --- /dev/null +++ b/transformations/clock.html @@ -0,0 +1,508 @@ + + + + + + + + Time conversion functions — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Time conversion functions

+

Time transformations

+

This handles all the wibbly wobbly timey wimey stuff. +Such as easy conversions between different time systems. +Supported systems: GPS, UTC, GMST, LST, JD and MJD.

+

Formulae from:

+

IETF list of leap seconds +‘Leap seconds announced by the IERS’ +https://www.ietf.org/timezones/data/leap-seconds.list

+

Duffett-Smith1990 +‘Astronomy with your personal computer’ +ISBN 0-521-38995-X

+

USNO +‘Computing Greenwich Apparent Sidereal Time’ +http://aa.usno.navy.mil/faq/docs/GAST.php

+

Adrian Price-Whelan +apwlib.convert +https://github.com/adrn/apwlib

+
+
+sapphire.transformations.clock.LEAP_SECONDS = (('January 1, 2017', 18), ('July 1, 2015', 17), ('July 1, 2012', 16), ('January 1, 2009', 15), ('January 1, 2006', 14), ('January 1, 1999', 13), ('July 1, 1997', 12), ('January 1, 1996', 11), ('July 1, 1994', 10), ('July 1, 1993', 9), ('July 1, 1992', 8), ('January 1, 1991', 7), ('January 1, 1990', 6), ('January 1, 1988', 5), ('July 1, 1985', 4), ('July 1, 1983', 3), ('July 1, 1982', 2), ('July 1, 1981', 1))
+

Dates of leap second introductions.

+
+ +
+
+sapphire.transformations.clock.time_to_decimal(time)
+

Converts a time or datetime object into decimal time

+
+
Parameters:
+

time – datetime.time or datetime.datetime object.

+
+
Returns:
+

decimal number representing the input time.

+
+
+
+ +
+
+sapphire.transformations.clock.decimal_to_time(hours)
+

Converts decimal time to a time object

+
+
Parameters:
+

hours – datetime.time or datetime.datetime object.

+
+
Returns:
+

decimal number representing the input time.

+
+
+
+ +
+
+sapphire.transformations.clock.date_to_juliandate(year, month, day)
+

Convert year, month, and day to a Julian Date

+

Julian Date is the number of days since noon on January 1, 4713 B.C. +So the returned date will end in .5 because the date refers to midnight.

+
+
Parameters:
+
    +
  • year – a Gregorian year (B.C. years are negative).

  • +
  • month – a Gregorian month (1-12).

  • +
  • day – a Gregorian day (1-31).

  • +
+
+
Returns:
+

the Julian Date for the given year, month, and day.

+
+
+
+ +
+
+sapphire.transformations.clock.datetime_to_juliandate(dt)
+

Convert a datetime object in UTC to a Julian Date

+
+
Parameters:
+

dt – datetime object.

+
+
Returns:
+

The Julian Date for the given datetime object.

+
+
+
+ +
+
+sapphire.transformations.clock.juliandate_to_modifiedjd(juliandate)
+

Convert a Julian Date to a Modified Julian Date

+
+
Parameters:
+

juliandate – a Julian Date.

+
+
Returns:
+

the Modified Julian Date.

+
+
+
+ +
+
+sapphire.transformations.clock.modifiedjd_to_juliandate(modifiedjd)
+

Convert a Modified Julian Date to Julian Date

+
+
Parameters:
+

modifiedjf – a Modified Julian Date.

+
+
Returns:
+

Julian Date.

+
+
+
+ +
+
+sapphire.transformations.clock.datetime_to_modifiedjd(dt)
+

Convert a datetime object in UTC to a Modified Julian Date

+
+
Parameters:
+

dt – datetime object.

+
+
Returns:
+

the Modified Julian Date.

+
+
+
+ +
+
+sapphire.transformations.clock.juliandate_to_gmst(juliandate)
+

Convert a Julian Date to Greenwich Mean Sidereal Time

+
+
Parameters:
+

juliandate – Julian Date.

+
+
Returns:
+

decimal hours in GMST.

+
+
+
+ +
+
+sapphire.transformations.clock.utc_to_gmst(dt)
+

Convert a datetime object in UTC time to Greenwich Mean Sidereal Time

+
+
Parameters:
+

dt – datetime object in UTC time.

+
+
Returns:
+

decimal hours in GMST.

+
+
+
+ +
+
+sapphire.transformations.clock.gmst_to_utc(dt)
+

Convert datetime object in Greenwich Mean Sidereal Time to UTC

+

Note: this requires a datetime object, not just the decimal hours.

+
+
Parameters:
+

dt – datetime object in GMST time.

+
+
Returns:
+

datetime object in UTC.

+
+
+
+ +
+
+sapphire.transformations.clock.juliandate_to_utc(juliandate)
+

Convert Julian Date to datetime object in UTC

+
+
Parameters:
+

juliandate – a Julian Date.

+
+
Returns:
+

datetime object in UTC time.

+
+
+
+ +
+
+sapphire.transformations.clock.modifiedjd_to_utc(modifiedjd)
+

Convert a Modified Julian Date to datetime object in UTC

+
+
Parameters:
+

juliandate – a Modified Julian Date.

+
+
Returns:
+

datetime object in UTC time.

+
+
+
+ +
+
+sapphire.transformations.clock.gmst_to_lst(hours, longitude)
+

Convert Greenwich Mean Sidereal Time to Local Sidereal Time

+
+
Parameters:
+
    +
  • hours – decimal hours in GMST.

  • +
  • longitude – location in degrees, east positive.

  • +
+
+
Returns:
+

decimal hours in LST.

+
+
+
+ +
+
+sapphire.transformations.clock.lst_to_gmst(hours, longitude)
+

Convert Local Sidereal Time to Greenwich Mean Sidereal Time

+
+
Parameters:
+
    +
  • hours – decimal hours in LST.

  • +
  • longitude – location in degrees, east positive.

  • +
+
+
Returns:
+

decimal hours in GMST.

+
+
+
+ +
+
+sapphire.transformations.clock.utc_to_lst(dt, longitude)
+

Convert UTC to Local Sidereal Time

+
+
Parameters:
+
    +
  • dt – datetime object in UTC.

  • +
  • longitude – location in degrees, east positive.

  • +
+
+
Returns:
+

decimal hours in LST.

+
+
+
+ +
+
+sapphire.transformations.clock.gps_to_utc(timestamp)
+

Convert GPS time to UTC

+
+
Parameters:
+

timestamp – GPS timestamp in seconds.

+
+
Returns:
+

UTC timestamp in seconds.

+
+
+
+ +
+
+sapphire.transformations.clock.utc_to_gps(timestamp)
+

Convert UTC to GPS time

+
+
Parameters:
+

timestamp – UTC timestamp in seconds.

+
+
Returns:
+

GPS timestamp in seconds.

+
+
+
+ +
+
+sapphire.transformations.clock.utc_from_string(date)
+

Convert a date string to UTC

+
+
Parameters:
+

date – date string.

+
+
Returns:
+

UTC timestamp in seconds.

+
+
+
+ +
+
+sapphire.transformations.clock.gps_from_string(date)
+

Convert a date string to GPS time

+
+
Parameters:
+

date – date string.

+
+
Returns:
+

GPS timestamp in seconds.

+
+
+
+ +
+
+sapphire.transformations.clock.gps_to_lst(timestamp, longitude)
+

Convert a GPS timestamp to lst

+
+
Parameters:
+
    +
  • timestamp – GPS timestamp in seconds.

  • +
  • longitude – location in degrees, east positive.

  • +
+
+
Returns:
+

decimal hours in LST.

+
+
+
+ +
+
+sapphire.transformations.clock.gps_to_datetime(timestamp)
+

Convert a GPS timestamp to datetime object

+
+
Parameters:
+

timestamp – GPS timestamp in seconds.

+
+
Returns:
+

datetime object.

+
+
+
+ +
+
+sapphire.transformations.clock.datetime_to_gps(dt)
+

Convert a GPS datetime object to a timestamp

+
+
Parameters:
+

dt – GPS datetime object.

+
+
Returns:
+

GPS timestamp in seconds.

+
+
+
+ +
+
+sapphire.transformations.clock.process_time(time)
+

Convert timestamp or datetime to timestamp

+
+
Parameters:
+

time – GPS datetime object or GPS timestamp.

+
+
Returns:
+

GPS timestamp.

+
+
+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/transformations/geographic.html b/transformations/geographic.html new file mode 100644 index 00000000..fe5eea6e --- /dev/null +++ b/transformations/geographic.html @@ -0,0 +1,288 @@ + + + + + + + + Transformations between geographic coordinate systems — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Transformations between geographic coordinate systems

+

Perform various coordinate transformations

+

This module performs various coordinate transformations, based on some +well-known formulas.

+
+
+class sapphire.transformations.geographic.WGS84Datum
+

Definition of the WGS84 datum

+

These definitions are taken from +https://en.wikipedia.org/wiki/Geodetic_system, believing that enough +editors have gone over them to make sure they are correct.

+
+
+a = 6378137.0
+
+ +
+
+f = 0.0033528106647474805
+
+ +
+
+b = 6356752.314245179
+
+ +
+
+e = 0.08181919084262149
+
+ +
+
+eprime = 0.08209443794969568
+
+ +
+ +
+
+class sapphire.transformations.geographic.FromWGS84ToENUTransformation(ref_llacoordinates)
+

Convert between various geographic coordinate systems

+

This class converts coordinates between LLA, ENU, and ECEF.

+

Initialize the transformation object.

+
+
Parameters:
+

ref_llacoordinates – reference latitude, longitude, and altitude +coordinates. These are used as origin for ENU coordinates.

+
+
+
+
+geode = <sapphire.transformations.geographic.WGS84Datum object>
+
+ +
+
+transform(coordinates)
+

Transform WGS84 coordinates to ENU coordinates

+
+ +
+
+lla_to_enu(coordinates)
+

Transform WGS84 coordinates to ENU coordinates

+
+ +
+
+enu_to_lla(coordinates)
+

Transform WGS84 coordinates to ENU coordinates

+
+ +
+
+lla_to_ecef(coordinates)
+

Convert from LLA coordinates to ECEF coordinates

+

LLA: Latitude, Longitude, Altitude +ECEF: Earth-Centered, Earth-Fixed

+

The conversion formulas are taken from +https://en.wikipedia.org/wiki/Geographic_coordinate_conversion#From_geodetic_to_ECEF_coordinates +but slightly reworked.

+

Mind that the input is expected to be in degrees, as is standard in +coordinate notation.

+
+
Parameters:
+

coordinates – tuple of latitude, longitude (both in degrees) +and altitude (in meters).

+
+
Returns:
+

ECEF coordinates (in meters).

+
+
+
+ +
+
+ecef_to_lla(coordinates)
+

Convert from ECEF coordinates to LLA coordinates

+

ECEF: Earth-Centered, Earth-Fixed +LLA: Latitude, Longitude, Altitude

+

The conversion formulas are taken from +https://gist.github.com/klucar/1536054

+
+
Parameters:
+

coordinates – tuple of X, Y, and Z (in meters).

+
+
Returns:
+

latitude, longitude (in degrees) and altitude (in meters).

+
+
+
+ +
+
+ecef_to_enu(coordinates)
+

Convert from ECEF coordinates to ENU coordinates

+

ECEF: Earth-Centered, Earth-Fixed +ENU: East, North, Up

+

The conversion formulas are taken from +https://en.wikipedia.org/wiki/Geodetic_system#From_ECEF_to_ENU

+
+
Parameters:
+

coordinates – a tuple containing the ECEF coordinates (in meters) +of the point to transform

+
+
Returns:
+

east, north, and up (in meters).

+
+
+
+ +
+
+enu_to_ecef(coordinates)
+

Convert from ENU coordinates to ECEF coordinates

+

ENU: East, North, Up +ECEF: Earth-Centered, Earth-Fixed

+
+
Parameters:
+

coordinates – a tuple containing the ENU coordinates (in meters).

+
+
Returns:
+

ECEF coordinates (in meters).

+
+
+
+ +
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/tutorial.html b/tutorial.html new file mode 100644 index 00000000..d31272b9 --- /dev/null +++ b/tutorial.html @@ -0,0 +1,951 @@ + + + + + + + + Tutorial — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ +
+

Tutorial

+

SAPPHiRE simplifies data access, simulations and analysis for the HiSPARC experiment. In this tutorial, we’ll try to give +you a feeling for the things you can do with SAPPHiRE. How can you +download data? How can you analyze this data? How can you produce +pulseheight histograms? How can you calculate the direction of cosmic +rays? This tutorial will only give you an overview of what’s possible +with SAPPHiRE. For details on all available classes and methods, please +see the SAPPHiRE Reference.

+
+

Note

+

We’ll require you to know basic Python. If you’re unfamiliar with Python, +you can look at the official Python tutorial, the book Think Python, or Getting started with +Python for science.

+
+
+

First steps

+

In a few examples, we will plot the data which we have produced. We make use +of pylab, which is included with matplotlib. If you have Anaconda installed, +you can use the Spyder environment. You can write a script in the main window, +or type short commands in the command prompt in the bottom right. The first +thing you have to do is import everything from pylab. That makes it +ridiculously easy to plot things:

+
>>> from pylab import *
+
+
+

You can also start an IPython terminal with pylab using:

+
$ ipython --pylab
+
+
+

In that case, you don’t need to import pylab.

+

Whenever you see something like:

+
>>> print('Hello, world')
+Hello, world
+
+
+

it means we’re typing in Python code. The >>> is the Python prompt. +It tells you that the Python interpreter is waiting for you to give it +some instructions. In the above example, we’ve typed in print ('Hello, +world'). The interpreter subsequently executed the code and printed +Hello, world on the screen.

+

The first thing we’ll have to do to start using SAPPHiRE is to import +the SAPPHiRE module:

+
>>> import sapphire
+
+
+

There will be no output if everything is successful. It is easy to get +some help from inside the Python terminal. Just say:

+
>>> help(sapphire)
+
+
+

and you’ll be presented with a basic help screen. Instead of +sapphire, you can throw in modules, packages, functions, classes, +objects, etc. Everything in Python has some help text associated with +it. Not all of it is very helpful to a newcomer, hence this tutorial. +All help text is also available in the SAPPHiRE Reference.

+
+
+

Downloading and accessing HiSPARC data

+

The SAPPHiRE package comprises multiple modules and packages. To access data +from the public database, we’ll have to import the sapphire.esd module. +This module gives us access to the event summary data, which is the raw +HiSPARC data with preliminary analysis already included. It is simple to +quickly start playing with data:

+
>>> from sapphire import esd
+>>> data = esd.quick_download(102)
+100%|####################################|Time: 5.91
+>>> print(data)
+data8.h5 (File) ''
+Last modif.: 'Thu Oct 22 16:02:05 2015'
+Object Tree:
+/ (RootGroup) ''
+/s102 (Group) ''
+/s102/events (Table(46382,)) ''
+
+
+

First, we import the sapphire.esd module. Then, we download data from +station 102 using the sapphire.esd.quick_download() function. This +function downloads yesterday’s data, and creates a datafile on the fly. More on +that later.

+

If we want to exercise more control, we need to do some things manually. First, +we need the tables module to actually store the data. PyTables is based on the open HDF5 data format, which is used by many +(research) institutes. For +example, it is used by the KNMI and by NASA. To specify the date and time for +which to download the data, we need the datetime module. Thus, we have:

+
>>> import tables
+>>> import datetime
+>>> from sapphire import esd
+
+
+

Creating an empty data file, with the name mydata.h5, is done easily:

+
>>> data = tables.open_file('mydata.h5', 'w')
+
+
+

The 'w' means write, which creates a file for writing (and reading). +Mind that this will create an empty file. If there already was a file +with that name, it will be overwritten! Alternatively, you can say +'a', which means append, thus adding to an existing file without +overwriting its contents. Finally, you can specify 'r' for +read-only.

+
+

Downloading data

+

To download data, we have to specify the date/time range. If we want to +download data from the December 1, 2012 all through December 2, 2012, +we can specify this by typing:

+
>>> start = datetime.datetime(2012, 12, 1)
+>>> end = datetime.datetime(2012, 12, 3)
+
+
+

Mind that if we do not specify the hour of day, it is taken to be 00:00 +hours. Thus, there is no data included for December 3. Alternatively, +we can download data from a two hour interval on October 17 by specifying +the hour of day:

+
>>> start = datetime.datetime(2012, 10, 17, 19)
+>>> end = datetime.datetime(2012, 10, 17, 21)
+
+
+

which is from 19:00 to 21:00 hours. It is important to realize that we use a +GPS clock, which is equal to UTC (up to some leap seconds). So, if we download +data for a station in the Netherlands, we have just said from 20:00 to 22:00 +local time (when it’s not summer time). You can specify the time up to the +second.

+

We have not actually done anything yet. We have just stored our time +window in two arbitrarily-named variables, start and end. To +download data from station 501 and store it in a group with name /s501, +we can use the sapphire.esd.download_data() function. Since we’ve +imported esd from sapphire, we can drop the sapphire prefix:

+
>>> esd.download_data(data, '/s501', 501, start, end)
+100%|####################################|Time: 0:00:16
+
+
+

It will show a progressbar to indicate the progress of the download.

+

As you can see in the reference documentation of +sapphire.esd.download_data(), available by either clicking on +the link or typing in help(esd.download_data) in the +interpreter, the function takes six arguments: file, group, station_number, +start, end and type. The last one has the default argument +‘events’, and may be omitted, as we have done here. In our example, we +have opened a file, mydata.h5, and have stored the file handler in +the variable data. So, we passed data to the function. The group +name is /s501. Group names in PyTables are just like folders in a +directory hierarchy. So, we might have specified +/path/to/my/hisparc/data/files/for_station/s501. It is important to +note that this has absolutely nothing to do with files. Whatever path +you specify, it is all contained inside your data file. Since this is +just a small data file, we have opted for a simple structure. At the +moment, just one group named s501 at the root of the hierarchy. Group +names must start with a letter, hence the s for station.

+

The station_number is simply the station number. Here, we’ve chosen to +download data for station 501, located at Nikhef. The start and end +parameters specify the date/time range.

+

Finally, type selects whether to download event or weather data should +be downloaded. We’ve selected the default, which is events. We can also +download the weather data by changing the type to 'weather':

+
>>> esd.download_data(data, '/s501', 501, start, end, type='weather')
+100%|####################################|Time: 0:00:10
+
+
+

To access the raw data that includes the original detector traces the +sapphire.publicdb.download_data() function can be used instead. However, +downloading data will take much longer that way. If only some traces need to be +accessed, the sapphire.api is a better choice. We’ll use that module +later in the tutorial.

+
+
+

Looking around

+

If you want to know what groups and tables are contained within the data +file, just print it:

+
>>> print(data)
+mydata.h5 (File) ''
+Last modif.: 'Sat Dec 29 14:50:55 2012'
+Object Tree:
+/ (RootGroup) ''
+/s501 (Group) 'Data group'
+/s501/events (Table(137600,)) 'HiSPARC coincidences table'
+/s501/weather (Table(51513,)) 'HiSPARC weather data'
+
+
+

The object tree gives an overview of all groups and tables. As you can +see, the /s501 group contains two tables, events and weather. +The events table contains the data from the HiSPARC scintillators, while +the weather table contains data from the (optional) weather station.

+

To directly access any object in the hierarchy, you can make use of the +data.root object, which points to the root group. Then, just specify +the remaining path, with dots instead of slashes. For example, to access +the events table:

+
>>> print(data.root.s501.events)
+/s501/events (Table(137600,)) 'HiSPARC coincidences table'
+
+
+

If you want, you can also access the object using its name as a string, by calling get_node on the file handler:

+
>>> print(data.get_node('/s501/events'))
+/s501/events (Table(137600,)) 'HiSPARC coincidences table'
+
+
+

Of course, we’d like to get some more information. You can drop the print +statement, and just access the object directly. PyTables is set up such +that it will give more detailed information whenever you specify the +object directly:

+
>>> data.root.s501.events
+/s501/events (Table(137600,)) ''
+  description := {
+  "event_id": UInt32Col(shape=(), dflt=0, pos=0),
+  "timestamp": Time32Col(shape=(), dflt=0, pos=1),
+  "nanoseconds": UInt32Col(shape=(), dflt=0, pos=2),
+  "ext_timestamp": UInt64Col(shape=(), dflt=0, pos=3),
+  "pulseheights": Int16Col(shape=(4,), dflt=0, pos=4),
+  "integrals": Int32Col(shape=(4,), dflt=0, pos=5),
+  "n1": Float32Col(shape=(), dflt=0.0, pos=6),
+  "n2": Float32Col(shape=(), dflt=0.0, pos=7),
+  "n3": Float32Col(shape=(), dflt=0.0, pos=8),
+  "n4": Float32Col(shape=(), dflt=0.0, pos=9),
+  "t1": Float32Col(shape=(), dflt=0.0, pos=10),
+  "t2": Float32Col(shape=(), dflt=0.0, pos=11),
+  "t3": Float32Col(shape=(), dflt=0.0, pos=12),
+  "t4": Float32Col(shape=(), dflt=0.0, pos=13),
+  "t_trigger": Float32Col(shape=(), dflt=0.0, pos=14)}
+  byteorder := 'little'
+  chunkshape := (819,)
+
+
+

There you go! But what does it all mean? Well, if you want to get to +the bottom of it, read the PyTables documentation. We’ll give a quick +overview here.

+

First, this table contains 137600 rows. In total, there are fourteen +columns: event_id, timestamp, nanoseconds, ext_timestamp, +pulseheights, integrals, n1-n4, t1-t4 and +t_trigger.

+

Each event has a unique [1] identifier, event_id. Each +event has a Unix timestamp in GPS time, not UTC. A Unix timestamp is the number of seconds that +have passed since January 1, 1970. The sub-second part of the timestamp +is given in nanoseconds. The ext_timestamp is the full +timestamp in nanoseconds. Since there cannot exist another event with the same +timestamp, this field in combination with the station number uniquely +identifies the event. The pulseheights and integrals fields are +values derived from the PMT traces by the HiSPARC DAQ. The n# +columns are derived from the integrals and the t# and +t_trigger fields are obtained after analyzing the event traces on +the server. For some fields there are four values, one for each detector. +If a station only has two detectors, the values for the missing two +detectors are -1. If the baseline of the trace could not be determined +all these values are -999.

+

We’ll get to work with this data in a moment. First, we’ll take a look at +the weather table:

+
>>> data.root.s501.weather
+/s501/weather (Table(51513,)) 'HiSPARC weather data'
+  description := {
+  "event_id": UInt32Col(shape=(), dflt=0, pos=0),
+  "timestamp": Time32Col(shape=(), dflt=0, pos=1),
+  "temp_inside": Float32Col(shape=(), dflt=0.0, pos=2),
+  "temp_outside": Float32Col(shape=(), dflt=0.0, pos=3),
+  "humidity_inside": Int16Col(shape=(), dflt=0, pos=4),
+  "humidity_outside": Int16Col(shape=(), dflt=0, pos=5),
+  "barometer": Float32Col(shape=(), dflt=0.0, pos=6),
+  "wind_dir": Int16Col(shape=(), dflt=0, pos=7),
+  "wind_speed": Int16Col(shape=(), dflt=0, pos=8),
+  "solar_rad": Int16Col(shape=(), dflt=0, pos=9),
+  "uv": Int16Col(shape=(), dflt=0, pos=10),
+  "evapotranspiration": Float32Col(shape=(), dflt=0.0, pos=11),
+  "rain_rate": Float32Col(shape=(), dflt=0.0, pos=12),
+  "heat_index": Int16Col(shape=(), dflt=0, pos=13),
+  "dew_point": Float32Col(shape=(), dflt=0.0, pos=14),
+  "wind_chill": Float32Col(shape=(), dflt=0.0, pos=15)}
+  byteorder := 'little'
+  chunkshape := (1310,)
+
+
+

We’ll let these column names speak for themselves.

+
+
+

Accessing the data

+

We can access the data in several ways. We can address the complete +table, or just one or several rows from it. We can read out a single +column, or select data based on a query. Before we do any of that, we’ll +save us some typing:

+
>>> events = data.root.s501.events
+
+
+

Now, we have stored a short-hand reference to the events table. Let’s get +the first event:

+
>>> events[0]
+(0L, 1445385601, 613271528L, 1445385601613271528L, [3, 266, 400, 372],
+ [0, 3090, 5695, 5621], 0.0, 1.03120, 1.55130, 1.58820,
+ -999.0, 1002.5, 1000.0, 1022.5, 1030.0, -999.0, -999.0)
+
+
+

That’s the first event! It is not, however, immediately clear what +numbers correspond to which columns. They are in order, however, so you +could find out. It is often easier to specify the column you’re +interested in:

+
>>> events[0]['pulseheights']
+array([  3, 266, 400, 372], dtype=int16)
+
+
+

Which gives us the pulseheights of the first event. You can recognize the same +numbers in the full event data above. The pulseheights are 16-bit integers +(that’s the dtype=int16) and are determined after digitizing the events +using an analog-digital converter (ADC). Each unit corresponds to about -0.57 +mV. You can tell that all but the first detector had relatively large +pulseheights, and that they were registered as a significant peak in the +signal.

+

If you’re interested in the pulseheights of all events, the fastest way +to do it is to make use of the Table.col method of the table:

+
>> events.col('pulseheights')
+array([[  3, 266, 400, 372],
+       [  4, 277, 887,   7],
+       [ 72, 256,   6, 330],
+       ...,
+       [162,  78,   4, 299],
+       [ 10,   6, 618, 446],
+       [593, 621, 343,  13]], dtype=int16)
+
+
+

It is also possible to select the data based on a query. For example, to +select all events between timestamps 1354320000 and 1354323600 (a one-hour +time span):

+
>>> t0 = 1354320000
+>>> t1 = t0 + 3600
+>>> sel_events = events.read_where('(t0 <= timestamp) & (timestamp < t1)')
+>>> len(sel_events)
+2836
+
+
+

Thus, we have selected 2836 events. The variable sel_events no longer +points to a table. We can no longer make use of the Table.col +method, but we can access all pulseheights in the following way:

+
>>> sel_events['pulseheights']
+array([[173,   3, 407,   3],
+       [  1,   2, 313, 756],
+       [211,   2,   2, 268],
+       ...,
+       [328, 556, 255,  15],
+       [  3, 325, 309,   3],
+       [  2,   2, 271, 381]], dtype=int16)
+
+
+

This notation is possible for arrays, but not for tables. So, for tables, +use the Table.col method. For arrays, use this special notation.

+
+
+

The sapphire.time_util module

+

SAPPHiRE includes a handy module: sapphire.time_util. This saves you +from the hassle of converting timestamps and confusing local time and GPS (or +UTC) time. It is important to realize that the HiSPARC station uses a GPS +clock, and thus saves all timestamps in GPS time, which is certainly not local +time! You can look up GPS time, but +suffice it to say that it is almost equal to UTC time. The difference is the +leap seconds introduced after 1980. In January 2013, GPS time was ahead of UTC +by 16 seconds. Since July 2015, it is ahead by 17 seconds. We will not refer +to UTC or local time, but instead always refer to GPS time!

+

While you tell SAPPHiRE to download data using year, month, day, hour, +minutes, seconds notation, the events table contains timestamps. It is +often hard to convert between the two. For example, the correct +conversion between a GPS date/time and a GPS timestamp is given by:

+
>>> calendar.timegm(datetime.datetime(2012, 12, 1, 0).utctimetuple())
+1354320000
+
+
+

Which is, at best, cumbersome. It is easy, however, to screw up and +inadvertently convert to local time. For your benefit, we have included +the sapphire.time_util.GPSTime class. You instantiate the class +by giving it a GPS time to work with. It can either be in date/time +notation, or as a timestamp. For example, the exact same result is +obtained by these two last lines of code:

+
>>> import sapphire.time_util
+>>> sapphire.time_util.GPSTime(2012, 12, 1)
+>>> sapphire.time_util.GPSTime(1354320000)
+
+
+

If you store the instance, you can then call several methods to convert +the date/time to whatever you require:

+
>>> gpstime = sapphire.time_util.GPSTime(2012, 12, 1)
+>>> gpstime.datetime()
+datetime.datetime(2012, 12, 1, 0, 0)
+>>> gpstime.description()
+'Sat Dec  1 00:00:00 2012'
+>>> gpstime.gpstimestamp()
+1354320000
+
+
+

Or, indeed:

+
>>> gpstime = sapphire.time_util.GPSTime(1354320000)
+>>> gpstime.datetime()
+datetime.datetime(2012, 12, 1, 0, 0)
+>>> gpstime.description()
+'Sat Dec  1 00:00:00 2012'
+>>> gpstime.gpstimestamp()
+1354320000
+
+
+

It is now easy to select events occurring between 12:00 and 13:00 hours GPS +time on December 2, 2012:

+
>>> t0 = sapphire.time_util.GPSTime(2012, 12, 2, 12).gpstimestamp()
+>>> t1 = sapphire.time_util.GPSTime(2012, 12, 2, 13).gpstimestamp()
+>>> t0, t1
+(1354449600, 1354453200)
+>>> sel_events = events.read_where('(t0 <= timestamp) & (timestamp < t1)')
+>>> len(sel_events)
+2817
+
+
+

And when did the tenth event occur? Well:

+
>>> t = sel_events[9]['timestamp']
+>>> t
+1354449620
+>>> sapphire.time_util.GPSTime(t).description()
+'Sun Dec  2 12:00:20 2012'
+
+
+

To shorten the typing somewhat, remember that in Python you can import +classes from modules into your own namespace:

+
>>> from sapphire.time_util import GPSTime
+>>> GPSTime(t).description()
+'Sun Dec  2 12:00:20 2012'
+
+
+
+
+

Plotting data

+

Now that we can access the data, we want to visualize it. Plotting data +is a great way to do that. And of course, the venerable histogram is +still very useful to condense thousands of events into one display. Pylab +contains an easy function to do just that: hist. Let’s try to +recreate a few graphs as seen on the HiSPARC data display:

+
>>> ph = events.col('pulseheights')
+>>> hist(ph)
+([array([114794,  17565,   3062,   1009,    502,    285,    170,     86,
+           72,     55]), array([112813,  19028,   3339,   1246,    540,    295,    163,    100,
+           66,     10]), array([109162,  21833,   4246,   1345,    579,    290,    113,     32,
+            0,      0]), array([109996,  21283,   4028,   1285,    581,    251,    133,     43,
+            0,      0])], array([  1.00000000e+00,   3.91100000e+02,   7.81200000e+02,
+         1.17130000e+03,   1.56140000e+03,   1.95150000e+03,
+         2.34160000e+03,   2.73170000e+03,   3.12180000e+03,
+         3.51190000e+03,   3.90200000e+03]), <a list of 4 Lists of Patches objects>)
+
+
+_images/tutorial-hist-simple.png + +

This will not do. Firstly, data from the four detectors is pictured as +four side-by-side colored bars. Secondly, the number of bins is very low; +it is only ten. Thirdly, the data range continues up to very high values +with hardly any events.

+

To fix this, we’ll make use of several arguments that can be passed to the +hist function. We’ll also make use of some NumPy (documentation) functionality. For Pylab +documentation, see the Matplotlib site. +Try this:

+
>>> bins = linspace(0, 2000, 101)
+>>> hist(ph, bins, histtype='step', log=True)
+>>> xlabel("Pulseheight [ADC]")
+>>> ylabel("Counts")
+>>> title("Pulseheight histogram (log scale)")
+
+
+

The linspace function returns an array with range from 0 to 2000 with a +total number of 101 values. The first value is 0, the last is 2000. These are +the edges of the bins. So, 101 values means exactly 100 bins between 0 and +2000. The hist function will then plot a stepped histogram with a log +scale. Finally, we add some labels and a title. This is the result:

+_images/tutorial-hist-better.png + +

In this plot, the gamma and charged particle part of the spectrum are easy +to distinguish. The cut at 123 ADC is due to the trigger. The bump at +approximately 300 ADC is the so-called MIP (minimum ionizing particle) +peak. For an explanation of this plot and the features of the pulseheight +histogram, see David’s thesis, +page 44–45, and 49–51.

+
+
+
+

Obtaining coincidences

+

If you work with HiSPARC data, invariably you’ll be interested in +coincidences between HiSPARC stations. That is, are there showers +which have been observed by multiple stations? To find out, we’ll make +use of the sapphire.analysis.coincidences module.

+ +
+

Downloading coincidences

+

Just like events or weather data for a single station the ESD provides +coincidence data. This means that you can directly download coincidences from +the server. In most cases this can save a lot of disc space, because only +events in a coincidence will be stored.

+

Downloading coincidences is very similar to downloading data. First import the +required packages, open a PyTables file, and specify the date/time range. +With coincidences two additional options are available, first you can select +which stations you want to consider. This can be all stations in the +network, by not specifying any. It can be a subset of stations by listing +those stations (upto 30 stations), or a cluster of stations by giving the name +of the cluster.

+

So first import the packages:

+
>>> import datetime
+>>> import tables
+>>> from sapphire import esd
+
+
+

Set the date/time range:

+
>>> start = datetime.datetime(2012, 12, 1)
+>>> end = datetime.datetime(2012, 12, 3)
+
+
+

Open (in this case create) a datafile:

+
>>> data = tables.open_file('data_coincidences.h5', 'w')
+
+
+

Then download the coincidences. Here we specify the cluster ‘Enschede’ to +select all stations in that cluster. By setting n to 3 we require that a +coincidence has at least 3 events.

+
>>> esd.download_coincidences(data, cluster='Enschede',
+...                           start=start, end=end, n=3)
+
+
+

If you now look in the data file it will contain event tables for all stations +with at least one event in a coincidence, and a coincidence table for the +coincidence data. Just like when coincidences were searched manually:

+
>>> print(data)
+Object Tree:
+/ (RootGroup) ''
+/coincidences (Group) ''
+/coincidences/c_index (VLArray(776,)) ''
+/coincidences/coincidences (Table(776,)) ''
+/coincidences/s_index (VLArray(124,)) ''
+/hisparc (Group) ''
+/hisparc/cluster_enschede (Group) ''
+/hisparc/cluster_enschede/station_7001 (Group) ''
+/hisparc/cluster_enschede/station_7001/events (Table(776,)) ''
+/hisparc/cluster_enschede/station_7002 (Group) ''
+/hisparc/cluster_enschede/station_7002/events (Table(776,)) ''
+/hisparc/cluster_enschede/station_7003 (Group) ''
+/hisparc/cluster_enschede/station_7003/events (Table(776,)) ''
+
+
+

Footnotes

+ +
+
+
+

Reconstructions

+
+

Reconstructing ESD Events

+

Assume data_s501.h5 contains events downloaded from the ESD for station +501:

+
>>> import tables
+>>> from sapphire import ReconstructESDEvents
+>>> data = tables.open_file('data_s501.h5', 'a')
+>>> station_path = '/s501'  # location of the event table in datafile
+>>> rec = ReconstructESDEvents(data, station_path, 501, verbose=True)
+Constructed object <Station, id: 0, number: 501, cluster:
+HiSPARCStations([501])> from public database.
+
+
+

The parameter verbose=True forces the reconstruction class to be +verbose about the metadata about station layout of timing offsets that is +being used. Here, a HiSPARCStations object is created which retrieves +metadata from the public database.

+

Now let’s reconstruct the events and store the results in the datafile:

+
>>> rec.reconstruct_and_store()
+Reading detector offsets from public database.
+100%|#################################################|Time: 0:00:31
+100%|#################################################|Time: 0:00:21
+
+
+

The reconstruction class notifies us that detector timing offsets are being +retrieved from the public database. First directions are reconstructed and +subsequently core positions are reconstructed.

+

The results are stored in the datafile in the reconstructions group:

+
>>> print(data.root.s501.reconstructions)
+/s501/reconstructions (Table(29569,)) ''
+
+>>> data.root.s501.reconstructions.col('zenith')
+array([ nan,  nan,  nan, ...,  nan,  nan, 0.66482645], dtype=float32)
+
+
+

The nan values in the zenith angle array are values that cannot be +reconstructed:

+
>>> from numpy import isnan
+>>> theta = data.root.s501.reconstructions.col('zenith')
+>>> theta = theta.compress(~isnan(theta))
+array([ 0.59542936,  0.74284476,  0.38334498, ...,  0.41376889,
+    0.07834953,  0.66482645], dtype=float32)
+
+
+
+
+

Reconstructing simulated events

+

Assume the datafile (data) contains simulated events, generated by +sapphire.simulations.groundparticles.GroundParticlesSimulation. +This class stores the metadata of the simulated station (cluster) in the +hdf5 file, which can be read by the reconstruction class:

+
>>> rec = ReconstructESDEvents(data, station_path, 501, verbose=True)
+Read cluster HiSPARCStations([501]) from datafile.
+
+
+

The class has read the station (cluster object) from the datafile. This +cluster object contains both the detector locations as well as the +detector timing offsets:

+
>>> rec.reconstruct_and_store()
+Read detector offsets from cluster object.
+100%|#################################################|Time: 0:00:31
+100%|#################################################|Time: 0:00:21
+
+
+

Note that the detector (timing) offset from the datafile are used, +and not the offsets from the public database.

+
+
+

Reconstructing ESD coinicdences

+

Coincidences can be reconstructed analogous to ESD Events:

+
>>> import tables
+>>> from sapphire import ReconstructESDCoincidences
+>>> data = tables.open_file('data_s501_s502_s503.h5', 'a')
+>>> rec = ReconstructESDEvents(data, verbose=True)
+Constructed cluster HiSPARCStations([501, 502, 503]) from public
+database.
+
+
+

The constructed cluster object is created from the stations in the +datafile.

+

Reconstruct:

+
>>> rec.reconstruct_and_store()
+Using timing offsets from public database.
+100%|#################################################|Time: 0:00:31
+100%|#################################################|Time: 0:00:21
+
+
+
+
+

Reconstructing simulated coincidences

+

The ReconstructESDCoincidences class can reconstruct simulated +coincidences, using the cluster objects stored by the simulation class +in the datafile analogous to ReconstructESDEvents.

+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/utils.html b/utils.html new file mode 100644 index 00000000..87dbf926 --- /dev/null +++ b/utils.html @@ -0,0 +1,298 @@ + + + + + + + + Common utility functions — SAPPHiRE 2.0.0 documentation + + + + + + + + + + + + + +
+
+
+
+ +
+

Common utility functions

+

Utilities

+

The module contains some commonly functions and classes.

+
+
+sapphire.utils.ERR = [-1, -999]
+

Error values used to indicate missing or bad data. +Code -999 is used if the reconstruction of a quantity failed. +Code -1 is used if that detector/sensor is not present.

+
+ +
+
+sapphire.utils.c = 0.299792458
+

Speed of light in vacuum in m / ns.

+
+ +
+
+sapphire.utils.get_publicdb_base()
+

Get the HiSPARC Public Database base URL

+

This can be configured by setting the PUBLICDB_BASE environment +variable to the desired URL.

+
+ +
+
+sapphire.utils.pbar(iterable, length=None, show=True, **kwargs)
+

Get a new progressbar with our default widgets

+
+
Parameters:
+
    +
  • iterable – the iterable over which will be looped.

  • +
  • length – in case iterable is a generator, this should be its +expected length.

  • +
  • show – boolean, if False simply return the iterable.

  • +
+
+
Returns:
+

a new iterable which iterates over the same elements as +the input, but shows a progressbar if possible.

+
+
+
+ +
+
+sapphire.utils.ceil_in_base(value, base)
+

Get nearest multiple of base above the value

+
+ +
+
+sapphire.utils.floor_in_base(value, base)
+

Get nearest multiple of base below the value

+
+ +
+
+sapphire.utils.round_in_base(value, base)
+

Get nearest multiple of base to the value

+
+ +
+
+sapphire.utils.closest_in_list(value, items)
+

Get nearest item from a list of items to the value

+
+ +
+
+sapphire.utils.get_active_index(values, value)
+

Get the index where the value fits.

+
+
Parameters:
+
    +
  • values – sorted list of values (e.g. list of timestamps).

  • +
  • value – value for which to find the position (e.g. a timestamp).

  • +
+
+
Returns:
+

index into the values list.

+
+
+
+ +
+
+sapphire.utils.gauss(x, n, mu, sigma)
+

Gaussian distribution

+

To be used for fitting where the integral is not 1.

+
+ +
+
+sapphire.utils.norm_angle(angle)
+

Normalize an angle to the range [-pi, pi)

+

We use the range from -pi upto but not including pi to represent +angles.

+
+ +
+
+sapphire.utils.angle_between(zenith1, azimuth1, zenith2, azimuth2)
+

Calculate the angle between two (zenith, azimuth) coordinates

+

Using the haversine formula, +from: https://www.movable-type.co.uk/scripts/latlong.html

+
+
Parameters:
+
    +
  • zenith# – Zenith parts of the coordinates, in radians (0, pi/2).

  • +
  • azimuth# – Azimuth parts of the coordinates, in radians (-pi, pi).

  • +
+
+
Returns:
+

Angle between the two coordinates.

+
+
+
+ +
+
+sapphire.utils.vector_length(x, y, z=0)
+

Length of a vector given by (x, y, z) coordinates

+
+
Parameters:
+

x,y,z – vector components.

+
+
Returns:
+

length of vector.

+
+
+
+ +
+
+sapphire.utils.distance_between(x1, y1, x2, y2)
+

Calculate the distance between two (x, y) coordinates

+
+
Parameters:
+
    +
  • x# – x parts of the coordinates.

  • +
  • y# – y parts of the coordinates.

  • +
+
+
Returns:
+

distance between the two coordinates.

+
+
+
+ +
+
+sapphire.utils.make_relative(x)
+

Make first element the origin and make rest relative to it.

+
+ +
+
+sapphire.utils.which(program)
+

Check if a command line program is available

+

An Exception is raised if the program is not available.

+
+
Parameters:
+

program – name or program to check for, e.g. ‘wget’.

+
+
+
+ +
+
+sapphire.utils.memoize(method)
+

Memoisation cache decorator

+

Source: https://stackoverflow.com/a/29954160/1033535

+
+ +
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file